1. 程式人生 > 實用技巧 >自定義MFC對話視窗的類名

自定義MFC對話視窗的類名

預設情況下,MFC對話方塊的視窗類名為“#32770”,如果想自定義視窗類名呢,需要兩步:

1.修改rc檔案

這一步需要直接編輯rc檔案,使用任意記事本工具即可,找到視窗的相關定義,原來是這樣子的:

IDD_TESTMYWNDCLASS_DIALOG DIALOGEX 0, 0, 320, 200
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "我的自定義類視窗"
FONT 9, "宋體"
BEGIN
    DEFPUSHBUTTON   
"確定",IDOK,260,7,50,14 PUSHBUTTON "取消",IDCANCEL,260,23,50,14 LTEXT "TODO: 在這裡設定對話控制。",IDC_STATIC,50,90,200,8 END

然後增加一行,寫上自己想要定義的類名,如下:

IDD_TESTMYWNDCLASS_DIALOG DIALOGEX 0, 0, 320, 200
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "
我的自定義類視窗" CLASS "MyClassName" FONT 9, "宋體" BEGIN DEFPUSHBUTTON "確定",IDOK,260,7,50,14 PUSHBUTTON "取消",IDCANCEL,260,23,50,14 LTEXT "TODO: 在這裡設定對話控制。",IDC_STATIC,50,90,200,8 END

2.註冊類名

在視窗建立之前,執行以下程式碼,比如可以放在CXXXApp::InitInstance()函式中,在對話方塊建立之前。

	WNDCLASS wc;
	// #32770 is the default class name for dialogs boxes.
	::GetClassInfo(AfxGetInstanceHandle(), _T("#32770"), &wc);
	
	// Change the name of the class.
	wc.lpszClassName = _T("MyClassName"
); //這裡請再次注意,一定要保證和rc資原始檔裡儲存的類名相同! // Register this class so that MFC can use it. BOOL bRet = AfxRegisterClass(&wc);

然後就可以了。編譯執行程式,用spy++或spy4win看一下,效果如下: