1、窗口消息处理程序WindowProc:
/*窗口消息处理程序定义*/
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM IParam)
/*
1、与MSG结构的前四个字段相同。
2、如果程序是依据同一窗口类别(同时也是同一窗口消息处理程序)建立多个窗口,则hwnd标识接收消息的特定窗口。
3、程序通常不直接呼叫窗口消息处理程序,窗口消息处理程序通常由Windows本身呼叫。通过呼叫SendMessage函数,程序能够直接呼叫它自己的窗口消息处理程序。
*/
/*
WndProc只处理三种消息:WM_CREATE、WM_PAINT和WM_DESTROY.
窗口消息处理程序在处理消息时,必须传回0。窗口消息处理程序不予处理的所有消息应该被传给名为DefWindowProc的Windows函数。从DefWindowProc传回的值必须由窗口消息处理程序传回。
*/
switch(iMsg)
{
caseWM_CREATE:
处理WM_CREATE消息
return 0;
caseWM_PAINT:
处理WM_PAINT消息
return 0;
caseWM_DESTROY:
处理WM_DESTROY消息
return 0;
}
return DefWindowProc(hwnd,iMsg,wParam,IParam);
用switch…case来处理窗口消息。
/*
播放声音文件:
1、WndProc处理第一个消息——WM_CREATE(当Windows在WinMain中处理CreatWindow函数时);
可以理解为,HELLOWIN呼叫CreatWindow时,Windows呼叫WndProc。
2、WndProc处理WM_CREATE消息并将控制传回给Windows。
3、Windows再从CreatWindow呼叫传回HELLOWIN。
4、窗口消息处理程序在WM_CREATE处理期间进行一次窗口初始化。
注意:Windows都经过CreatWindow呼叫。
5、PlaySound函数:函数说明在/Platform SDK/Graphics and Multimedia Services/Multimedia Audio/WaveformAudio中,
而文件在/Platform SDK/Graphics and Multimedia Services/Multimedia Reference/Multimedia Functions中。
*/
/*
PlaySound函数:第一个参数声音文件的名称;第二个参数只有当声音文件是一种资源时才被使用;第三个参数指定一些选项。
当指定第一个参数是一个文件名,并且异步地播放声音,即PlaySound函数呼叫在声音文件开始播放时立即传回,
而不会等待它的完成。在这种方法下,程序能够继续初始化。
*/
/*
WM_PAINT消息:建立窗口的时候,整个显示区域都是无效的。
第一条WM_PAINT消息(通常发生在WinMain中呼叫UpdateWindow时)指示窗口消息处理程序在显示区域上画一些东西。
当窗口显示区域的一部分显示内容或者全部变为「无效」,以致于必须「更新画面」时,将由这个消息通知程序。
在图形环境下,窗口显示区域涉及的数据量很大。Windows不保存一个窗口中被另一个窗口所遮盖的内容。
*/
/*WM_PAINT处理从BeginPaint呼叫开始*/
hdc = BeginPaint(hwnd,&ps);
结束
EndPaint(hwnd,&ps);
//两个参数:窗口句柄和PAINTSTRUCT的结构指针;
//PAINTSTRUCT结构中包含一些窗口消息处理程序,可以用来更新显示区域的内容。
/*
在BeginPaint呼叫中,如果显示区域的背景还未被删除,则由Windows来删除。
它使用注册窗口类别的WNDCLASS结构的hbrBackground字段中指定的画刷来删除背景。
Windows将通过把窗口背景设定为白色来删除窗口背景。
BeginPaint呼叫令整个显示区域有效,并传回一个「设备内容句柄」。
设备内容是指实体输出设备(如视讯显示器)及其设备驱动程序。
*/
/*WndProc接着呼叫GetClientRect*/
GetClientRect(hwnd,&rect); //RECT型态的rectangle结构,有四个字段left、top、right和bottom。
/*DrawText:输出文字*/
DrawText(hdc,TEXT("Hello,Windows 98"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_CENTER);
/*第一个参数是从BeginPaint传回的设备内容句柄,第二个参数是要输出的文字,第三个参数是 -1,指示字符串是以字节0终结的。
最后一个参数是一系列位旗标。(此函数在/Platform SDK/Graphics and Multimedia Services/GDI/Fonts and Text中说明)
旗标指示了文字必须显示在一行上,水平方向和垂直方向都位于第四个参数指定的矩形中央。*/
/*
WM_DESTROY消息:Windows正在根据使用者的指示关闭窗口。
HELLOWIN通过呼叫PostQuitMessage以标准方式响应WM_DESTROY消息。
该函数在程序的消息队列中插入一个WM_QUIT消息。当GetMessage获得WM_QUIT时传回0。
*/
PostQuitMessage(0);
return msg.wParam;//wParam通常为0
/*。参数message是WM_SIZE。消息WM_SIZE的参数wParam的值是SIZE_RESTORED、SIZE_MINIMIZED、SIZE_MAXIMIZED、SIZE_MAXSHOW或SIZE_MAXHIDE (在WINUSER.H表头文件中分别定义为数字0到4)。也就是说,参数wParam表明窗口是非最小化还是非最大化,是最小化、最大化,还是隐藏。*/
/*
队列化消息和非队列化消息:
1、Windows给窗口发送消息,这意味着Windows呼叫窗口消息处理程序;
2、Windows程序也有一个消息循环,它呼叫GetMessage从消息队列中取出消息,并且呼叫DispatchMessage将消息发送给窗口消息处理程序。
*/
单词:multimedia 多媒体、Wave form Audio 波形音频、graphics 绘图、reference 参考、platform平台、client客户端 rectangle 矩形、single单一、minimized最小化、maximized最大化。