标签:
一、Win32消息机制
	  1、消息机制
		    过程驱动:程序是按照我们预先定义好的顺序执行,每执行一步,下一步都已经按照预定的顺序继续执行,知道程序结束。
		    事件驱动:程序的执行顺序是无序的。某个时间点所执行的代码,是由外界通知。由于我们无法决定用户执行顺序,所以代码的执行也是无序。
		    Win32的消息机制 - 事件驱动
	  2、Win32消息程序
		    2.1、Win32窗口注册
		    2.2、Win32窗口创建
		    2.3、Win32消息循环
			      2.3.1、GetMessage
		          BOOL GetMessage(          
			              LPMSG lpMsg, 		//存放获取到的消息数据
    			              HWND hWnd,		//获取消息的窗口句柄
    			              UINT wMsgFilterMin,	//消息过滤的起始消息
    			              UINT wMsgFilterMax);	//消息过滤的终止消息
		          返回值BOOL:成功获取消息,返回TRUE,但是当获取到WM_QUIT消息时,返回FALSE。
		          可以使用PostQuitMessage向窗口发送WM_QUIT消息。
		          MSG - 由系统填写关于消息的参数。
		          hWnd - GetMessage会根据hWnd值,接收由hWnd指定的窗口的消息。
		          wMsgFilterMin、wMsgFilterMax - 消息过滤器。
			          要求GetMessage接收指定范围的消息。
			      2.3.2、TranslateMessage
				          将键盘消息转换成字符消息。
				        1、首先检查是否是键盘按键消息
				        2、如果发现是键盘按键消息,将根据按键,产生一个字符消息,在下一个GetMessage执行时,会收到这个消息。
				        3、如果未发现按键消息,不做任何处理。
			      2.3.3、DispatchMessage
				          根据消息数据内窗口句柄,找到这个窗口的处理函数,调用处理函数,进行消息处理。
				          如果MSG中,HWND窗口句柄为空,DispatchMessage不做任何处理。
	
		    2.4、Win32基本消息
			      2.4.1、WM_DESTROY 窗口销毁时的消息,可以做退出或善后处理。
			      2.4.2、WM_CREATE 窗口创建后,是在窗口创建后,窗口处理函数收到的第一条消息。
				          可以在这个消息内做数据初始化/创建子窗口等。
			          WPARAM wParam - 不使用
			          LPARAM lParam - CREATESTRUCT指针
			      2.4.3、WM_SIZE
				          当窗口大小发生变化时,会收到这个消息。
				          可以在这个消息中调整窗口布局。
				          wParam - SIZE发生变化时的标识。
				          LOWORD(lParam); - 客户区的宽
				          HIWORD(lParam); - 客户区的高
			      2.4.4、WM_SYSCOMMAND
				          系统命令消息,当点击系统菜单和按钮时,会收到。
				          可以在这个消息中,提示用户保存数据等。
			      2.4.5、WM_PAINT:绘图消息
			      2.4.6、键盘消息
			      2.4.7、鼠标消息
			      2.4.8、WM_TIMER:定时器消息
		    2.5、消息结构
			      MSG - 消息结构
		        typedef struct {
    			            HWND hwnd;	//消息的窗口句柄
    			            UINT message;	//消息标示
    			            WPARAM wParam;	//消息的参数,32位
   	 		            LPARAM lParam;	//消息的参数,32位
    			            DWORD time;	//消息产生的时间
    			            POINT pt;	//消息产生时,鼠标的位置
			            } MSG, *PMSG;
		    2.6、消息的获取和发送
			      2.6.1、获取GetMessage/PeekMessage
				          GetMessage 获取消息,阻塞函数
				          PeekMessage获取消息,非阻塞函数
			      2.6.2、发送SendMessage/PostMessage
			
	
标签:
原文地址:http://www.cnblogs.com/gongyan/p/4354367.html