自定義MFC對話視窗的類名
阿新 • • 發佈:2020-08-14
預設情況下,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看一下,效果如下: