默认情况下,MFC对话框的窗口类名为“#32770”,如果想自定义窗口类名呢,需要两步:
1.修改rc文件
这一步需要直接编辑rc文件,使用任意记事本工具即可,找到对话框的相关定义,旧格式是这样子的:
/
//
// Dialog
//
IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "关于 txanswer"
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,14,14,21,20
LTEXT "txanswer,版本 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX
LTEXT "版权所有 (C) 2024",IDC_STATIC,42,26,114,8
DEFPUSHBUTTON "确定",IDOK,113,41,50,14,WS_GROUP
END
IDD_TXANSWER_DIALOG DIALOGEX 0, 0, 192, 219
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
END
然后增加一行,写上自己想要定义的类名,如下:
/
//
// Dialog
//
IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "关于 txanswer"
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,14,14,21,20
LTEXT "txanswer,版本 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX
LTEXT "版权所有 (C) 2024",IDC_STATIC,42,26,114,8
DEFPUSHBUTTON "确定",IDOK,113,41,50,14,WS_GROUP
END
IDD_TXANSWER_DIALOG DIALOGEX 0, 0, 192, 219
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
CLASS "your sister" //新类名
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
END
2: 第二步是注册类名
在窗口创建之前,执行以下代码,比如可以放在CXXXApp::InitInstance()函数中,在对话框创建之前。
WNDCLASS wc;
// 获取窗口类信息。MFC默认的所有对话框的窗口类名为 #32770
::GetClassInfo(AfxGetInstanceHandle(), _T("#32770"), &wc);
// 改变窗口类名
wc.lpszClassName = _T("your sister"); //这里请再次注意,一定要保证和rc资源文件里保存的类名相同!
// 注册新窗口类,使程序能使用它
AfxRegisterClass(&wc);