C++如何创建窗口程序?Windows API永不过时( 二 )

线程和窗口在WIN32中 , 消息队列是与线程(Thread)相关的 , 一个线程只能有一个消息队列(queue)与之相对应 。当一个线程里面首次调用User32.dll或GDI32.dll中的函数时 , 系统会为该线程创建一个消息队列 , 否则就没有消息队列 。
在一个线程中可以产生多个窗口 , 所以每个窗口课共用一个线程消息队列 , 所有产生给某个窗口的消息 , 都先由创建这个窗口的线程处理 , 窗口在任何线程中都可以创建 , 但消息循环必须要和创建窗口在同一线程 , 否则窗口将无法从DispatchMessage()获取任何消息 , 为了使窗口接受这些消息 , 线程必须有自己的循环 。

C++如何创建窗口程序?Windows API永不过时

文章插图
消息分类
  • 标准消息:所有以WM_开头的消息 , 除了WM_COMMAND
  • 命令消息:来自菜单栏、工具栏、按钮或者快捷键的消息 。WM_COMMAND
  • 通告消息:由控件产生的消息 , 例如按钮单击、列表项的选择等 , 为了向其父窗口通知事件的发生 。
SendMessage和PostMessage
C++如何创建窗口程序?Windows API永不过时

文章插图
PostThreadMessage
C++如何创建窗口程序?Windows API永不过时

文章插图




推荐阅读