深入浅出mfc,这句什么意思?

在六大仿真技术的消息映射里:#defineDECLARE_MESSAGE_MAP()\public:\staticAFX_MSGMAP_ENTRY_messageEntr... 在六大仿真技术的消息映射里:
#define DECLARE_MESSAGE_MAP() \
public:\
static AFX_MSGMAP_ENTRY _messageEntries[]; \
static AFX_MSGMAP messageMap; \
virtual AFX_MSGMAP* GetMessageMap() const;
。。。
class CCmdTarget : public CObject
{
DECLARE_MESSAGE_MAP()
};
typedef void (CCmdTarget::*AFX_PMSG)(); // 这句什么意思?
如果没有CCmdTarget::的话,这句就是定义一个函数指针的数据类型,该函数不返回值,不接受参数。可加上CCmdTarget::的话,似乎表示这个函数指针指向CCmdTarget类里的一个函数,可CCmdTarget类里就没有一个不接受参数不返回值的函数!
还有在稍后面一点还有这么一句也让人莫名其妙:
typedef void (CWnd::*AFX_PMSGW)(void);
不过这句把它注释掉,程序也能正常运行。
请高手们解释一下。谢谢!
展开
 我来答
bhtzu
2013-09-27 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4263万
展开全部

MFC源代码中的注释是这样的:

// pointer to afx_msg member function
typedef void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void);

这里面注意,有个typedef,如果没有,那么就是你说的定义一个函数指针。

但我觉得,加了typedef之后,这个肯定不能简单的这样理解。应该是定义了一个数据类型,这个类型,是无返值无参数的回调函数。理解不一定准确,个人思路。

后面那句,如果你把typedef void (CWnd::*AFX_PMSGA)(void);也注释了,应该就不能城池运行了吧,两个处于不同环境下的定义。一个A,一个W

672038161
2013-09-27 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:127
采纳率:0%
帮助的人:101万
展开全部
表示定义一个指向一个不带参数返回值为void的CCmdTarge
类成员函数的指针类型。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式