I'm on your side, when times get rough.

2023-09-20

[WTL] Create Dialog Based Application

Filed under: Programming — Peter_KIM @ 12:48

WTL 기반의 간단한 다이얼로그 프로그램을 만들어 보겠습니다. 다이얼로그에서 사용하는 GUI 요소는 RC 파일을 이용하여 구성할 것입니다.

* Visual Studio 2022 프로그램을 실행합니다. “Create a new project” 메뉴를 선택합니다.

* 창이 바뀌면 “Search for templates” 입력 칸에 “WTL”을 입력합니다.

* 템플릿 목록에서 “WTL10 Application Wizard”를 선택합니다. “Next” 버튼을 클릭합니다.

* Project name 칸에 “WTLDialog”를 입력합니다. “Create” 버튼을 클릭합니다.

* “Welcome to the WTL Application Wizard” 창이 나타나면, “Next” 버튼을 클릭합니다.

* “Select application type:”에서 “Dialog Based”를 누르고 “Modal Dialog”에 체크 표시를 합니다. “Finish” 버튼을 클릭합니다.

템플릿을 기반으로 기본 프로젝트가 생성될 것입니다. 그러나, RC 파일을 만들면서 오류가 나타날 수 있습니다. 이것을 근본적으로 해결하려면, VC++ Include 디렉터리에 “..\WTL10_10320_Release\Include” 디렉터리를 포함하여야 합니다.

2023-09-19 211114

* “Edit Code” 버튼을 클릭합니다.

* “WTLDialog.rc” 파일이 텍스트 모드로 열립니다. 그러나, 이 파일에는 아무런 오류가 없습니다. 이 상태에서 컴파일을 시도하면, 다음과 같은 오류를 만날 수 있습니다.

“Error C1083 Cannot open include file: ‘atlapp.h’: No such file or directory”

* “Resource View” 창에서 “WTLDialog” 프로젝트를 선택하고 마우스 오른쪽 버튼을 눌러서 “Properties” 메뉴를 선택합니다.

* “WTLDialog Property Pages” 창의 왼쪽 목록에서 “VC++ Directories” 메뉴를 선택합니다.

” 창의 오른쪽 목록에서 “Include Directories”를 눌러서 아래의 그림과 같이 “..\WTL10_10320_Release\Include”를 입력하고, “Ok” 버튼을 클릭합니다.

* “Ok” 버튼을 클릭하여, “WTLDialog Property Pages” 창을 종료합니다.

* “Build” 메뉴에서 “Build Solution” 메뉴를 눌러서 다시 빌드를 수행하면, 오류가 제거된 것을 확인할 수 있습니다.

* “F5” 키를 눌러서 프로그램을 실행할 수 있습니다.

이제 만든 프로그램의 코드를 살펴보겠습니다. 프로젝트에 “stdafx.h” 파일이 보입니다. 이런 파일은 사실 제 프로젝트에서는 잘 사용하지 않습니다. 아주 오랜 VS6.0 시절에는 “Precompiled Header”를 처리하면서 변경한 코드를 제대로 컴파일하지 못하는 일들이 종종 있어서, 이런 파일은 사용을 하지 않았습니다.

* “WTLDialog Property Pages” 창을 열고, “C/C++” 메뉴 아래에 있는 “Precompiled Headers” 메뉴를 선택합니다. 오른쪽 목록에서 “Precompiled Header” 값을 “Not Using Precompiled Headers”로 변경합니다. “OK” 버튼을 클릭합니다.

2023-09-19 210918

* “WTLDialog.cpp” 파일을 수정합니다. “stdafx.h” 파일의 내용을 복사하여, “#include “stdafx.h”” 코드 위에 붙여 넣고, “#include “stdafx.h”” 코드를 제거합니다. “extern CAppModule _Module;” 코드는 주석으로 처리합니다.

* 프로젝트에서 “stdafx.h” 파일과 “stdafx.cpp” 파일을 제거합니다. 프로젝트에서 해당 파일을 선택하고 마우스 오른쪽 버튼을 눌러서 “Remove” 메뉴를 선택하고, “Delete” 버튼을 클릭합니다.

* “WTLDialog Property Pages” 창을 열고, “C/C++” 메뉴 아래의 “General” 메뉴에서 “Warning Level”의 값을 “Level4″로 설정합니다.

* “MainDlg.h” 파일을 열어봅니다. CDialogImpl<CMainDlg> 클래스를 상속받았으며, MFC 라이브러리와 유사한 BEGIN_MSG_MAP ~ END_MSG_MAP 매크로가 보입니다. “WTL”이라는 이름에서 알 수 있겠지만, Template 기반의 클래스를 상속하여 코드를 구현하는 것이 큰 차이점입니다.

전체 코드는 아래의 주소에서 내려받을 수 있습니다.
https://1drv.ms/u/s!An5hHO7t37wbiBIuXafNMQoRibvM?e=CmPONU

Leave a Comment »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

Blog at WordPress.com.