在DOC/VIEW结构的应用程序中,要修改主窗口(CMainFrame)的类名,可以利用超类化技术。关于超类化还可以参考浅谈MFC中超类化技术的实现。但是超类化技术对基于对话框基础的应用程序是没有效果。如何修改呢?先看看用超类化改DOC/VIEW结构形式。超类化技术一般有如下几个步骤:
1. 通过调用 GetClassInfoEx 来获得想要进行超类化操作的窗口类的信息。函数GetClassInfoEx 需要一个指向 WNDCLASSEX 结构的指针,用于当成功返回时填入窗口类的信息。
2. 按需要修改 WNDCLASSEX 结构的成员,其中有两个成员必须修改:
hInstance 存放程序的实例句柄
lpszClassName 指向一个新类名的指针
不必修改成员 lpfnWndProc,但大多数情况下还是需要的。但要记住如果要使用函数CallWindowProc
调用老窗口的过程,那就必须保存成员 lpfnWndProc 的原值。
3. 注册修改完的 WNDCLASSEX 结构,得到一个具有旧窗口类某些特性的新窗口类。
4. 用新窗口类创建窗口
由此修改主窗口类名的可以如下操作:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
//修改主窗口类名
WNDCLASS wndclass;
//GetClassInfo返回注册窗口类信息
::GetClassInfo(AfxGetInstanceHandle(),cs.lpszClass,&wndclass);
//重新设置窗口类的类名
wndclass.lpszClassName="New ClassName";
//重新注册新的窗口类
VERIFY(AfxRegisterClass(&wndclass));
// 利用新注册的类名修改主窗口类名
cs.lpszClass=wndclass.lpszClassName;
return TRUE;
}
同样的方法在基于对话框的应用程序里不起作用,因为对话框在过程根本没有进入这个函数,在MS KB中介绍了另一中修改此类程序类名的方法:
1 修改对话框资源
在工作区的资源标签上右键点击最上边的那个“xx resources”
在弹出的对话框中,去掉“Enable MFC feature”复选项
再打开对话框资源的属性对话框,在右下角的class name输入你要修改的类名。比如”xxx”
再加上“Enable MFC feature”复选项
2 在你的InstInstatce()虚函数中:
WNDCLASS wc = {0};
::GetClassInfo(AfxGetInstanceHandle(),"#32770",&wc);
wc.lpszClassName="xxx";
AfxRegisterClass(&wc);
然后重新编译即可。
原文参考:Q251059 - HOWTO: Provide Your Own Window Class Name for an MFC Dialog Box
分享到:
相关推荐
VC修改窗口类名
易语言修改窗口类名易语言源码,能用,易语言修改窗口类名.e
易语言拦截消息修改窗口类名源码,拦截消息修改窗口类名,MyCreateWindowEx,InstallApiHook,BeginHook,StopHook,UninstallApiHook,GetApiHookInfo,CreateWindowExA,RegisterClassExA,GetClassInfoExA,UnregisterClassA...
易语言源码易语言拦截消息修改窗口类名源码.rar
易语言编程源码,大家可以参考学习
易语言拦截消息修改窗口类名源码
第21章-OllyDbg反调试之检测OD进程名,窗口类名,窗口标题名1
WTEditor (窗口标题修改工具) V1.0 ...在更改窗口标题后,若需要将窗口标题更改为原窗口标题,请单击“撤销”按钮,窗口标题即恢复为您上次更改前的标题。 3.关于WTEditor 关于WTEditor 本程序为FastCoder开发。版本1.0.0
api形式
易语言源码取窗口句柄标题类名模块源码.rar
检测系统进程返回所有进程和窗口类名加在一起的字符串 另外字符串加解密19种加密方式 以及文本替换
易语言控件随机类名源码,更改易语言窗口及窗口内所有控件的类名
我的翻译的文章如何改变MFC应用程序主窗口的类名>>一文的资源。原资源有两个,我压缩为一个文件包后上传上来。源码时codeproject上的,我收取一分作为辛苦费,不要骂我哈^^
用于修改桌面布局时找到对应widget的包名和类名
取窗口标题 窗口类名 取得后 可以修改窗口的大小 方法 按下4方的按钮 然后鼠标放到要取的窗口上 两秒后就可以取到你要取的窗口信息
易语言同步缩放窗口类模块源码例程程序调用API函数实现窗口组件同步缩放。易语言同步缩放窗口类模块源码是易语言API应用例程。易学三叶编程网
动态更改应用程序图标 动态更改应用程序图标 动态更改应用程序图标 动态更改应用程序图标