Windows应用程序与以往的DOS程序不同,它是以消息为基础、以事件为驱动的应用程序,应用程序在运行时,会不断地等待操作系统发送给自身的消息,利用一个while循环,然后依据不同的消息进行处理。
接收并且处理消息的主角是窗口,每一个窗口都有一个负责处理消息的函数,通常称之为“窗口函数”或“回调函数”,当窗口获得一个消息时,窗口函数会判断消息的类型,并确定如何处理消息。因此开发人员需要负责设计窗口函数,以实现其预定的功能。
这里所说的窗口并不单指对话框,按钮,编辑框,组合框等控件也可以称为窗口。
在Windows应用程序中,句柄是一个非常重要的概念,它起到标识对象的作用,系统的内核对象(进程、线程、事件等)、GDI对象(窗口、图标、光标等)都包含一个句柄,当系统在创建内核对象或GDI对象时会为其分配内存,同时返回这些对象的标识,即句柄。
此后程序对这些对象进行操作都是通过句柄进行的。
窗口创建的消息为WM_CREATE
消息类型:
一类是系统预定义的消息,一类是用户自定义的消息。
系统消息由前缀和后缀2部分组成,前缀表示处理该消息的窗口类别,后缀描述消息的内容,
例如:WM_CLOSE WM表示处理该消息的窗口为一般窗口, CLOSE表示窗口关闭
系统消息前缀:
WM 普通窗口消息
BM 按钮消息
CB 组合框消息
ABM 应用程序桌面工具条消息
DBT 设备消息
CBEM 扩展组合框消息
CDM 通用对话框消息
DL 下拉列表框消息
DM 对话框默认的Push按钮消息
DTM 日期和时间控件消息
HDM Header控件消息
HKM 热键消息
IPM IP控件消息
LB 列表框控件消息
LVM 列表视图控件消息
MCM 日历控件消息
PBM 进度条控件消息
PGM Pager控件消息
PSM 属性标签消息
RB 伸缩条消息
SB 状态栏消息
SBM 滚动条消息
STM 静态控件消息
TB 工具条消息
TBM 跟踪条消息
TCM 标签控件消息
TTM 工具提示消息
TVM 树视图控件消息
UDM 微调按钮控件消息
EM 编辑框控件消息
系统保留了0x0000----0x03ff的消息值,
用户可以使用0x0400---0x7fff(WM_USER)的消息值。
为了获得系统范围内唯一的消息字符串,可以调用RegisterWindowMessage函数,向其传递一个消息字符串,该函数会返回一个0XC000---0XFFFF的系统范围内唯一的消息标识符。
消息循环:
MSG msg;
While( GetMessage( &msg, NULL, 0, 0) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
程序的进入点:
WinMain函数