zoukankan      html  css  js  c++  java
  • C++学习笔记十一之win32编程

    一、Windows数据类型

    WORD:                16位无符号整形数据   

    DWORD:             32位无符号整型数据(DWORD32)   

    DWORD64:         64位无符号整型数据   

    INT:                       32位有符号整型数据类型   

    INT_PTR:             指向INT数据类型的指针类型   

    INT32:                  32位符号整型   

    INT64:                  64位符号整型   

    UINT:                    无符号INT   

    LONG:                 32位符号整型(LONG32)   

    ULONG:              无符号LONG   

    LONGLONG:      64位符号整型(LONG64)   

    SHORT:              无符号短整型(16位)   

    LPARAM:           消息的L参数   

    WPARAM:         消息的W参数   

    HANDLE:            对象的句柄,最基本的句柄类型   

    HICON:               图标的句柄   

    HINSTANCE:    程序实例的句柄   

    HKEY:                注册表键的句柄   

    HMODULE:       模块的句柄   

    HWND:              窗口的句柄   

    LPSTR:              字符指针,也就是字符串变量   

    LPCSTR:           字符串常量   

    LPCTSTR:         根据环境配置,如果定义了UNICODE宏,则是LPCWSTR类型,否则则为LPCSTR类型   

    LPCWSTR:       UNICODE字符串常量   

    LPDWORD:      指向DWORD类型数据的指针   

    CHAR:               8比特字节   

    TCHAR:             如果定义了UNICODE,则为WCHAR,否则为CHAR   

    UCHAR:            无符号CHAR   

    WCHAR:           16位Unicode字符   

    BOOL:                布尔型变量   

    BYTE:                 字节类型(8位)   

    CONST:             常量   

    FLOAT:              浮点数据类型   

    SIZE_T:              表示内存大小,以字节为单位,其最大值是CPU最大寻址范围   

    VOID:                 无类型,相当于标准C语言中的void   

    WINAPI:             Windows API的函数调用方式,常见于SDK头文件中对API函数的声明中,相当于_stdcall(更严格地说,这不是数据类型,而是一种函数调用约定

    二、入口函数winmain

    int WINAPI WinMain(
        HINSTANCE hInstance,     //应用程序当前实例的句柄
        HINSTANCE hPrevInstance, //应用程序的先前实例的句柄。同一个程序打开两次,出现两个窗口,
                   // 第一次打开的窗口就是先前实例的窗口。
                    // 对于一个32位程序,该参数总为NULL。
        LPSTR lpCmdLine,         //命令行的字符串的指针
        int nCmdShow             //窗口显示方式、默认为SW_SHOWDEFAULT
        ){
    
    }

     三、创建窗口

    // 头文件
    #include <windows.h>
    #include"resource.h"
    
    // 全局变量
    WCHAR g_lpszClassName[] = L"CLASSNAME";
    WCHAR g_lpszWindowName[] = L"哈喽,新的征程";
    
    // 函数声明
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    // 应用程序主函数
    INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, INT nCmdShow)
    {
        // 1.设计一个窗口类
        WNDCLASSEX wcex;
        wcex.cbSize = sizeof(WNDCLASSEX);
        wcex.style = CS_HREDRAW | CS_VREDRAW;
        wcex.cbClsExtra = 0;
        wcex.cbWndExtra = 0;
        wcex.hInstance = hInstance;
        wcex.lpfnWndProc = WndProc;
        wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
        wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wcex.lpszMenuName = MAKEINTRESOURCE(101);
        wcex.lpszClassName = g_lpszClassName;
        wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    
        // 2.注册这个窗口类
        if (RegisterClassEx(&wcex) == ((ATOM)0))
        {
            MessageBox(NULL, L"注册窗口类失败!", L"错误", MB_YESNO | MB_ICONERROR);
            exit(-1);
        }
    
        // 3.创建窗口
        HWND hWnd = CreateWindowEx(NULL, g_lpszClassName, g_lpszWindowName, WS_OVERLAPPEDWINDOW, 10, 10, 800, 800, NULL, NULL, hInstance, NULL);
        if (hWnd == NULL)
        {
            MessageBox(NULL, L"创建窗口失败!", L"错误", MB_YESNO | MB_ICONERROR);
            exit(-1);
        }
    
        // 4.更新和显示窗口
        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);
    
        // 5.应用程序消息循环
        MSG msg = { 0 };
        BOOL bRet;
        // 调用 GetMessage 函数从调用线程的消息队列中取得一个消息
        while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
        {
            if (bRet != -1)
            {
                TranslateMessage(&msg); // 将虚拟键消息转换为字符消息
                DispatchMessage(&msg); // 将消息分发到窗口处理
            }
        }
    
        return msg.wParam;
    }
    
    // 应用程序消息处理回调函数
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
        {
        case WM_DESTROY:
            PostQuitMessage(0); // 程序退出
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam); // 默认的窗口处理程序
        }
        return 0;
    }

     四、消息类型

    1)Windows消息的结构体:

    //The MSG structure contains message information from a thread's message queue
    typedef struct tagMSG {     // msg 
        HWND   hwnd;     //窗口句柄, 窗口对象的标识
        UINT   message;  //消息类型 每一个值对应不同的消息类型(点击、 键入)
        WPARAM wParam;   //消息参数
        LPARAM lParam;     //消息参数
        DWORD  time;   //时间戳
        POINT  pt;     //坐标
    } MSG; 

    2)消息2处理函数

    //LRESULT :The simple data types supported by the Win32 API are used to define function return values, function and message parameters, and structure members. They define the size and meaning of these elements
    
    //CALLBACK __stdcall
    //wParam 、lParam 先查消息类型 在看这俩个参数的意义
    
    LRESULT CALLBACK WindowProc(  //窗口处理函数
        HWND hwnd,      // handle to window
        UINT uMsg,      // message identifier
        WPARAM wParam,  // first message parameter 不同的消息类型 这个参数值也不同
        LPARAM lParam   // second message parameter 不同的消息类型 这个参数值也不同
        )

    3)所有的消息类型

    消息名称

    说 明

    WM_NULL

    0x0000

    空消息,此消息将被接收窗口忽略

    WM_CREATE

    0x0001

    应用程序创建一个窗口

    WM_DESTROY

    0x0002

    一个窗口被销毁

    WM_MOVE

    0x0003

    移动一个窗口

    WM_SIZE

    0x0005

    改变一个窗口的大小

    WM_ACTIVATE

    0x0006

    一个窗口被激活或失去激活状态

    WM_SETFOCUS

    0x0007

    获得焦点后

    WM_KILLFOCUS

    0x0008

    失去焦点

    WM_ENABLE

    0x000A

    应用程序Enable状态改变时产生

    WM_SETREDRAW

    0x000B

    设置窗口是否能重画

    WM_SETTEXT

    0x000C

    应用程序发送此消息来设置一个窗口的文本

    WM_GETTEXT

    0x000D

    应用程序发送此消息来复制对应窗口的文本到缓冲区

    WM_GETTEXTLENGTH

    0x000E

    得到与一个窗口有关的文本的长度(不包含空字符)

    WM_PAINT

    0x000F

    要求一个窗口重绘自己

    WM_CLOSE

    0x0010

    当一个窗口或应用程序要关闭时发送一个信号

    WM_QUERYENDSESSION

    0x0011

    用户选择结束对话框或应用程序自己调用ExitWindows()函数

    WM_QUIT

    0x0012

    用来结束程序运行或应用程序调用Postquitmessage()函数来产生此消息

    WM_QUERYOPEN

    0x0013

    当用户窗口恢复以前的大小位置时,把此消息发送给某个图标

    WM_ERASEBKGND

    0x0014

    当窗口背景必须被擦除时(例如在窗口改变大小时)

    WM_SYSCOLORCHANGE

    0x0015

    当系统颜色改变时,发送此消息给所有顶级窗口

    WM_ENDSESSION

    0x0016

    当系统进程发出WM_QUERYENDSESSION消息后,此消息发送给应用程序

    WM_SHOWWINDOW

    0x0018

    当隐藏或显示窗口是发送此消息给这个窗口

    WM_ACTIVATEAPP

    0x001C

    当某个窗口将被激活时,将被激活窗口和当前活动(即将失去激活)窗口会收到此消息,发此消息给应用程序哪个窗口是激活的,哪个是非激活的

    WM_FONTCHANGE

    0x001D

    当系统的字体资源库变化时发送此消息给所有顶级窗口

    WM_TIMECHANGE

    0x001E

    当系统的时间变化时发送此消息给所有顶级窗口

    WM_CANCELMODE

    0x001F

    发送此消息来取消某种正在进行的操作

    WM_SETCURSOR

    0x0020

    如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,发消息给该窗口

    WM_MOUSEACTIVATE

    0x0021

    当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口

    WM_CHILDACTIVATE

    0x0022

    发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活、移动、改变大小

    WM_QUEUESYNC

    0x0023

    此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的Hook程序分离出用户输入消息

    WM_GETMINMAXINFO

    0x0024

    当窗口要将要改变大小或位置时,发送此消息给该窗口

    WM_PAINTICON

    0x0026

    当窗口图标将要被重绘时,发送此消息给该窗口

    WM_ICONERASEBKGND

    0x0027

    在一个最小化窗口的图标在重绘前,当图标背景必须被重绘时,发送此消息给该窗口

    WM_NEXTDLGCTL

    0x0028

    发送此消息给一个对话框程序以更改焦点位置

    WM_SPOOLERSTATUS

    0x002A

    当打印管理列队增加或减少一条作业时发出此消息

    WM_DRAWITEM

    0x002B

    当Button,ComboBox,Listbox,Menu控件的外观改变时,发送此消息给这些控件的所有者

    WM_MEASUREITEM

    0x002C

    当Button,ComboBox,list box,ListView,Menu 项被创建时,发送此消息给控件的所有者

    WM_DELETEITEM

    0x002D

    当ListBox 或 ComboBox 被销毁或当某些项通过发送LB_DELETESTRING、LB_RESETCONTENT、 CB_DELETESTRING、CB_RESETCONTENT 消息被删除时,发送此消息给控件的所有者

    WM_VKEYTOITEM

    0x002E

    一个具有LBS_WANTKEYBOARDINPUT风格的ListBox控件发送此消息给它的所有者,以此来响应WM_KEYDOWN消息

    WM_CHARTOITEM

    0x002F

    一个具有LBS_WANTKEYBOARDINPUT风格的ListBox控件发送此消息给它的所有者,以此来响应WM_CHAR消息

    WM_SETFONT

    0x0030

    应用程序绘制控件时,发送此消息得到以何种字体绘制控件中的文本

    WM_GETFONT

    0x0031

    应用程序发送此消息得到当前控件绘制文本的字体

    WM_SETHOTKEY

    0x0032

    应用程序发送此消息让一个窗口与一个热键相关联

    WM_GETHOTKEY

    0x0033

    应用程序发送此消息来判断热键与某个窗口是否有关联

    WM_QUERYDRAGICON

    0x0037

    此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序就返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标

    WM_COMPAREITEM

    0x0039

    发送此消息来判定ComboBox或ListBox新增加的项的相对位置

    WM_COMPACTING

    0x0041

    显示内存已经很少了

    WM_WINDOWPOSCHANGING

    0x0046

    当调用SetWindowPos()函数改变窗口的大小和位置后,发送此消息给该窗口

    WM_POWER

    0x0048

    当系统将进入挂起状态时发送此消息给所有进程

    WM_COPYDATA

    0x004A

    当一个应用程序传递数据给另一个应用程序时发送此消息

    WM_CANCELJOURNAL

    0x004B

    当某个用户取消程序日志激活状态,发送此消息给应用程序

    WM_NOTIFY

    0x004E

    当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口

    WM_INPUTLANGCHANGEREQUEST

    0x0050

    当用户选择某种输入语言,或输入语言的热键改变

    WM_INPUTLANGCHANGE

    0x0051

    当应用程序输入语言改变后发送此消息给受影响的最顶级窗口

    WM_TCARD

    0x0052

    当应用程序已经初始化Windows帮助例程时发送此消息给应用程序

    WM_HELP

    0x0053

    当用户按下了F1,如果某个菜单是激活的,就发送此消息给此窗口关联的菜单,否则就发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口

    WM_USERCHANGED

    0x0054

    当用户已经登录或退出后发送此消息给所有的窗口,当用户登录或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息

    WM_NOTIFYFORMAT

    0x0055

    公用控件和它们的父窗口通过此消息来判断在WM_NOTIFY消息中是使用ANSI还是UNICODE形式的结构,使用此控件能使某个控件与它的父控件进行相互通信

    WM_CONTEXTMENU

    0x007B

    当用户在某个窗口中点击右键,则发送此消息给该窗口

    WM_STYLECHANGING

    0x007C

    当将要调用SetWindowLong()函数窗口的一个或多个风格时,发送此消息给该窗口

    WM_STYLECHANGED

    0x007D

    当调用SetWindowLong()函数改变了窗口的一个或多个风格后,发送此消息给该窗口

    WM_DISPLAYCHANGE

    0x007E

    当显示器的分辨率改变后发送此消息给所有的窗口

    WM_GETICON

    0x007F

    发送此消息给某个窗口,返回与某个窗口有关联的大图标或小图标的句柄

    WM_SETICON

    0x0080

    应用程序发送此消息让一个新的大图标或小图标与某个窗口关联

    WM_NCCREATE

    0x0081

    当某个窗口第一次被创建时,此消息在WM_CREATE消息被发送前发送

    WM_NCDESTROY

    0x0082

    此消息通知某个窗口,正在销毁非客户区

    WM_NCCALCSIZE

    0x0083

    当计算某个窗口的客户区大小和位置时发送此消息

    WM_NCHITTEST

    0x0084

    移动鼠标,按住或释放鼠标时产生此消息

    WM_NCPAINT

    0x0085

    当某个窗口的框架必须被绘制时,应用程序发送此消息给该窗口

    WM_NCACTIVATE

    0x0086

    通过改变某个窗口的非客户区来表示窗口是处于激活还是非激活状态时,此消息被发送给该窗口

    WM_NCMOUSEMOVE

    0x00A0

    当光标在窗口的非客户区(窗口标题栏及边框)内移动时发送此消息给该窗口

    WM_NCLBUTTONDOWN

    0x00A1

    当光标在窗口的非客户区并按下鼠标左键时发送此消息

    WM_NCLBUTTONUP

    0x00A2

    当光标在窗口的非客户区并释放鼠标左键时发送此消息

    WM_NCLBUTTONDBLCLK

    0x00A3

    当光标在窗口的非客户区并双击鼠标左键时发送此消息

    WM_NCRBUTTONDOWN

    0x00A4

    当光标在窗口的非客户区并按下鼠标右键时发送此消息

    WM_NCRBUTTONUP

    0x00A5

    当光标在窗口的非客户区并释放鼠标右键时发送此消息

    WM_NCRBUTTONDBLCLK

    0x00A6

    当光标在窗口的非客户区并双击鼠标右键时发送此消息

    WM_NCMBUTTONDOWN

    0x00A7

    当光标在窗口的非客户区并按下鼠标中键时发送此消息

    WM_NCMBUTTONUP

    0x00A8

    当光标在窗口的非客户区并释放鼠标中键时发送此消息

    WM_NCMBUTTONDBLCL

    0x00A9

    当光标在窗口的非客户区并双击鼠标中键时发送此消息

    WM_KEYDOWN

    0x0100

    按下一个非系统键(按下键时未按下“ALT”键)

    WM_KEYUP

    0x0101

    释放一个非系统键

    WM_CHAR

    0x0102

    按下某键,当TranslateMessage()转发WM_KEYDOWN后发送本消息

    WM_DEADCHAR

    0x0103

    释放某键,当TranslateMessage()转发WM_KEYUP后发送本消息

    WM_SYSKEYDOWN

    0x0104

    当按住ALT键同时按下其他键时发送此消息给拥有键盘焦点的窗口

    WM_SYSKEYUP

    0x0105

    当释放一个键同时按住ALT键时发送此消息给拥有键盘焦点的窗口

    WM_SYSCHAR

    0x0106

    当TranslateMessage()转发WM_SYSKEYDOWN后发送此消息给拥有键盘焦点的窗口

    WM_SYSDEADCHAR

    0x0107

    当TranslateMessage()转发WM_SYSKEYUP后发送此消息给拥有键盘焦点的窗口

    WM_INITDIALOG

    0x0110

    在被显示前发送此消息对话框,通常用此消息初始化控件和执行其他任务

    WM_COMMAND

    0x0111

    选择窗口菜单项或某个控件发送一条消息给它的父窗口或按下一个快捷键时产生此消息

    WM_SYSCOMMAND

    0x0112

    选择窗口菜单项或选择最大化或最小化时,发送此消息给该窗口

    WM_TIMER

    0x0113

    发生了定时器事件

    WM_HSCROLL

    0x0114

    当窗口水平滚动条产生一个滚动事件时发送此消息给该窗口和滚动条的所有者

    WM_VSCROLL

    0x0115

    当窗口垂直滚动条产生一个滚动事件时发送此消息给该窗口和滚动条的所有者

    WM_INITMENU

    0x0116

    当一个菜单将要被激活时发送此消息,它发生在按下菜单项或按下菜单快捷键时,它允许程序在显示前更改菜单

    WM_INITMENUPOPUP

    0x0117

    当一个下拉菜单或子菜单将要被激活时发送此消息,它允许显示前在修改菜单而不必更改整个菜单

    WM_MENUSELECT

    0x011F

    选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)

    WM_MENUCHAR

    0x0120

    当菜单已被激活且用户按下了某个键(非快捷键),发送此消息给菜单的所有者

    WM_ENTERIDLE

    0x0121

    当一个有模式对话框或菜单进入空闲状态时发送此消息给它的所有者,空闲状态指在处理完一条或几条先前的消息后,消息列队为空

    WM_MENURBUTTONUP

    0x0122

    当光标位于菜单项上时,释放鼠标右键产生此消息

    WM_MENUDRAG

    0x0123

    当拖动菜单项时,发送此消息给拖放菜单的所有者

    WM_MENUGETOBJECT

    0x0124

    当光标移入菜单项或者从菜单项中心移到菜单项顶部或底部时,发送此消息给拖放菜单的所有者

    WM_UNINITMENUPOPUP

    0x0125

    当下拉菜单或者子菜单被销毁时产生此消息

    WM_MENUCOMMAND

    0x0126

    当用户选择菜单项时产生此消息

    WM_CHANGEUISTATE

    0x0127

    应用程序发送此消息表明用户界面(UI)状态应当被改变

    WM_UPDATEUISTATE

    0x0128

    应用程序发送此消息改变指定窗口及其子窗口的用户界面(UI)状态

    WM_QUERYUISTATE

    0x0129

    应用程序发送此消息得到某个窗口的用户界面(UI)状态

    WM_CTLCOLORMSGBOX

    0x0132

    绘制消息框前发送此消息给它的父窗口,通过响应这条消息,父窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色

    WM_CTLCOLOREDIT

    0x0133

    绘制编辑型控件前发送此消息给它的父窗口,可用来设置编辑框的文本和背景颜色

    WM_CTLCOLORLISTBOX

    0x0134

    绘制列表框控件前发送此消息给它的父窗口,可用来设置编辑框的文本和背景颜色

    WM_CTLCOLORBTN

    0x0135

    绘制按钮控件前发送此消息给它的父窗口,可用来设置编辑框的文本和背景颜色

    WM_CTLCOLORDLG

    0x0136

    绘制对话框前发送此消息给它的父窗口,可用来设置编辑框的文本和背景颜色

    WM_CTLCOLORSCROLLBAR

    0x0137

    绘制滚动条控件前发送此消息给它的父窗口,可用来设置滚动条控件的文本和背景颜色

    WM_CTLCOLORSTATIC

    0x0138

    绘制静态控件前发送此消息给它的父窗口,可用来设置静态控件的文本和背景颜色

    WM_MOUSEMOVE

    0x0200

    鼠标移动

    WM_LBUTTONDOWN

    0x0201

    按下鼠标左键

    WM_LBUTTONUP

    0x0202

    释放鼠标左键

    WM_LBUTTONDBLCLK

    0x0203

    双击鼠标左键

    WM_RBUTTONDOWN

    0x0204

    按下鼠标右键

    WM_RBUTTONUP

    0x0205

    释放鼠标右键

    WM_RBUTTONDBLCLK

    0x0206

    双击鼠标右键

    WM_MBUTTONDOWN

    0x0207

    按下鼠标中键

    WM_MBUTTONUP

    0x0208

    释放鼠标中键

    WM_MBUTTONDBLCLK

    0x0209

    双击鼠标中键

    WM_MOUSEWHEEL

    0x020A

    当鼠标滚轮转动时发送此消息给当前获得焦点的窗口

    WM_PARENTNOTIFY

    0x0210

    当MDI子窗口被创建或被销毁,或当光标位于子窗口上且用户按了一下鼠标键时,发送此消息给它的父窗口

    WM_ENTERMENULOOP

    0x0211

    发送此消息通知应用程序的主窗口进程已经进入了菜单模式循环

    WM_EXITMENULOOP

    0x0212

    发送此消息通知应用程序的主窗口进程已经退出了菜单模式循环

    WM_SIZING

    0x0214

    调整窗口大小时发送此消息给窗口,通过此消息应用程序可以监视或修改窗口大小和位置

    WM_CAPTURECHANGED

    0x0215

    当窗口设定为不捕获鼠标事件时,发送此消息给该窗口

    WM_MOVING

    0x0216

    移动窗口时发送此消息给窗口,通过此消息应用程序可以监视或修改窗口大小和位置

    WM_POWERBROADCAST

    0x0218

    发送此消息给应用程序通知它有关电源管理事件

    WM_DEVICECHANGE

    0x0219

    当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序

    WM_MDICREATE

    0x0220

    应用程序发送此消息给多文档的客户窗口来创建一个MDI 子窗口

    WM_MDIDESTROY

    0x0221

    应用程序发送此消息给多文档的客户窗口来关闭一个MDI 子窗口

    WM_MDIACTIVATE

    0x0222

    应用程序发送此消息给多文档的客户窗口通知客户窗口激活另一个MDI子窗口,当客户窗口收到此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未激活)来激活它

    WM_MDIRESTORE

    0x0223

    应用程序发送此消息给MDI客户窗口通知子窗口恢复到原来大小

    WM_MDINEXT

    0x0224

    应用程序发送此消息给MDI客户窗口激活下一个或前一个窗口

    WM_MDIMAXIMIZE

    0x0225

    应用程序发送此消息给MDI客户窗口以最大化一个MDI子窗口

    WM_MDITILE

    0x0226

    应用程序发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口

    WM_MDICASCADE

    0x0227

    应用程序发送此消息给MDI客户窗口以层叠方式重新排列所有MDI子窗口

    WM_MDIICONARRANGE

    0x0228

    应用程序发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口

    WM_MDIGETACTIVE

    0x0229

    应用程序发送此消息给MDI客户窗口以找到激活的子窗口的句柄

    WM_MDISETMENU

    0x0230

    应用程序发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单

    WM_ENTERSIZEMOVE

    0x0231

    当窗口进入移动或改变大小模式循环时,发送此消息给该窗口

    WM_EXITSIZEMOVE

    0x0232

    当窗口退出移动或改变大小模式循环时,发送此消息给该窗口

    WM_DROPFILES

    0x0233

    当用户在应用程序窗口中拖动某个文件时,产生此消息

    WM_MDIREFRESHMENU

    0x0234

    应用程序发送此消息给MDI客户窗口以刷新窗口菜单

    WM_MOUSEHOVER

    0x02A1

    当光标在窗口客户区悬停超过TrackMouseEvent()指定的时间时,发送此消息给该窗口

    WM_MOUSELEAVE

    0x02A3

    当光标离开窗口客户区超过TrackMouseEvent()指定的时间时,发送此消息给该窗口

    WM_CUT

    0x0300

    应用程序发送此消息给一个编辑框或ComboBox以删除当前选择的文本

    WM_COPY

    0x0301

    应用程序发送此消息给一个编辑框或ComboBox以复制当前选择的文本到剪贴板

    WM_PASTE

    0x0302

    应用程序发送此消息给一个编辑框或ComboBox以从剪贴板中得到数据

    WM_CLEAR

    0x0303

    应用程序发送此消息给一个编辑框或ComboBox以清除当前选择的内容

    WM_UNDO

    0x0304

    应用程序发送此消息给一个编辑框或ComboBox以撤消最后一次操作

    WM_DESTROYCLIPBOARD

    0x0307

    当调用EmptyClipboard()清空剪贴板时,发送此消息给剪贴板所有者

    WM_DRAWCLIPBOARD

    0x0308

    当剪贴板的内容变化时发送此消息给剪贴板观察链中的第一个窗口,它允许用剪贴板观察窗口来显示剪贴板的新内容

    WM_PAINTCLIPBOARD

    0x0309

    当剪贴板包含CF_OWNERDIPLAY格式的数据且剪贴板观察窗口的客户区需要重绘时,发送此消息给剪贴板所有者

    WM_VSCROLLCLIPBOARD

    0x030A

    当剪贴板包含CF_OWNERDIPLAY格式的数据且剪贴板观察窗口发生垂直滚动条事件时,剪贴板观察窗口发送此消息给剪贴板所有者

    WM_SIZECLIPBOARD

    0x030B

    当剪贴板包含CF_OWNERDIPLAY格式的数据且剪贴板观察窗口的客户区域的大小已经改变时,剪贴板观察窗口发送此消息给剪贴板的所有者

    WM_ASKCBFORMATNAME

    0x030C

    剪贴板观察窗口发送此消息给剪贴板所有者以获得CF_OWNERDISPLAY剪贴板格式的名字

    WM_CHANGECBCHAIN

    0x030D

    当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链中的第一个窗口

    WM_HSCROLLCLIPBOARD

    0x030E

    当剪贴板包含CF_OWNERDIPLAY格式的数据且剪贴板观察窗口发生水平滚动条事件时,剪贴板观察窗口发送此消息给剪贴板所有者

    WM_QUERYNEWPALETTE

    0x030F

    发送此消息给将要获得键盘焦点的窗口,此消息使窗口在获得焦点时同时有机会实现它的逻辑调色板

    WM_PALETTEISCHANGING

    0x0310

    应用程序将要实现它的逻辑调色板时发送此消息通知所有应用程序

    WM_PALETTECHANGED

    0x0311

    获得焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重叠的窗口,以此

    来改变系统调色板

    WM_HOTKEY

    0x0312

    当用户按下由RegisterHotKey()注册的热键时产生此消息

    WM_PRINT

    0x0317

    应用程序发送此消息给窗口,要求窗口在指定设备环境中绘制自己,一般情况下是打印机设备环境

    WM_PRINTCLIENT

    0x0318

    应用程序发送此消息给窗口,要求窗口在指定设备环境中绘制窗口客户区,一般情况下是打印机设备环境

    WM_APP

    0x8000

    帮助用户自定义消息,自定义消息可以为WM_APP+X,X为正整数

    WM_USER

    0x0400

    帮助用户自定义消息,自定义消息可以为WM_USER+X,X为正整数


    通知消息-按钮

    消息名称

    说 明

    BN_CLICKED

    单击按钮

    BN_DISABLE

    按钮被禁止

    BN_DOUBLECLICKED

    双击按钮

    BN_HILITE

    加亮按钮

    BN_PAINT

    按钮应当重画

    BN_UNHILITE

    加亮应当去掉


    通知消息-组合框

    消息名称

    说 明

    CBN_CLOSEUP

    组合框的列表框被关闭

    CBN_DBLCLK

    用户双击了一个字符串

    CBN_DROPDOWN

    组合框的列表框被拉下

    CBN_EDITCHANGE

    用户修改了组合框中的文本

    CBN_EDITUPDATE

    组合框内的文本即将更新

    CBN_ERRSPACE

    组合框内存不足

    CBN_KILLFOCUS

    组合框失去输入焦点

    CBN_SELCHANGE

    在组合框中选择了一项

    CBN_SELENDCANCEL

    用户的选择将被忽略

    CBN_SELENDOK

    用户的选择将被执行

    CBN_SETFOCUS

    组合框获得输入焦点

    通知消息-编辑框

    消息名称

    说 明

    EN_CHANGE

    编辑框中的文本己更新

    EN_ERRSPACE

    编辑框内存不足

    EN_HSCROLL

    用户点击了水平滚动条

    EN_KILLFOCUS

    编辑框失去输入焦点

    EN_MAXTEXT

    插入的内容被截断

    EN_SETFOCUS

    编辑框获得输入焦点

    EN_UPDATE

    编辑框中的文本将要更新

    EN_VSCROLL

    用户点击了垂直滚动条

     四、消息的使用

    基本鼠标消息,只需在窗口处理函数增加息处理即可. 当消息来临,获取鼠标和按键状态.例如:

    case WM_MOUSEMOVE:
        {
         int nX = LOWORD(lParam);
         int nY = HIWORD(lParam);
        }
  • 相关阅读:
    SQL 查询优化
    win10鼠标右键菜单在左边,怎么改回右边
    Ansible 命令
    CSV模块
    Python 常用模块
    Ansible 常用模块
    Ansible 动态配置文件
    Cluster Health
    Elasticsearch Python API
    grok常用表达式
  • 原文地址:https://www.cnblogs.com/mango1997/p/14594099.html
Copyright © 2011-2022 走看看