用WindowsAPI封装绘图窗口类,如何从窗口消息值转成可读消息字符串,Win32窗口生命周期消息

最近在写一个纯win32api方式创建窗口的绘图类的封装(摆脱mfc的束缚)。
从对win32api方式生成一个窗口过程中,观察窗口过程函数接受了哪些消息,了解窗口生命周期更深刻的认识。

第一步:实现实现一个windows消息id值到以"WM_"开头的可读的windows消息名字符串的转换函数(该函数由WinDef.h头文件制作而成),
代码如下:

C++ Code

//全局函数:取得windows消息码所对应的消息定义字符串,Release模式下返回一行表述函数已弃用的提示字符串,而不是NULL指针。
LPCTSTR GetWindowsMsgStringFromMsgID(UINT messageId){
#ifdef _DEBUG
#define ITERN_WNDDOWSMSGID2STRING( szName , nID ) case (nID):return _T(#szName);break
switch(messageId){
ITERN_WNDDOWSMSGID2STRING( WM_NULL                         , 0x0000
);ITERN_WNDDOWSMSGID2STRING( WM_CREATE                       , 0x0001
);ITERN_WNDDOWSMSGID2STRING( WM_DESTROY                      , 0x0002
);ITERN_WNDDOWSMSGID2STRING( WM_MOVE                         , 0x0003
);ITERN_WNDDOWSMSGID2STRING( WM_SIZE                         , 0x0005
);ITERN_WNDDOWSMSGID2STRING( WM_ACTIVATE                     , 0x0006
);ITERN_WNDDOWSMSGID2STRING( WM_SETFOCUS                     , 0x0007
);ITERN_WNDDOWSMSGID2STRING( WM_KILLFOCUS                    , 0x0008
);ITERN_WNDDOWSMSGID2STRING( WM_ENABLE                       , 0x000A
);ITERN_WNDDOWSMSGID2STRING( WM_SETREDRAW                    , 0x000B
);ITERN_WNDDOWSMSGID2STRING( WM_SETTEXT                      , 0x000C
);ITERN_WNDDOWSMSGID2STRING( WM_GETTEXT                      , 0x000D
);ITERN_WNDDOWSMSGID2STRING( WM_GETTEXTLENGTH                , 0x000E
);ITERN_WNDDOWSMSGID2STRING( WM_PAINT                        , 0x000F
);ITERN_WNDDOWSMSGID2STRING( WM_CLOSE                        , 0x0010);
#ifndef _WIN32_WCE
ITERN_WNDDOWSMSGID2STRING( WM_QUERYENDSESSION              , 0x0011
);ITERN_WNDDOWSMSGID2STRING( WM_QUERYOPEN                    , 0x0013
);ITERN_WNDDOWSMSGID2STRING( WM_ENDSESSION                   , 0x0016);
#endif
ITERN_WNDDOWSMSGID2STRING( WM_QUIT                         , 0x0012
);ITERN_WNDDOWSMSGID2STRING( WM_ERASEBKGND                   , 0x0014
);ITERN_WNDDOWSMSGID2STRING( WM_SYSCOLORCHANGE               , 0x0015
);ITERN_WNDDOWSMSGID2STRING( WM_SHOWWINDOW                   , 0x0018
);ITERN_WNDDOWSMSGID2STRING( WM_WININICHANGE                 , 0x001A
);ITERN_WNDDOWSMSGID2STRING( WM_DEVMODECHANGE                , 0x001B
);ITERN_WNDDOWSMSGID2STRING( WM_ACTIVATEAPP                  , 0x001C
);ITERN_WNDDOWSMSGID2STRING( WM_FONTCHANGE                   , 0x001D
);ITERN_WNDDOWSMSGID2STRING( WM_TIMECHANGE                   , 0x001E
);ITERN_WNDDOWSMSGID2STRING( WM_CANCELMODE                   , 0x001F
);ITERN_WNDDOWSMSGID2STRING( WM_SETCURSOR                    , 0x0020
);ITERN_WNDDOWSMSGID2STRING( WM_MOUSEACTIVATE                , 0x0021
);ITERN_WNDDOWSMSGID2STRING( WM_CHILDACTIVATE                , 0x0022
);ITERN_WNDDOWSMSGID2STRING( WM_QUEUESYNC                    , 0x0023
);ITERN_WNDDOWSMSGID2STRING( WM_GETMINMAXINFO                , 0x0024
);ITERN_WNDDOWSMSGID2STRING( WM_PAINTICON                    , 0x0026
);ITERN_WNDDOWSMSGID2STRING( WM_ICONERASEBKGND               , 0x0027
);ITERN_WNDDOWSMSGID2STRING( WM_NEXTDLGCTL                   , 0x0028
);ITERN_WNDDOWSMSGID2STRING( WM_SPOOLERSTATUS                , 0x002A
);ITERN_WNDDOWSMSGID2STRING( WM_DRAWITEM                     , 0x002B
);ITERN_WNDDOWSMSGID2STRING( WM_MEASUREITEM                  , 0x002C
);ITERN_WNDDOWSMSGID2STRING( WM_DELETEITEM                   , 0x002D
);ITERN_WNDDOWSMSGID2STRING( WM_VKEYTOITEM                   , 0x002E
);ITERN_WNDDOWSMSGID2STRING( WM_CHARTOITEM                   , 0x002F
);ITERN_WNDDOWSMSGID2STRING( WM_SETFONT                      , 0x0030
);ITERN_WNDDOWSMSGID2STRING( WM_GETFONT                      , 0x0031
);ITERN_WNDDOWSMSGID2STRING( WM_SETHOTKEY                    , 0x0032
);ITERN_WNDDOWSMSGID2STRING( WM_GETHOTKEY                    , 0x0033
);ITERN_WNDDOWSMSGID2STRING( WM_QUERYDRAGICON                , 0x0037
);ITERN_WNDDOWSMSGID2STRING( WM_COMPAREITEM                  , 0x0039);
#if(WINVER >=  0x0500)
#ifndef _WIN32_WCE
ITERN_WNDDOWSMSGID2STRING( WM_GETOBJECT                    , 0x003D);
#endif
#endif
ITERN_WNDDOWSMSGID2STRING( WM_COMPACTING                   , 0x0041
);ITERN_WNDDOWSMSGID2STRING( WM_COMMNOTIFY                   , 0x0044
);ITERN_WNDDOWSMSGID2STRING( WM_WINDOWPOSCHANGING            , 0x0046
);ITERN_WNDDOWSMSGID2STRING( WM_WINDOWPOSCHANGED             , 0x0047
);ITERN_WNDDOWSMSGID2STRING( WM_POWER                        , 0x0048
);ITERN_WNDDOWSMSGID2STRING( WM_COPYDATA                     , 0x004A
);ITERN_WNDDOWSMSGID2STRING( WM_CANCELJOURNAL                , 0x004B);
#if(WINVER >=  0x0400)
ITERN_WNDDOWSMSGID2STRING( WM_NOTIFY                       , 0x004E
);ITERN_WNDDOWSMSGID2STRING( WM_INPUTLANGCHANGEREQUEST       , 0x0050
);ITERN_WNDDOWSMSGID2STRING( WM_INPUTLANGCHANGE              , 0x0051
);ITERN_WNDDOWSMSGID2STRING( WM_TCARD                        , 0x0052
);ITERN_WNDDOWSMSGID2STRING(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值