如何自定义窗口类名

来源:互联网 发布:mfc编程入门教程视频 编辑:程序博客网 时间:2024/05/17 07:48

    Windows的标准应用程序都有约定的类名,如对话框的类名是#32770,文本框/编辑框类名是Edit,按钮类名为Button等。这也有于我们查找窗口,使用FindWindows/FindWindowEx/GetWindow等函数。但,如何把这些类名设为我们自定义的类名呢?

    第一种方法:在需要更改类名的对话框资源上右击,选择“属性”,打开属性对话框,可以看到有一个名为“Class Name”的属性,我们在其中输入一个自己定义的名称(如”MyPrivateClassName”)即可。但是,MFC默认设置这个属性选项是灰色不可用的,我们先要开启它。切换到资源视图,右击根节点(如”XxxXxx.rc”),选属性,去掉勾选“Enable MFC Features”项(如果是VS.Net,把”MFC Mode property”项改为False)。这样就可以修改对话框的Class Name属性了,假如为"MyClassName"。
然后在BOOL CXXXXApp::InitInstance()方法的”WNDCLASS wc;”下方加上如下代码:

//////////////////////注册新类名///////////////////////////// 获取窗口类信息。MFC默认的所有对话框的窗口类名为 #32770::GetClassInfo(AfxGetInstanceHandle(), _T("#32770"), &wc);// 改变窗口类名wc.lpszClassName = _T("MyClassName");// 注册新窗口类,使程序能使用它AfxRegisterClass(&wc);///////////////////////////////////////////////////////////
    这段代码必须加上并且需要注册,要不然程序启动不了。
    第二种方法是:直接用文本编辑器打开资源文件,修改对话框定义代码,插入CLASS项,如:

IDD_LIMITDLGINSTANCE_DIALOG DIALOGEX 0, 0, 195, 44STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENUEXSTYLE WS_EX_APPWINDOWCAPTION "LimitDlgInstance"CLASS "MyPrivateClassName" //Add your class name here!FONT 8, "MS Sans Serif"BEGINDEFPUSHBUTTON "OK",IDOK,138,7,50,14PUSHBUTTON "Cancel",IDCANCEL,138,23,50,14PUSHBUTTON "&Test!",IDC_BUTTON1,48,14,49,15END
    最后还要定制并注册新窗口类。在应用程序类的InitInstance()函数中添加以下代码,以注册资源文件中用到的新窗口类:如前述。

注意:
在调用函数::GetClassInfo()时,请确保传入的第一个参数HINSTANCE是包含你对话框资源所在的dll或exe的进程实例。
请确保资源中指定的Class Name与InitInstance()中指定的窗口类名完全相同,否则程序不能运行。
更改完成,请重建工程,运行程序,使用Spy++查看最终效果吧!


0 0
原创粉丝点击