MFC의 CDialogEx는 CDialog에서 파생된 클래스로 기능은 거의 비슷하며, 배경을 지정하는 기능이 추가되었다.
참고로, 상속관계는 아래와 같고...
1 2 3 4 5 | CObject CCmdTarget CWnd CDialog CDialogEx |
CDialogEx에 추가된 메소드들은 아래와 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void SetBackgroundColor( COLORREF color, BOOL bRepaint=TRUE);void SetBackgroundImage( HBITMAP hBitmap, BackgroundLocation location=BACKGR_TILE, BOOL bAutoDestroy=TRUE, BOOL bRepaint=TRUE);BOOL SetBackgroundImage( UINT uiBmpResId, BackgroundLocation location=BACKGR_TILE, BOOL bRepaint=TRUE); |
여기까진 대체로 알려진 얘기들이고, 특별할 건 없다.
문제는 CDialogEx를 사용하면 프로젝트가 제대로 컴파일이 안 되는 상황이 발생할 수도 있다는 점이다.
정적 라이브러리에서 MFC를 사용[각주:1]하도록 설정을 하면 위 화면과 비슷한 컴파일 오류를 뿜어낸다.
찾아보니 라이브러리 링크 순서를 바꾸라는 식의 해결책이 꽤 보이던데, 훨씬 간단한 해결책이 있다.
pch.h(예전에는 stdafx.h 였음)의 내용 일부를 수정하는 것이다.
1 2 3 4 5 6 7 8 | #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 일부 CString 생성자는 명시적으로 선언됩니다. #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS // 대화 상자에서 MFC 컨트롤에 대한 지원을 제거합니다. // MFC의 공통 부분과 무시 가능한 경고 메시지에 대한 숨기기를 해제합니다. #define _AFX_ALL_WARNINGS #include <afxwin.h> // MFC 핵심 및 표준 구성 요소입니다. #include <afxext.h> // MFC 확장입니다. |
위 내용에서 표시한 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS 행을 주석처리하면 문제 없이 컴파일된다.
그런데, 이게 끝이 아니다.
이렇게 컴파일하고 나면 실행파일의 크기가 심각하게 커지는 문제가 발생한다.
테스트에 사용한 프로젝트는 CDialogEx를 하나도 사용하지 않았는데, 컴파일 결과는 아래와 같았다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | d:\_develop\VS2019\Projects\iTrans\x64\Release>dir D 드라이브의 볼륨: All The Data 볼륨 일련 번호: xxxx-xxxx d:\_develop\VS2019\Projects\iTrans\x64\Release 디렉터리 2020-10-11 오전 09:49 <DIR> . 2020-10-11 오전 09:49 <DIR> .. 2020-10-11 오전 09:42 1,820,672 iTrans.exe 2020-09-19 오후 07:31 <DIR> tools 1개 파일 1,820,672 바이트 3개 디렉터리 2,267,515,940,864 바이트 남음 d:\_develop\VS2019\Projects\iTrans\x64\Release> |
그런데, 이를 CDialogEx로 교체한 결과는 아래와 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | d:\_develop\VS2019\Projects\iTrans Test\x64\Release>dir D 드라이브의 볼륨: All The Data 볼륨 일련 번호: xxxx-xxxx d:\_develop\VS2019\Projects\iTrans Test\x64\Release 디렉터리 2020-10-11 오전 09:49 <DIR> . 2020-10-11 오전 09:49 <DIR> .. 2020-10-11 오전 09:48 3,892,736 iTrans.exe 2020-09-19 오후 07:31 <DIR> tools 1개 파일 3,892,736 바이트 3개 디렉터리 2,267,515,940,864 바이트 남음 d:\_develop\VS2019\Projects\iTrans Test\x64\Release> |
배경색이나 배경 이미지를 지정하는 함수를 하나도 사용하지 않았음에도 크기가 2배 이상 늘어난 것이다.
두 줄 요약
1. 배경을 반드시 지정해야 되는 경우가 아니라면 CDialog만 사용하는 게 합리적
2. CDialogEx를 사용할 수 밖에 없으면 pch.h를 수정해야 함
드디어 집에 Mesh Wi-Fi를 구축하다 (0) | 2020.11.02 |
---|---|
IEC와 EEI/IEEE의 역률(PF)의 부호 차이 (0) | 2020.10.25 |
T-Mobile TM-AC1900에 DD-WRT를 깔고야 말았다 (3) | 2020.10.07 |
지인 집을 정리하다 유물 발견 (1) | 2020.10.03 |
내 코드도 북극에 아카이빙 됐네? Arctic Code Vault Contributor (0) | 2020.08.20 |
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.