编写一个窗口程序,需要知道以下知识:
什么是 事件消息?
Windows中的事件是一个“动作”,这个动作可能是用户操作应用程序时产生的,也有可能是Windows(窗口)自己产生的。
用户动作有:鼠标左键被按下,键盘w键被按下..等等.
而消息,就是用来描述这些“动作”的,比如:
这个动作是什么时候产生的?
哪个应用程序产生的?
在什么位置产生的?
等等..
windows为了能够准确的描述这些信息,提供了一个结构体
typedef stuct tageMSG
{
HWND hwnd;//windows给我们提供的一个资源,类似窗口身份ID 名词:窗口句柄
UINT message; //消息类型 鼠标左键还是右键,还是键盘.鼠标移动等等..共400多种
WPRAM wParam;//附加的信息 进一步详细描述消息类型 根据详细类型可以查MSDN文档
LPARAM lParam;//附加的信息2 进一步详细描述消息类型 根据详细类型可以查MSDN文档
DWORD time;//什么时候触发的这个动作
POINT pt;//坐标 x,y
}MSG,*PMSG
windows必须时刻记录鼠标坐标,动作类型(左键是个类型,右键也是个类型,键盘按键也是个类型),在什么窗口内.
用MSDN查看MSG结构体 里面有成员详细解释
系统消息队列与应用程序消息队列:
用户输入->事件触发->封装成一个消息结构里->系统队列(消息结构数组)->(系统队列判断是哪个的窗口消息就分给对应的应用程序队列)应用程序队列->写代码 让应用程序从队列里取出MSG消息结构->消息循环判断是否是自己关注的消息,是就进入对应的消息处理函数..不是的就让windows去处理(忽略不管即可)
简洁流程: 事件 MSG 系统消息队列 应用程序消息队列 循环取出消息 处理消息
循环取出消息:
MSG M