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

  • 相关阅读:
    Javascript事件处理程序的3种方式
    JS原生AJAX
    所谓的渐进增强,优雅降级?
    1059 老师的苦恼
    HTML5 参数传递
    HDU 5289 Assignment(二分+RMQ-ST)
    HDU 3333 Turing Tree(离线树状数组)
    mac下 mysql 插入中文乱码解决
    校园商铺-7商品类别模块-5商品类别删除后端开发
    校园商铺-7商品类别模块-3商品类别添加后端开发
  • 原文地址:https://www.cnblogs.com/liufei1983/p/7132391.html
Copyright © 2020-2023  润新知