当前位置:C++技术网 > 资讯 > 从对话框模板创建子控件的初始化问题

从对话框模板创建子控件的初始化问题

更新时间:2018-11-10 10:35:33浏览次数:1+次

从对话框模板创建创建非模态对话框,在对话框当中有一自定义控件,想在这一控件创建后做一些初始化工作,请问该在哪里写代码?

C++技术网解答:

    不管是自定义控件还是标准控件,始终都对应一个窗口过程来处理,因为控件就是窗口。标准控件的窗口过程由系统标准化内置提供,如果要修改系统内置的标准控件的窗口过程,来处理标准控件的窗口消息,可以子类化控件。子类化原理请参考《窗口(控件)子类化技术原理分析图解》。

    而自定义控件,就看你是如何实现。如果是自己创建窗口类实现的,那么自定义控件的所有消息处理都在自己提供的窗口类指明的窗口过程中处理。此时,自定义控件就是一个标准的窗口。初始化工作在WM_CREATE消息中处理。如果是其他方式实现,比如对话框,那么就不能像标准窗口一样处理。因为对话框模板是Windows提供的一套窗口处理机制,方便使用控件,所以很多基础工作都做好了。你不必去处理WM_CREATE这类消息,而是处理对话框机制下提供的一些消息,有WM_INITDIALOG(初始化对话框)、WM_COMMAND(控件单击等)。

    只要使用对话框机制的窗口或者控件,都遵循对话框消息机制。对话框消息机制并不是窗口消息机制,对话框消息机制包装了窗口的消息机制。WM_INITDIALOG消息相当于系统给对话框预设的窗口过程中处理了WM_CREATE,然后进行一些其他处理,然后再返回WM_INITDIALOG消息让程序员进一步处理。这样,你利用对话框时,也就利用了对话框的机制,因此对话框已经做了很多工作,如焦点切换等。

    所以,对话框和窗口不一样,对话框是建立在标准窗口之上的,有一定的机制形成的有机整体。所以,如果不理解,可能会将对话框和窗口混为一谈,也不知道为什么不是在WM_CREATE消息而是在WM_INITDIALOG消息中给对话框初始化。

    这些内容,在网站的Windows频道下有很多相关文章讲解。只是因为有点散,所以没有放到《Windows零基础入门教程

》中,但是是教程的内容组成。如果有时间,会进行整理。如果还有问题,请在文章后面留言交流。