MFC 消息传递的问题,不知道MFC怎么解决的,高手解答

lovelyhawk 2004-08-02 05:08:47
MFC的消息传递是每个类通过一张表实现的

DECLARE_MESSAGE_MAP

然后在这张表里填上相应的函数
BEGIN_MESSAGE_MAP(CRadioDlg, CDialog)
//{{AFX_MSG_MAP(CRadioDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

分发消息的时候,在相应的表中查函数,然后调用。
表中的函数都事无参数的,如果有,也会被强制转换成无参数的。
问题是 消息响应函数的参数时不一样的,调用函数的时候怎么区分呢??
调用的时候他怎么知道那些函数要加参数,那些不加?
...全文
143 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
snowx 2004-08-03
是啊,你要想弄清楚mfc消息机制,还是得回去翻翻<深入浅出mfc>
把那些宏展开理解一遍
末到不误砍柴工
回复
iCoder_Me 2004-08-03
你要用的时候就直接差msdn ,例如要处理 WM_LBUTTONDOWN 消息,
msdn 里就是这样的:
WM_LBUTTONDOWN
WPARAM wParam
LPARAM lParam
然后解释了 wParam 和 lParam 分别是什么参数。
msdn 里也有 WM_LBUTTONDOWN 的 mfc 处理程序的标准原型:
afx_msg void OnLButtonDown(
UINT nFlags,
CPoint point
);
这样也一目了然:)

回复
lkcowboy 2004-08-02
看看《WINDOWS程序设计》的C写法,就知道了
回复
hooliganstreet 2004-08-02
看mfc深入浅出
回复
lilylovey 2004-08-02
#define ON_WM_RBUTTONDOWN() { WM_RBUTTONDOWN, 0, 0, 0, AfxSig_vwp, (AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(UINT, CPoint))&OnRButtonDown },
#define ON_COMMAND(id, memberFxn) { WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSig_vv, (AFX_PMSG)&memberFxn },
消息的详细定义就是如此,也就是所谓的消息映射(对应函数和参数)
那些宏没有参数,但消息函数是有参数的,两者的意义不同。
如果有特殊要求自己定义消息或者映射消息(写自己的宏吧)
区分在于定义的宏中;
消息函数的参数定义可以看宏中的定义
回复
这是mfc的消息处理机制,也可以说这是他的规则,先用着吧,再慢慢理解
回复
lovelyhawk 2004-08-02
那么这个消息函数调用的机制 岂不是不通用
难道像这样:
DispachMsg(msg)
{
for each entry in msgtable
if (msg_entry[i].msgID == msg)
{
if (msg == WM_LBUTTONOWN)
msg_entry[i].fun(flags, pint);
if (msg == BN_CLCKED)
msg_entry[i].fun();
......
break;
}

回复
快乐鹦鹉 2004-08-02
ON_WM_LBUTTONDOWN()
这些应该只是一个申明。应该还封装了和自定义消息那样的参数传递机制
回复
yening0914 2004-08-02
呵呵,每一种消息都预先定义好参数传递的结果了,都是标准的。所以每种消息对应什么样的参数就是预知的!
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-08-02 05:08
社区公告

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