哦等等 , 我们必须处理前面讨论过的对话框创建的微妙之处:对话框总是在最初隐藏创建的 。
BOOL fWasVisible = dwStyle & WS_VISIBLE;
dwStyle &= ~WS_VISIBLE;
对话框类和标题来自模板 。几乎每个人都只使用默认对话框类 , 尽管我在之前的文章中解释了如何使用自定义对话框类 。
好的 , 现在我们有了创建窗口所需的信息 。
HWND hdlg = CreateWindowEx(dwExStyle pszClass
pszCaption dwStyle & 0xFFFF0000 pt.x pt.y
cxDlg cyDlg hwndParent hmenu hinst NULL);
请注意 , 我们过滤掉了所有低样式位(每个类) , 因为我们已经将 DS_* 样式转换为“真实”样式 。
这就是为什么你的对话过程没有得到像 WM_CREATE 这样的窗口创建消息的原因 。在创建框架时 , 对话过程还没有进入画面 。只有在框架创建之后 , 对话管理器才能附加对话过程 。
// Set the dialog procedure
SetWindowLongPtr(hdlg DWLP_DLGPROC (LPARAM)lpDlgProc);
对话框管理器在这一点上做了更多的摆弄 , 基于对话框模板样式 。模板可能要求提供窗口上下文帮助 ID 。如果模板没有指定允许调整大小、最大化或最小化的窗口样式 , 则相关的菜单项将从对话框的系统菜单中删除 。
接下来是设置字体:
SetWindowFont(hdlg hf FALSE);
这就是为什么你的对话过程收到的第一条消息恰好是 WM_SETFONT:它是在设置 DWLP_DLGPROC 之后发送的第一条消息 。当然 , 这种行为将来可能会改变; 你不应该依赖消息排序 。
好的 , 对话框架现在已经创建完成了 。下一步:创建控件 。
总结拖拖控件它确实简单 , 但是操作系统实现它的底层原理还真是不那么简单 。
你可以:
> 忽略这些复杂的 , 繁琐的东西 , 继续”接着奏乐接着舞” 。
> 苦其心志 , 深入研究这些细枝末节的东西 。
好了 , 选择权给到你这边了 。
最后Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《The dialog manager part 2: Creating the frame window》
- 杭州|精湛工艺、旗舰配置,华为WatchGT3Pro,不一样的颜值担当
- 客服|浙江杭州,一男子花899元在京东一网店上购买了一台冰柜
- 电池|2022年一款现代化的文件管理器,感觉来试试吧!
- TCL|浙江杭州,一男子花了10000多元买了个华为折叠屏手机
- 华夏小康|KK直播再度荣登《2022杭州独角兽&准独角兽企业榜单》
- 华夏小康|YIDATEC杭州:沪杭共济 构筑长三角区域数字生态矩阵
- 搜狐|有颜值有实力出行“新势力”礼帽出行上线杭州
- 广州市|杭州有阿里,深圳有腾讯,广州有什么知名企业?
- 华夏小康|杭州城基科技加快城市管网智能化管理平台建设
- 华夏小康|全球标准服务高品质出行礼帽出行打造杭州出行新体验