自定义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看一下,效果如下: