zoukankan      html  css  js  c++  java
  • MFC学习(四) 消息机制

    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:非对列消息。直接发送窗口,等待执行结束。

  • 相关阅读:
    CSS简单的四种引入方式
    html之表单标签
    html基础标签之head和body标签
    Python之协程的实现
    Python之实现不同版本线程池
    Python多进程之multiprocessing模块和进程池的实现
    Python之queue模块
    sqlserver 时间格式化
    关于sql server 代理(已禁用代理xp)解决办法
    sqlserver如何启动数据库邮件
  • 原文地址:https://www.cnblogs.com/liufei1983/p/7132391.html
Copyright © 2011-2022 走看看