拈花小仙 发表于 2014-8-5 07:26:40

WM_INITDIALOG这个消息的参数求详细~

本帖最后由 拈花小仙 于 2014-8-13 08:31 编辑

wParam lParam MSDN上的一些数语过于专业,我有些听不懂,谁能用自己的话讲一下这俩个参数?

提示:小仙很笨但不懒,会先从百度查,找不到满意答案才问~

メ㊣逆ご帅☆ 发表于 2014-8-5 07:26:41

WM_INITDIALOG 消息是对话框才能收到的消息,表明对话框及其所有子控件都创建完毕了。这个状态肯定是 调用显示对话框的函数之前。
首先你肯定创建了一个对话框。因为此消息是对话框才能收到的消息。表明对话框及其所有子控件都创建完毕的意思是对话框本身还有上面一些控件(比如按钮啦。EDIT啦)都创建完毕了。但是只是创建完毕而已。还没有显示出来(显示在屏幕上),所以说收到这个消息肯定是在你调用显示对话框的函数之前


百度百科给出了一个例子
hwndFocus = (HWND) wParam;
lInitParam = lParam;
这说明wParam是参数hwndFocus
lParam是参数lInitParam

hwndFocus(wParam)
接收默认键盘焦点的控件的句柄。系统分配默认键盘焦点,只有当对话框过程,则返回 TRUE。

这个的意思是
系统会默认分配接受键盘焦点的控件。什么叫键盘焦点。


可以看到箭头所指的,我一打开程序,什么鼠标键盘都没有动。“选择文件”这个按钮周围就有一个矩形的虚线包围着


这时候键盘按回车。可以看到效果相当于鼠标单击了选择文件。我想这应该很容易明白键盘焦点是什么了


也就是hwndFocus就是这个焦点
不信你可以在对话框ShowWindow或者其他显示函数调用后
调用GetFocus()(在之前调用会返回NULL)
会发现和hwndFocus的数值一样。




lInitParam
CreateDialogIndirectParam、CreateDialogParam、 DialogBoxIndirectParam 或 DialogBoxParam之类的API有个参数lInitParam。
这些API指定传递到WM_INIDIALOG消息的Iparam参数中对话框中的值。
属性表中,此参数是用于创建页的 PROPSHEETPAGE 结构的指针。如果使用任何其他对话框创建函数,则此参数将为零。


戏++ 发表于 2014-8-5 08:33:29

窗口初始化好了后系统会发这个消息给窗口
一般是等到窗口中的所有控件创建后

拈花小仙 发表于 2014-8-5 08:45:35

戏++ 发表于 2014-8-5 08:33
窗口初始化好了后系统会发这个消息给窗口
一般是等到窗口中的所有控件创建后

想知道wParam lParam 这两个参数的详解,百度百科上用数语解说的,我看不懂

沧海.sea 发表于 2014-8-5 09:34:13

WM_INITDIALOG 消息是对话框才能收到的消息,表明对话框及其所有子控件都创建完毕了。这个状态肯定是 调用显示对话框的函数之前。
1函数原型
编辑

来源于MSDN:Windows CE 3.0版本
WM_INITDIALOG hwndFocus = (HWND) wParam;
lInitParam = lParam;
2参数
编辑

hwndFocus
接收默认键盘焦点的控件的句柄。系统分配默认键盘焦点,只有当对话框过程,则返回 TRUE。
lInitParam
指定额外的初始化数据。此数据是作为对用于创建对话框的 CreateDialogIndirectParam、 CreateDialogParam、 DialogBoxIndirectParam 或 DialogBoxParam 函数的调用中的 lParamInit 参数传递到系统。属性表中,此参数是用于创建页的 PROPSHEETPAGE 结构的指针。如果使用任何其他对话框创建函数,则此参数将为零。
3附:与WM_CREATE的对比
编辑

WM_INITDIALOG与WM_CREATE的区别: WM_CREATE是所有窗口都能响应的消息,表明本窗口已经创建完毕.在响应WM_CREATE消息响应函数的时候,对话框及子控件还未创建完成,亦是说只是通知系统说要开始创建窗口了,这个消息响应完之后,对话框和子控件才开始创建。因此在此消息响应函数中无法对控件进行修改和初始化。 而WM_INITDIALOG消息响应函数是在程序运行时,当其对话框和子控件全部创建完毕,将要显示内容的时候发送的消息。因此可以在WM_INITDIALOG消息响应函数中添加对编辑框控件的初始化和修改。

q9yuanjing 发表于 2014-8-8 15:18:31

メ㊣逆ご帅☆ 发表于 2014-8-5 07:26
首先你肯定创建了一个对话框。因为此消息是对话框才能收到的消息。表明对话框及其所有子控件都创建完毕的 ...

强悍啊

q9yuanjing 发表于 2014-8-8 15:19:57

沧海.sea 发表于 2014-8-5 09:34
WM_INITDIALOG 消息是对话框才能收到的消息,表明对话框及其所有子控件都创建完毕了。这个状态肯定是 调用显 ...

牛!!牛
页: [1]
查看完整版本: WM_INITDIALOG这个消息的参数求详细~