C++学习笔记之WINDOWS消息机制

这篇博客详细介绍了Windows程序的运行原理,包括基于消息的事件驱动和消息的捕捉与传递。接着,作者深入剖析了用于存放消息的结构体MSG及其各个参数,以及窗口类WNDCLASS的相关内容。此外,还探讨了WinMain函数、窗口类注册、窗口创建、显示与更新、消息循环等关键函数的使用方法。最后,展示了如何利用这些基础知识实现一个简单的C++ Windows程序。

一、WINDOWS程序的运行原理:
    1、基于消息的事件驱动:将所有的事件都包装成消息,并存放于消息队列中,应用程序每次取走一条。
    2、消息的捕捉与传递均由WINDOWS执行。


二、WINDOWS中用于存放消息的结构体:
        结构体原型:
        typedef struct tagMSG {     // msg  
           HWND hwnd;
           UINT message;
           WPARAM wParam;
           LPARAM lParam;
           DWORD time;
           POINT pt;

        } MSG;
    参数释义:
        hwnd:窗口句柄,即产生消息的窗口。
        message:消息。
        wParam:消息附加内容。如:产生了一个键盘消息,该附加消息则包含具体按下的键。
        lParam:同样是附加消息。
        time:消息产生的时间。
        pt:消息产生时光标的位置。
    关于结构体中的新数据类型:
        HWND:窗口句柄。
        WORD:16位的整数。
        DWORD:双16位的整数。
    名词:
        句柄:资源的标识符。
        消息队列:WINDOWS中每个程序都对应的有一个消息队列为它服务。实质是一块先进先出的缓冲区域。


三、WinMain函数:WINDOWS程序的入口。
    函数原型:
        int WINAPI WinMain(
        HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow
        );
    参数释义:
        hInstance:当前应用程序的实例句柄。
        hPrevInstance:上一个窗口的实例句柄。
        lpCmdLine:命令行参数。
        nCmdShow:指定以何种模式显示窗口,具体的值有以下几种类型(宏):SW_HIDE/SW_MAXIMIZE/SW_MINIMIZE/SW_RESTORE/SW_SHOW/SW_SHOWMAXIMIZED/SW_SHOWMINIMIZED/SW_SHOWMINNOACTIVE/SW_SHOWNA/SW_SHOWNOACTIVATE/Displays /SW_SHOWNORMAL

四、窗口类:

    结构原型:
        typedef struct _WNDCLASS {
          UINT style;
          WNDPROC lpfnWndProc;
          int cbClsExtra;
          int cbWndExtra;
          HANDLE hInstance;
          HICON hIcon;
          HCURSOR hCursor;
          HBRUSH hbrBackground;
          LPCTSTR lpszMenuName;
          LPCTSTR lpszClassName;
        } WNDCLASS;
        参数释义:
            style:窗口类样式,可以有以下几种类型的值:CS_HREDRAW /CS_VREDRAW /CS_DBLCLKS /CS_NOCLOSE /CS_PARENTDC
            lpfnWndProc:指针,消息处理过程函数,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值