//消息循环 

MSG 结构体
typedef struct tagMSG {HWND        hwnd;UINT        message;    //消息ID
    WPARAM      wParam;LPARAM      lParam;DWORD       time;        //时间(消息投递到消息队列的时间)POINT       pt;            //鼠标的当前位置
#ifdef _MACDWORD       lPrivate;
#endif
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;//一、消息基本概念:
产生过程: 事件---- > 封装消息(MSG结构体)---- > 传递消息到队列---- > 消息响应(消息处理函数)消息队列---- > GetMessage()---- > DispatchMessage()---- > winProc消息分类:
系统消息:取值范围(0~0x03ff)
程序消息(自定义消息):取值范围(0x400 - 0x7ff)         WM_USR + 100 (用户自定义)消息队列:
系统消息队列:鼠标键盘。。。
程序消息队列:队列消息:消息的发送和获取都在队列中
非队列消息:不需要存入队列,直接消息处理函数处理(WM_SIZE)//二、函数//2.1.1   GetMessage
//从消息队列中获得消息,并移除,无消息时,等待,,如果得到WM_QUIT消息返回的0,结束循环//1.例子
GetMessage(&msg, NULL, 0, 0);//2.原型
BOOL
WINAPI
GetMessageW(
_Out_ LPMSG lpMsg,
_In_opt_ HWND hWnd,
_In_ UINT wMsgFilterMin,
_In_ UINT wMsgFilterMax);//3.过程
当前消息队列(有, 判断窗口句柄,消息ID范围,满足则从消息队列中删除,并winProc || 无,系统消息,有的话进入到消息队列)
---- > 检查窗口是否重绘(有,WM_PAINT)
---- > 查看定时器(有,WM_TIMER)
---- > 优化内存,优化资源
---- > 等待。//2.1.2   PeekMessage
//从消息队列中获得消息,可选择是否移除,非堵塞,根据返回值,如果为false,则无消息//1.例子
PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);//2.原型
BOOL
WINAPI
PeekMessageW(
_Out_ LPMSG lpMsg,
_In_opt_ HWND hWnd,
_In_ UINT wMsgFilterMin,
_In_ UINT wMsgFilterMax,
_In_ UINT wRemoveMsg);    //PM_NOREMOVE  ||  PM_REMOVE//2.2   TranslateMessage
//大小写键盘翻译//例子
TranslateMessage(&msg);//2.3.1     SendMessage
//把消息发送到指定窗口,直接给消息处理函数,直到消息处理函数返回结束,堵塞函数(必须等消息处理完成)//1.例子
SendMessage(hWnd, WM_CLOSE, 0, 0);    //WM_DESTROY 是关闭程序的        WM_CLOSE 是关闭窗口的        WM_QUIT 是关闭消息环的//2.原型
LRESULT
WINAPI
SendMessageW(
_In_ HWND hWnd,
_In_ UINT Msg,    //消息
_Pre_maybenull_ _Post_valid_ WPARAM wParam,
_Pre_maybenull_ _Post_valid_ LPARAM lParam);//2.3.2     PostMessage
//发送消息,发送到消息队列,不等待处理完成,非堵塞函数//1.例子
PostMessage//2.原型
BOOL
WINAPI
PostMessageW(
_In_opt_ HWND hWnd,
_In_ UINT Msg,
_In_ WPARAM wParam,
_In_ LPARAM lParam);

转载于:https://www.cnblogs.com/ming-michelle/p/7633284.html

win32——消息循环 原理 函数 GetMessage PeekMessage TranslateMessage SendMessage PostMessage...相关推荐

  1. 模态对话框的消息循环原理及分析笔记

    简述: APP消息循环和模态对话框中局部消息循环的关系 根据上图可以看出,在APP的消息循环再派发ONOK消息后,调用ModalDlg的响应函数,pWnd->OnOk();在该消息中, 会 进入 ...

  2. PostMessage,SendMessage,GetMessage,PeekMessage,TranslateMessage,DispatchMessage的用法集合

    SendMessage函数功能描述:将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口过程,直到窗口过程处理完消息后才返回. Postmessage函数则是将消息放入消息队列里,并立即返回. ...

  3. 深入理解MFC消息循环和消息泵的原理

    首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情.在MFC ...

  4. 深入GetMessage,PeekMessage以及Windows消息机制

    译者的话该文重点讲述了Windows处理事件.消息的具体过程和步骤.尤其是在系系处理鼠标键盘事件的过程上做了详解.通过这篇文章,你将对Windows的消息处理机制有一个较全面的了解. 概念这篇文章解释 ...

  5. GetMessage以及消息循环说明

    GetMessage以及消息循环说明 在创建窗口.显示窗口.更新窗口后,我们需要编写一个消息循环,不断地从消息队列中取出消息,并进行响应.要从消息队列中取出消息,我们需要调用GetMessage()函 ...

  6. 模态对话框和非模态对话框的消息循环分析

    1.非模态对话框和父窗口共享当前线程的消息循环 2.模态对话框新建一个新的消息循环,并由当前消息循环派发消息,而父窗口.模态对话框屏蔽了用户对它父窗口的操作,但是不是在消息循环里面屏蔽,所以给父窗口发 ...

  7. VC编程Windows消息处理机制、阻塞试验、SetTimer、MessageBox、小心消息响应处理函数

    VC6标准WIN32程序,Windows消息处理机制: 1.在注册窗口类时,指定了消息处理函数WndProc(). 2.WinMain()里有消息循环: while (GetMessage(& ...

  8. 消息循环,注册窗口,创建窗口【图解】

    本文是Win32编程基础 尽管Windows应用程序千变万化,令人眼花缭乱,但,消息机制和窗口过程却始终它们的基础,掌握了这两项技术,也就相当于把握住了问题的关键 DirectX编程也是建立在这个基础 ...

  9. GetMessage PeekMessage

    最近在忙活进程通讯的东西,其中在A进程中有个通讯线程ATHREAD,B进程中有通讯线程Bthread,研究了半天这个THREAD该怎么写,研究结果如下. 1.线程中创建一个窗口.这个窗口的消息循环需要 ...

最新文章

  1. 基于感知损失的实时风格迁移与超分辨率重建
  2. Zookeeper的配置文件
  3. 学习记录-class与namespace的区别
  4. JAVA 设计模式 观察者模式
  5. 【渝粤教育】21秋期末考试马克思主义基本原理概论(A)10882k1 (2)
  6. 自适应宽度元素单行文本省略用法探究
  7. I/O模型系列之四:两种高性能IO设计模式 Reactor 和 Proactor
  8. 位操作符:与,或,异或 狼羊菜
  9. js去掉第一个换行符_通过异步迭代简化Node.js流程
  10. PSIM软件学习---02 原件模型
  11. 《云云众声》第95期:业界大事接着看 HP成功收购Aruba;IBM战略变动 前景发展被看好...
  12. Unix/Linux环境C编程新手教程(40) 初识文件操作
  13. 《嵌入式 – GD32开发实战指南》第11章 CPU的高级代理-DMA
  14. 强强联手|任子行公司董事长景晓军一行到访云畅科技交流
  15. qlikview连接mysql_QlikView安装
  16. 手机配指环条码阅读器的爱恨纠缠
  17. JavaEE进阶 - Spring Boot 日志文件 - 细节狂魔
  18. CheatSheet——OpenCV
  19. 【新能源】从“材料”到“电池组”一文读懂动力电池生产全流程!
  20. UE5/C++ 基于GAS的角色升级 7.2 准备好经验奖励效果GE

热门文章

  1. 计算机平面设计论文范,计算机平面设计论文关于计算机平面设计中汉字艺术论文范文参考资料...
  2. 曼大和华威计算机科学预科哪个好,华威预科申请曼彻斯特本科
  3. opt eclipse jre bin java_在Eclipse中指定JDK
  4. android 指定进程名称,android 根据进程名杀死指定、特定进程
  5. html研究中心,新媒体研究中心.html
  6. linux远程登录显示,SSH远程登录显示自定义警告信息
  7. java实现自动登录_java实现用户自动登录
  8. pytorch torch.save
  9. nginx main user
  10. vim shell命令