对话框管理器第三章:创建控件

对话框管理器第三章:创建控件

和上一篇创建框架窗口相比,创建控件的工作要轻松很多,信不信由你。在对话框模板中定义的每一个控件,其对应的子窗口将会被创建。控件的大小和位置在模板中是以DLU为单位来描述的,所以,理所当然的,我们需要将它们转换为以像素单位,代码如下:int x = XDLU2Pix(ItemTemplate.x);int y = YDLU2Pix(ItemTemplate.y);int cx = XDLU2Pix(ItemTemplate.cx);int cy = YDLU2Pix(ItemTemplate.cy);

控件类名和标题也来自于模板。还有一些可选的额外字节pExtra没有人使用,但由于历史原因保留在模板定义中。 一旦收集了这些信息,就该制作”甜甜圈”了。HWND hwndChild = CreateWindowEx(ItemTemplate.dwExStyle | WS_EX_NOPARENTNOTIFY,pszClass, pwzCaption, ItemTemplate.dwStyle,x, y, cx, cy, hdlg, ItemTemplate.dwId,hinst, pExtra);

请注意,对于对话框控件,WS_EX_NOPARENTNOTIFY 样式是默认启用的。

下一部分经常让人栽跟头。 “当我尝试创建我的对话框时,它失败了,我不知道为什么。” 这可能是因为无法创建对话框上的某个控件,通常是因为你忘记为该控件注册窗口类。 (例如,您忘记调用 InitCommonControlsEx 函数或忘记 LoadLibrary 适当版本的 RichEdit 控件。)

if (!hwndChild) {DestroyWindow(hdlg);return NULL;}

DS_NOFAILCREATE 样式禁止了上述失败检查。但是,如果确实创建了控件,则需要对其进行初始化。SetWindowContextHelpId(hwndChild, ItemTemplate.dwHelpID);SetWindowFont(hwndChild, hf, FALSE);

对模板中的每个控件重复上面的步骤后,你现在拥有一个包含所有子控件的对话框。 告诉对话过程它可以初始化它的子窗口,如果我们在构建框架时延迟了 WS_VISIBLE 位,则显示(现在准备好的)对话框,并将对话框返回给我们的调用者,此时对话框已准备就绪了。// The default focus is the first item that is a valid tab-stop.

HWND hwndDefaultFocus = GetNextDlgTabItem(hdlg, NULL, FALSE);if (SendMessage(hdlg, WM_INITDIALOG, hwndDefaultFocus, lParam)) {SetDialogFocus(hwndDefaultFocus);}if (fWasVisible) ShowWindow(hdlg);return hdlg;}

关于SetDialogFocus,我们之前讲过。

至此,你应该明白了对话框是如何创建了。

(实际上,现实情况要复杂得多,因为我跳过了所有应用程序兼容性技巧!例如,有一个程序依赖于细节的设置和WS_BORDER样式的缺失来决定控件是组合框还是列表框 . 我猜GetClassName函数工作量太大了?)

我希望这可以帮助你更好地理解对话模板是如何工作的。

总结

描述性语言,是程序开发者和操作系统之间的一种十分友好的沟通方式。就好比COM时代的IDL(接口描述语言)。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。本文来自:《The dialog manager, part 3: Creating the controls》

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
用户投稿
上一篇 2022年7月28日 12:10
下一篇 2022年7月28日 12:10

相关推荐

  • ios手游模拟器(手游模拟器ios)

    本文主要讲的是ios手游模拟器,以及和手游模拟器ios相关的知识,如果觉得本文对您有所帮助,不要忘了将本文分享给朋友。 哪个iOS模拟器能多开手游账号?可以推荐个好用的模拟器给我吗…

    2022年11月27日
  • 短视频策划内容的3个要点(短视频策划内容怎么做)

    短视频在制作时,内容框架非常重要。如果直奔主题,然后结束,聚卓告诉你,这样的短视频已经过时了。现在的短视频需要框架的,但不是任何框架,它需要一种易于理解和消化的框架。而且,现在大多…

    2022年11月27日
  • 存储过程语法(sql server存储过程语法)

    今天小编给各位分享存储过程语法的知识,其中也会对sql server存储过程语法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧! oracle存储过程基本语法…

    2022年11月26日
  • 游戏平台有哪些(游戏平台有哪些)

    简要回答 游戏平台指的是多人通过互联网在线游戏的平台,例如qq游戏,联众世界,浩方电竞平台,VS竞技游戏平台等,只要你下载平台,下载相关游戏,就能实现对战,摆脱了局域网的限制。 详…

    2022年11月25日
  • 政务窗口工作人员扇市民耳光?江苏昆山官方:已停职反省

    政务窗口工作人员扇市民耳光?江苏昆山官方:已停职反省 11月23日,昆山不动产登记中心窗口一员工扇办事市民耳光视频引关注。 视频显示,事发22日,窗口一名男性员工先是拿起疑似纸张物…

    2022年11月25日
  • 《英雄联盟》2022冬季转会期什么时候?2022冬季转会期时间介绍

    英雄联盟lpl2022年的冬季转会期即将正式开启了,很多小伙伴可能对转会时间还不是很了解吧,今天小编给大家带来lol2022冬季转会期时间介绍,快来看一下吧。 2022冬季转会期时…

    2022年11月23日
  • 简短而有吸引力的标题(100个超强吸引人的标题)

    众所周知,在创作过程中,我们的标题非常重要。 无论是在邮件中、软文中、还是百度竞价的创意,还是图文信息的标题…… 读者第一眼看到的是我们的标题,如果我们的标题没有吸引力的话,那么读…

    2022年11月18日
  • 如何在手机上文字排版(文字排版软件哪个好用)

    经常面对大量图片和文字的编辑和排版,但是找不到又好看又好用的模板,只能自己慢慢去调整,或者就是简单的文字插图片,没新意又不能吸引人,真的太需要一个模板多的图文编辑器了! 我们登录后…

    2022年11月18日
  • 分享3种视频脚本拍摄模板的方式(视频拍摄脚本模板都有哪些)

    #脚本创作##短视频#短视频脚本的分类大致可分为以下三类:拍摄提纲、文学脚本和分镜头脚本。今天呢,我们继续围绕脚本这个话题,讲一下这三类脚本的应用。 到底哪种脚本适合短视频呢?其实…

    2022年11月17日
  • 分享做网站收费的3个标准(做网站的收费标准是什么)

    网站制作这行比较混乱,有的价格高得离谱,有的价格低得不符合实际,很多第一次做网站的用户分布清楚到底网站要多少钱才是合理的。 网站分很多类型,个人网站、电商网站、行业门户、是企业官网…

    2022年11月15日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息