HANDLE_##message是什么啊,高手帮忙啊

jronald 2004-04-24 07:33:19
BOOL WINAPI Dlg_Proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {

switch (uMsg) {
chHANDLE_DLGMSG(hwnd, WM_INITDIALOG, Dlg_OnInitDialog);
chHANDLE_DLGMSG(hwnd, WM_SIZE, Dlg_OnSize);
chHANDLE_DLGMSG(hwnd, WM_COMMAND, Dlg_OnCommand);
}
return(FALSE);
}

#define chHANDLE_DLGMSG(hwnd, message, fn) \
case (message): return (SetDlgMsgResult(hwnd, uMsg, \
HANDLE_##message((hwnd), (wParam), (lParam), (fn))))

#define SetDlgMsgResult(hwnd, msg, result) (( \
(msg) == WM_CTLCOLORMSGBOX || \
(msg) == WM_CTLCOLOREDIT || \
(msg) == WM_CTLCOLORLISTBOX || \
(msg) == WM_CTLCOLORBTN || \
(msg) == WM_CTLCOLORDLG || \
(msg) == WM_CTLCOLORSCROLLBAR || \
(msg) == WM_CTLCOLORSTATIC || \
(msg) == WM_COMPAREITEM || \
(msg) == WM_VKEYTOITEM || \
(msg) == WM_CHARTOITEM || \
(msg) == WM_QUERYDRAGICON || \
(msg) == WM_INITDIALOG \
) ? (BOOL)(result) : (SetWindowLong((hwnd), DWL_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE))

chHANDLE_DLGMSG宏定义中怎么冒出一个uMsg,是不是对应Dlg_Proc的第二个参数,其实uMsg和message的值不是一样吗?用message不是更好?否则Dlg_Proc的第二个参数一定要取名为uMsg了?不知道是不是书的作者的不小心?
HANDLE_##message被替换成HANDLE_WM_INITDIALOG等东西后,根本查不到这些东西是什么。
...全文
107 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
redmoons 2004-04-24
  • 打赏
  • 举报
回复
如果你真的想看到HANDLE_##message被替换成HANDLE_WM_INITDIALOG后的东东,ALT+F8变成汇编就看到了,不过很费神,但对于问题应该很容易就明白了,你的第一个问题,也可以这样的。如果我说错了,还请大家多多批评。
kuangjingbo 2004-04-24
  • 打赏
  • 举报
回复
连接符号,就是跟后面的
enoloo(行者无疆)的例子很好
ANewGuy 2004-04-24
  • 打赏
  • 举报
回复
jronald 2004-04-24
  • 打赏
  • 举报
回复
UPUP
jronald 2004-04-24
  • 打赏
  • 举报
回复
是啊,但是连起来后,比如是HANDLE_WM_INITDIALOG,不知道这个是什么东西
enoloo 2004-04-24
  • 打赏
  • 举报
回复
msdn这么解释的,
The double-number-sign or “token-pasting” operator (##), which is sometimes called the “merging” operator, is used in both object-like and function-like macros. It permits separate tokens to be joined into a single token and therefore cannot be the first or last token in the macro definition.
enoloo 2004-04-24
  • 打赏
  • 举报
回复
就是预编译的时候,用##后面的值和前面的部分连接起来。

比如
#define a(handle) class##handle

那么,程序中a(5),就会转换成class5.

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧