zoukankan      html  css  js  c++  java
  • Windoows窗口程序五

    程序执行机制
    过程驱动-程序的执行过程是按照预订好的顺序执行。
    事件驱动-程序的执行是无序,用户可以根据需要随机触发相应的事件。
    Win32窗口程序就是采用事件驱动方式执行,也就是消息机制。
    当系统通知窗口工作时,就采用消息的方式派发给窗口。
    消息组成:
    窗口句柄
    消息ID
    消息的两个参数
    消息产生的时间
    消息产生时的鼠标位置
    //消息结构体
    typedef struct tagMSG {
      HWND   hwnd;
      UINT   message;
      WPARAM wParam;
      LPARAM lParam;
      DWORD  time;
      POINT  pt;
    } MSG, *PMSG, *LPMSG;
    每个窗口都必须具有窗口处理函数
    LRESULT WindowProc(
      HWND   hwnd,//窗口句柄
      UINT   uMsg,//消息ID
      WPARAM wParam,//消息参数
      LPARAM lParam//消息参数
    );
    当系统通知窗口时,会调用窗口处理函数同时将消息ID和消息参数传递给窗口处理函数。
    在窗口处理函数中,不处理的消息,使用缺省窗口处理函数,例如DefWindowProc。
    //获取消息
    BOOL WINAPI GetMessage(
      LPMSG lpMsg,//存放获取到的消息buffer
      HWND  hWnd,//窗口句柄(如果设置为NULL,表示抓取本进程内所有窗口的消息)
      UINT  wMsgFilterMin,//获取消息的最小ID
      UINT  wMsgFilterMax//获取消息的最大ID
    );
    lpMsg-当获取到消息后,将消息的参数存放到MSG结构中。
    hWnd-获取到hWnd所指定窗口的消息
    wMsgFilterMin和wMsgFilterMax-只能获取到由他们指定的消息范围内的消息,如果都为0,表示没有范围。
    TranslateMessage--翻译消息。将按键消息翻译成字符消息
    BOOL TranslateMessage(
      _In_ const MSG *lpMsg//要翻译的消息地址
    );
    检查消息是否是按键消息,如果不是按键消息,不做任何处理,继续执行。
    DispatchMessage--派发消息。将消息派发到该消息所属窗口的窗口处理函数上。
    LRESULT WINAPI DispatchMessage(
      _In_ const MSG *lpmsg//要派发的消息
    );
    WM_DESTROY-窗口被销毁是的消息,无消息参数。常用于在窗口被销毁之前,做相应的善后处理,例如释放资源、内存等。
    WM_SYSCOMMAND-系统命令消息,当点击窗口的最大化、最小化、关闭等命令时,收到这个消息。常用于窗口关闭时,提示用户处理。
    消息参数:wParam-具体点击位置,例如关闭SC_CLOSE等。
    消息参数:lParam-鼠标位置
        LOWORD 低字节-水平位置
        HIWORD 高字节-垂直位置
    WM_SYSCOMMAND消息在WM_DESTROY消息之前执行
    WN_CREATE-在窗口创建成功还未显示之前,收到这个消息。常用于初始化窗口的参数、资源等,包括创建子窗口等。
    WPARAM-不使用
    LPARAM-是CREATESTRUCT结构的指针,保存了CreateWindowEx的12个参数。
    WM_SIZE-在窗口的大小发生变化后,会收到WM_SIZE。常用于窗口大小变化后,调整窗口内各个部分的布局。
    WPARAM-窗口大小变化的原因
    LPARAM-变化窗口客户区的大小
        LOWORD-变化后的宽度
        HIWORD-变化后的高度
  • 相关阅读:
    想算法无头绪,咋办?
    使用R语言分析股价波动
    cmd控制台 wrapper | OpenSCManager failed
    Ubuntu使用vi命令时,不能正常编辑文件,使用方向键时老是出现很多字母解决方案
    Ubuntu su命令 Authentication failure的解决办法
    Springboot2.x整合RabbitMQ
    RabbitMQ 笔记
    Ubuntu安装RabbitMQ
    使用xshell连接ubuntu
    Java 泛型
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/6731096.html
Copyright © 2011-2022 走看看