我认为大家关于对话框管理器的很多困惑,来自于没有真正地理解它的底层工作原理。这其实也没那么糟。在接下来的几篇文章中,我将首先描述对话框是如何创建的,然后我会讲解对话框消息循环,最后,我会再介绍一些有关导航相关的主题。
这一系列将会包含九篇文章,请做好,扶稳了。
对话框管理器的第一个主要部分,是它负责读取对话框模板并基于此模板创建一个对话框。
你会看到一些形如CreateDialogXxx的函数,它们用来创建对话框。而它们只是在底层调用CreateDialogIndirectParam这个函数。在这些函数中,有些直接是通过宏来定义的,例如CreateDialog只是简单地调用CreateDialogParam,并将一个参数设置为0.
类似的,CreateDialogIndirect也只是将一个参数设置为0并调用CreateDialogIndirectParam。
我们先来看看一个比较简单的包装器函数,如下图所示:
在上面的代码中,CreateDialogParam只是使用hinst/pszTemplate来定位对话框模板,然后使用此模板来调用CreateDialogIndirectParam,以创建对应的对话框。
好了,今天就先到这里,不复杂吧?
在下一篇文章中,我将会从一个模板中创建对话框,请小期待一下。
地球人都知道,我一向不喜欢弹出式对话框,但是:人在江湖,身不由己。
TopomelBox也还是用到了一些对话框,这些对话框仅用于给使用者一些关键性提示。
要完全避免对话框的使用,我看,挺难的。但我的原则还是:对话框能不用,咱就不用。
没事瞎干扰用户干啥。
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《The dialog manager, part 1: Warm-ups》