반응형
프로그램을 하다보면, 이전에 만들어 두었던 기능을 그대로 신규 프로젝트로 가져와야 할 경우가 있다.
처음부터 라이브러리화 해서 만들었다면, 크게 문제가 되지 않지만 라이브러리화가 어려운 경우에는 서로 다른 두 프로젝트를 합치는 노력을 기울여야 한다.
VC++에서 다이얼로그를 추가하고, 클래스를 생성해서 제작한 과거의 프로젝트가 있는 경우, 이를 신규 프로젝트에 다이얼로그와 클래스를 어떻게 붙여야 하는지를 알아본다.
프로젝트를 합치는 작업은 버튼클릭 하나로 합쳐지지는 않는다. 아마도 한번에 합쳐지는것을 원하겠지만, 하나씩 뜯어서 붙여 넣기를 해야 한다. 하지만, 합치는 작업은 그리어렵지 않기 때문에 걱정하지 않아도 된다.
1. 합치고자하는 부분의 다이얼로그 리소스와 해더 파일에 있는 정보를 가져와야 한다.
2. 과거 코드를 복사하여 붙여 넣는다.
아마도 리소를 붙여 넣기 하는 부분이 초보자에게는 어려운 일일것이다. 하지만 하나도 어렵지 않다.
과거의 프로젝트의 파일들을 살펴 보자. 이때 살펴보아야 할 것은 리소스파일이다. *.rc 확장자가 rc 파일을 본다. rc 파일은 다이얼로그등의 리소스에 대한 정보를 텍스트 파일로 가지고 있다. 우선 메모장을 열어 이동하고자하는 다이얼로그 ID값을 찾아 낸다.
예를 들어 다이얼로그 ID값이 IDD_DLG_PROPERTY 이라면, rc파일을 열어 찾아 보면 아래와 같은 샘플처럼 나타난다.
다이얼로그의 속성 정보와 컨트롤 그림 정보들이 나타난다.
이때, 중요한것은 IDC_STATIC 정보를 제외한 나머지 IDC_BTN_CLR_PEN, IDC_BTN_CLR_BRUSH등과 같이 개발자가 임의로 정한 ID값이 추가된 resource.h 파일에서 가져와야 한다.
아래 내용은 리소스 파일의 일부이다.
IDD_DLG_PROPERTY DIALOG DISCARDABLE 0, 0, 289, 64
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Property"
FONT 10, "System"
BEGIN
PUSHBUTTON "",IDC_BTN_CLR_PEN,43,7,13,12
LTEXT "Pen Color",IDC_STATIC,7,8,33,8
LTEXT "Fill Color",IDC_STATIC,64,9,30,8
PUSHBUTTON "",IDC_BTN_CLR_BRUSH,96,8,13,12
LTEXT "Font Color",IDC_STATIC,192,9,34,8
PUSHBUTTON "",IDC_BTN_CLR_FONT,229,7,13,12
LTEXT "Line Width",IDC_STATIC,117,9,36,8
COMBOBOX IDC_COMBO_LINE_WIDTH,158,7,23,78,CBS_DROPDOWN | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
LTEXT "Font Align",IDC_STATIC,193,27,33,8
PUSHBUTTON "<-",IDC_BTN_LEFT,229,24,13,12
PUSHBUTTON "<->",IDC_BTN_MID,247,24,13,12
PUSHBUTTON ">",IDC_BTN_RIGHT,264,24,13,12
PUSHBUTTON "U",IDC_BTN_UP,229,45,13,12
PUSHBUTTON "C",IDC_BTN_CENTER,247,45,13,12
PUSHBUTTON "D",IDC_BTN_DOWN,264,45,13,12
LTEXT "Font",IDC_STATIC,251,9,15,8
PUSHBUTTON "F",IDC_BTN_FONT,269,7,13,12
END resource.h파일열어 보면, 각각의 컨토롤에 대하여 ID값이 적혀 있다. 뒤에 있는 번호는 무시하고 앞 리소스의 ID값에 해당하는 정의부분을 가져온다.
#define IDC_CHK_POINTER 1012
#define IDC_CHK_BUTTON 1013
#define IDC_BTN_CLR_PEN 1013
#define IDC_BTN_CLR_BRUSH 1014
#define IDC_CHK_DYNAMIC 1014
#define IDC_BTN_CLR_FONT 1015
#define IDC_CHK_CHART 1015
#define IDC_COMBO_LINE_WIDTH 1016
#define IDC_BTN_FONT 1017
#define IDC_RDO_KOR 1019
#define IDC_RDO_ENG 1020
#define IDC_RDO_CHI 1021
#define IDC_RDO_POL 1022
#define IDC_EDIT_KOR 1023
#define IDC_EDIT_ENG 1024
#define IDC_BTN_LEFT 1025
#define IDC_EDIT_CHI 1025
#define IDC_BTN_MID 1026
#define IDC_EDIT_POL 1026
#define IDC_BTN_RIGHT 1027
#define IDC_BTN_UP 1028
#define IDC_BTN_CENTER 1029
#define IDC_BTN_DOWN 1030
각각의 아이디가 정의 되어 있다. 앞 에서 리소스 파일에 들어간 ID이름을 통하여 모두 찾아 낸다.
리소스에 대한 모든 정보를 찾아낸 후,
신규 프로젝트에서 다이얼로그를 하나 생성하자. 과거의 다이얼로그 ID와 동일하면 그대로 복사하기만 하면 된다. 하지만 다이얼로그 ID를 바꾸고 싶으면, 리소스를 복사할때 다이얼로그 ID의 이름만 바꾸어 주면 된다. 다이얼로그를 생성하였다면, 잠시 프로젝트를 닫고, 신규 프로젝트의 rc파일을 열어 생성한 다이얼로그의 ID를 검색하여 찾아낸다.
그리고, 과거 프로젝트에서 찾아낸 리소스 정보를 그대로 덮어쓰기를 수행한다. 그런 다음 resource.h 파일에 리소스에 추가된 ID값을 중복되지 않는 번호로 신규 프로젝트 해더파일에 추가하면 된다.
이렇게 진행한 후, 프로젝트를 열면, 다이얼로그 리소스가 과거에 만들어 놓은 리소스와 동일하게 올라오는 것을 확인 할 수 있다.
그런다음, 과거에 추가한 코드 해더와 cpp 파일을 복사하여 붙여 넣으면 된다. 일부 인터페이스는 수기로 작업을 요하기도 하나, 크게 코드를 이해하고 있다면 쉽게 프로젝트를 합칠수 있을것으로 본다.
반응형
'C & C++ > C & C++' 카테고리의 다른 글
[Tip] 네트워크 프린터 검색 (0) | 2011.05.24 |
---|---|
[TIP] MFC Tip 4 (0) | 2011.05.24 |
(Tip) 포인터 값으로 추적하는 디버그 팁 (0) | 2011.05.21 |
BOOL 과 bool 의 차이점 (0) | 2011.05.06 |
[Tip] 외부 프로그램 실행 및 종료 (0) | 2011.05.04 |
댓글