Win32API学习笔记第七章(一)

来源:互联网 发布:js防水涂料需要加水泥 编辑:程序博客网 时间:2024/06/07 20:28

这次记录的是Dialog这个在VS的资源管理器里面也可以直接托,拖完了只需要对每一个窗口控制改下ID(或者不改也可以)然后就可以用了。

使用方法:

总括对话框

创建方法已经知道了,来说下这么用,这个对话框和一般的子窗口有点不一样,这个对话框一共分为两个类型,一个是模态的,一个是非模态的,意思就是说一个是不允许用户在同一程序的窗口之间切换的,一个是允许的,要切换,必须显示的把这个窗口关了。但是这种不允许切换也就只是正对这一个程序,程序与程序之间的切换还是被允许的。但是还有一个对话框是系统模态的,这个对话框就必须等待他显式的被关闭之后才可以继续进行其他的工作。

对话框

对话框也有一个类似域窗口过程的用户定义的对话框过程,但是与一般的窗口过程不同,对话框一般只在创建时初始化子窗口控制然后处理一下子窗口控制的消息以及结束时

消息如下:

WM_INITDIALOG,这个消息就是类似于WM_CREAT消息(对话框不接收WM_CREAT),同样的这个消息是对话框接收到的第一个消息
之后就是WM_COMMAND消息了,这个消息用法和之前的资源菜单的用法一致。

激活对话框:

激活一个对话框只需要在调用到相关消息(一般实在菜单消息时)调用DialogBox这个函数,这个函数的内容:DialogBox(HINSTANCE,LPTCHAR,HWND,一个和窗口过程参数相同的一个函数指针)
同样,我们可以直接由对话框发送消息到父窗口:
SendMessage(GetParent(hDlg(这个是Dialog窗口的窗口句柄)),…)
我们也可以获取到对话框内子窗口控制的窗口句柄:
GetDlgItem(HWND,控件ID)(这个函数在之前也有介绍过)
最后我们要处理关闭消息(除了直接点右上的X)我们一般是接收到类似关闭按钮发送的消息时调用EndDialog(hDlg,int)就可以了,这里的int是在DialogBox时的返回值,可以做一些事情,类似:

if (DialogBox (hInstance, TEXT ("AboutBox"), hwnd, AboutDlgProc))                    InvalidateRect (hwnd, NULL, TRUE) ;               return 0 ;
原创粉丝点击