1 消息机制的要点:

  消息队列:先进先出

  消息循环:通过循环while,不断的从消息队列中取得队首消息,并分发消息。

  消息处理:根据不同的消息类型做不同的处理

  事件:事件响应函数

2 消息机制

_tWinMain
{
// 注册窗口类
if(!AppRegisterClass(hInstance)) // hInstance 是应用程序句柄,把这个和winproc注册上。
{
return (FALSE);
}
// 初始化应用程序窗口
if (!InitInstance (hInstance, nCmdShow)) // 注册之后开始初始化应用窗口(createWindow得到g_hWnd ;ShowWindow(); UpdateWIndow)_)
{
return FALSE;
}

// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) //定义消息处理函数

wndProc会根据message类型调用对应的事件响应函数。

onDraw () // 每次刷新的时候都会重新绘制。

对于每一个正在执行的Windows应用程序,系统为其建立一个"消息队列",也就是应用程序队列
DispatchMessage会将消息传递给窗口函数,也就是WndProce函数。
WndProc是一个回调函数,在注册窗口时通过wcex.lpfnWndProc将其传递给了OS,所以DispatchMessage分发消息后,OS会调用
Wndproc去处理。

消息的定义和类型:
windows消息都以WM_为前缀,WM_PAINT.
typedef struct tagMsg
{
HWND hwnd; //接受该消息的窗口句柄
UINT message; //消息常量标识符,也就是我们通常所说的消息号
WPARAM wParam; //32位消息的特定附加信息,确切含义依赖于消息值
LPARAM lParam; //32位消息的特定附加信息,确切含义依赖于消息值
DWORD time; //消息创建时的时间
POINT pt; //消息创建时的鼠标/光标在屏幕坐标系中的位置
}MSG;

消息主要有3种类型:
A: 命令消息:
B: 标准窗口消息:
C: Notification:

队列消息和非队列消息: 按照是否需要放入队里

POSMessage 与 SendMessage:
POSMessage:发送到消息对列
SendMessage:非对列消息。直接发送窗口,等待执行结束。

最新文章

  1. Daily Scrum02 12.07
  2. JMeter HTTP Cookie管理器的跨域使用
  3. OO与设计模式的原则、目标
  4. linux CentOS 系统下如何将php和mysql命令加入到环境变量中
  5. Linux 设置系统时间和日期 API
  6. JDK和JRE的区别?
  7. 如何给开源的DUILib支持Accessibility(论述了DUILib的六个缺点,很精彩)
  8. Android Intent机制与常见的用法
  9. agnentX学习存在疑问?
  10. 计算理论:NFA转DFA的两种方法
  11. 大赛获奖选手专访 | 冷燕冰:最佳设计奖TIMING里的时机和时序
  12. 第42章 发现(discovery) - Identity Server 4 中文文档(v1.0.0)
  13. java上传文件常见几种方式
  14. QTP自动化测试-点滴-步骤
  15. jQuery方法区别:click() bind() live() delegate()区别
  16. MyBatis-Plugins
  17. LPVOID 没有类型的指针
  18. 可能比文档还详细--VueRouter完全指北
  19. Universal-Image-Loader解析(一)——ImageLoaderConfiguration的详细配置
  20. MySql中循环的使用

热门文章

  1. eclipse导入android项目错误,项目名称上有红叉,但代码中无报错
  2. PhantomJS 和Selenium模拟页面js点击
  3. iOS自动化探索(三)WebDriverAgent Python Client
  4. Hadoop WordCount程序
  5. Sturts2 三种开发模式 (转)
  6. LeetCode OJ:Maximum Subarray(子数组最大值)
  7. 如何切换到自定义的Activity
  8. 原创:Angular + controllerAs + CoffeeScript的一个问题,及其解决方案
  9. MySql 批量创建、导入实例
  10. python 绘图---2D、3D散点图、折线图、曲面图