1.1 Windows核心编程-几个宏的解读

来源:互联网 发布:python 论坛 编辑:程序博客网 时间:2024/06/17 03:25

示例代码

//代码示例片段1DWORD systemLocale = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);//代码示例片段2switch (uMsg) {      chHANDLE_DLGMSG(hwnd, WM_INITDIALOG, Dlg_OnInitDialog);      chHANDLE_DLGMSG(hwnd, WM_COMMAND,    Dlg_OnCommand);   case ESM_POKECODEANDLOOKUP:      SetDlgItemInt(hwnd, IDC_ERRORCODE, (UINT) wParam, FALSE);      FORWARD_WM_COMMAND(hwnd, IDOK, GetDlgItem(hwnd, IDOK), BN_CLICKED,         PostMessage);      SetForegroundWindow(hwnd);      break;   }

MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);

宏展开:

#define MAKELANGID(p,s)      ((((WORD)(S)) << 10) | (WORD)(p))//转换成系统默认的语言

chHANDLE_DLGMSG(hwnd, WM_INITDIALOG, Dlg_OnInitDialog)

// 展开#define chHANDLE_DLGMSG(hWnd, message, fn)  \    case (message): return (SetDlgMsgResult(hWnd, uMsg,   \        HANDLE_##message((hWnd), (wParam), (lParam), (fn))))/* 宏在程序编译的时候会展开,所以这个宏会直接展开成一个 case 语句,该宏放在 switch语句中## 符号是拼接符,如message消息是 WM_COMMAND,则HANDLE_##message展开为:HANDLE_WM_COMMAND.*/SetDlgMsgResult(    HWND    hwnd,     // Handle to the dialog box    int     msg,      // Specifies the zero-based offset to the value to be set. Valid values are in the range zero through the number of bytes of extra window memory, minus four.    LONG    result    // Specifies the replacement value.    )// 将对应窗口的特定消息交由指定的消息处理函数处理

HANDLE_WM_COMMAND

宏展开语句为:#define HANDLE_WM_COMMAND(hwnd, wParam, lParam, fn) \    ((fn)((hwnd), (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)

在消息处理函数中,wParam的低16位是消息命令ID, 高16位是对应的通知码,lParam 是发送命令消息的子窗口句柄

原创粉丝点击