首页系统综合问题在运行时创建一个对话框模板

在运行时创建一个对话框模板

时间2022-12-04 22:30:07发布分享专员分类系统综合问题浏览89

在之前的系列文章中,我们花了很长一段时间来学习了对话框模板和对话框管理器messagebox show 。

现在,让我们将之前所需到的各个知识点融合一下,来做一些有意思的事情,例如:在程序运行期间创建一个对话框模板messagebox show 。

具体来说,我们将会实现一个简陋版本的 MessageBox 函数messagebox show 。为什么我们要花功夫来实现一个 Windows 里已经有了的函数,且这个函数还不一定比原版的好呢?

因为,你可以将它作为一个起点来不断改进优化,来实现其他更加有现实意义的功能messagebox show 。

举个例子,如果你学会了如何在运行期创建一个对话框模板,则你就可以动态地添加除了默认的 “OK” 按钮以外的其他按钮,或者在对话框上添加其他自定义控件,或者插入一个动画控件等messagebox show 。

首先,我将会以一个不那么高效的对话框模板类开始messagebox show 。下面的代码虽然没有生产级别代码的质量,但是作为讲解原理的例子代码,还是足够的。请看:

在运行时创建一个对话框模板

我没有花很多时间来优化这段代码,因为它并不是本篇文章的重点messagebox show 。DialogTemplate 类带有一个 vector 数据成员和一个 Write 方法用来写入数据,另外还有一个 AlignToDword 方法用来将缓冲区对齐到下一个 DWORD 边界。后面,这些方法都会派上用场。

我们的消息框将需要一个对话框过程函数,该函数在用户按下 IDCANCEL 按钮时结束对话框messagebox show 。如果我们对对话框模板进行了任何自定义改造,我们也会在这个函数中进行处理。如下图所示:

在运行时创建一个对话框模板

至此,我们创建了一个对话框模板了messagebox show 。整个过程不是很复杂,但是细节挺多的。处于演示的目的,我将对话框的大小设置成了一个固定值。如果要更完美的话,可以先通过获取 ncm.lfCaptionFont 和 ncm.lfMessageFont 对话框文本的长度和高度,然后选择最为合适的大小。

在运行时创建一个对话框模板

在运行时创建一个对话框模板

毕竟,用于确定字体点大小的花哨公式并不那么花哨messagebox show 。对话框管理器通过标准公式将字体高度从点转换为像素,如下:

fontHeight = -MulDiv(pointSize, GetDeviceCaps(hdc, LOGPIXELSY), 72);

因此,要取回原始像素值,我们需要为pointSize求解这个公式,以便当它再次通过公式发送时,我们得到原始值messagebox show 。

一个微妙之处在于,”确定” 按钮的控件标识符是 IDCANCEL,而不是你可能期望的 IDOKmessagebox show 。这是因为此消息框只有一个按钮,因此我们希望让用户按 ESC 键将其关闭。

现在剩下要做的就是把这个函数再修改一下messagebox show ,如下图所示:

在运行时创建一个对话框模板

现在让我们启动这个程序,点击空格键,然后观察消息框的行为messagebox show 。

好吧,所以这在视觉上不是很令人兴奋,但这不是重点messagebox show 。关键是你现在知道如何在运行时构建对话框模板。

总结

今天我们通过代码的方式,演示了如何在运行时创建一个自定义的对话框模板messagebox show 。

感觉是否还不错messagebox show ?

关键在于messagebox show ,你可以举一反三,将此技术放入到你的常用工具箱中,万一你的”Java大项目”哪天需要用到呢?

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助messagebox show 。

本文来自:《Building a dialog template at run-time》

在运行时创建一个对话框模板

爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。

Arraymessagebox show
聊一聊 WPF 程序的键盘是如何被窃听的? 离线文件转换工具,支持word转pdf、pdf转word,图片、ofd等转换