2008/04/07

MFC Dialog Box에서 자신의 Class Name설정



출처 : http://www.debuglab.com/knowledge/classname.html

MFC기반 어플리케이션에서 Dialog Box에 자신의 윈도우 Class Name을 제공하는 방법을 설명하겠습니다. Single instance를 필요로하는 Dialog기반의 어플리케이션을 작성할 때 Dialog가 자신만의 Class Name을 필요로 할때가 있습니다. 그러나 MFC에서는 기본적으로 모든 Dialog가 #32770이라는 Class Name으로 설정되어있습니다.

  • ResourceView를 연다.
  • Resource Editor에서 Dialog Box를 열고 Dialog Box에서 오른쪽 버튼을 클릭한 다음
    Properties를 선택한다. 오른쪽 아래를 보면 Class Name이라는 곳이 disable되어 있을 것이다. 이 옵션을
    enable할려면 resource view의 top-level node를 선택하고 오른쪽 버튼을 누르고 Properties를
    선택한다. 그런 다음 Enable MFC Features 체크 박스를 해제한다. 다시 Dialog Box의 properties를
    보면 Class Name 옵션이 enable되어있을 것이다.
  • Class Name을 입력하고 .rc 파일을 text형식으로 연다. 해당하는 DIALOG resource로 가서 CLASS 옵션을 추가한다.

IDD_LIMITDLGINSTANCE_DIALOG DIALOGEX 0, 0, 195, 44
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "LimitDlgInstance"
CLASS "MyPrivateClassName" // Add your class name here!
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,138,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,138,23,50,14
PUSHBUTTON "&Test!",IDC_BUTTON1,48,14,49,15
END

  • CWinApp에 상속받은 class에서 InitInstance() 부분에 다음 코드를 추가한다.

BOOL CLimitDlgInstanceApp::InitInstance()
{
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
WNDCLASS wc;

// Get the info for this class.
// #32770 is the default class name for dialogs boxes.
::GetClassInfo(AfxGetInstanceHandle(), "#32770", &wc);

// Change the name of the class.
wc.lpszClassName = "MyPrivateClassName";

// Register this class so that MFC can use it.
AfxRegisterClass(&wc);

//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// ...
}

  • 위 단계에서 ::GetClassInfo()호출 부분에 만약 Dialog resource가 DLL에 위치해 있다면 적절한 HINSTANCE를 사용하여 호출한다.
  • 프로젝트를 Build하고 실행한 다음 Spy++로 확인해보면 새로운 Class Name으로 설정된 것을 볼 수 있을 것이다.


출처 : http://www.debuglab.com/knowledge/classname.h

Original Post :
http://neodreamer-dev.tistory.com/93

No comments :

Post a Comment