「Win」Windows 之 RegisterClassEx 注册窗口类

✨博客主页
何曾参静谧的博客(✅关注、👍点赞、⭐收藏、🎠转发)
📚全部专栏(专栏会有变化,以最新发布为准)
「Win」Windows程序设计「IDE」集成开发环境「定制」定制开发集合
「C/C++」C/C++程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「UG/NX」BlockUI集合
「Py」Python程序设计「Math」探秘数学世界「PK」Parasolid函数说明
「Web」前后端全栈开发「En」英语从零到一👍占位符
「AI」人工智能大模型「书」书籍阅读笔记

目录

  • RegisterClassEx 注册窗口类
    • 示例:注册多个窗口类
    • 常见用途
    • 注意事项

RegisterClassEx 注册窗口类

示例:注册多个窗口类

// 第一个窗口类 - 主窗口WNDCLASSEX wcxMain;wcxMain.cbSize=sizeof(wcxMain);wcxMain.style=CS_HREDRAW|CS_VREDRAW;wcxMain.lpfnWndProc=MainWndProc;// ... 其他设置wcxMain.lpszClassName=L"MainWindowClass";RegisterClassEx(&wcxMain);// 第二个窗口类 - 子窗口/控件WNDCLASSEX wcxChild;wcxChild.cbSize=sizeof(wcxChild);wcxChild.style=CS_HREDRAW;wcxChild.lpfnWndProc=ChildWndProc;// ... 其他设置wcxChild.lpszClassName=L"ChildWindowClass";RegisterClassEx(&wcxChild);// 第三个窗口类 - 对话框WNDCLASSEX wcxDialog;wcxDialog.cbSize=sizeof(wcxDialog);wcxDialog.style=CS_DBLCLKS;wcxDialog.lpfnWndProc=DialogWndProc;// ... 其他设置wcxDialog.lpszClassName=L"DialogClass";RegisterClassEx(&wcxDialog);

常见用途

一个进程注册多个窗口类的常见场景:

  1. 不同类型的窗口:主窗口、子窗口、工具窗口等
  2. 自定义控件:创建自己的按钮、列表框等控件类
  3. 不同外观/行为:使用不同的窗口过程处理不同的窗口行为
  4. MDI应用程序:框架窗口、子窗口等

注意事项

  1. 类名必须唯一:每个注册的窗口类必须有唯一的lpszClassName

  2. 检查返回值RegisterClassEx返回ATOM(非零值表示成功),最好检查是否成功:

if(!RegisterClassEx(&wcxMain)){// 处理错误DWORD error=GetLastError();// ...}
  1. 避免重复注册:如果类名已注册,RegisterClassEx会失败。可以使用GetClassInfoEx检查:
WNDCLASSEX wcx;if(!GetClassInfoEx(theInst,L"MainWindowClass",&wcx)){// 类未注册,可以安全注册RegisterClassEx(&wcxMain);}
  1. 系统资源限制:虽然可以注册多个,但每个窗口类会消耗系统资源,合理控制数量

你的代码是正确的,如果你需要不同类型的窗口,可以继续注册其他窗口类。

何曾参静谧的博客(✅关注、👍点赞、⭐收藏、🎠转发)