自定义消息出错:cannot convert from 'unsigned int CMainFrame::*' to 'unsigned int *'

magicwind2002 2005-07-22 08:41:02
我想在CMainFrame里面自定义一个消息并处理它
有如下代码:
// MainFrm.h
class CMainFrame : public CFrameWnd
{
private:
UINT m_msgAdd;

protected:
afx_msg LRESULT OnMsgAdd(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
......
};


// MainFrm.cpp
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_REGISTERED_MESSAGE(m_msgAdd, OnMsgAdd)
END_MESSAGE_MAP()

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
......
m_msgAdd=::RegisterWindowMessage("WM_ADDMESSAGE");
}

LRESULT CMainFrame::OnMsgAdd(WPARAM wParam, LPARAM lParam)
{
return 0;
}

编译时出现错误:
MainFrm.cpp(26) : error C2440: 'type cast' : cannot convert from 'unsigned int MainFrame::*' to 'unsigned int *'
There is no context in which this conversion is possible
MainFrm.cpp(26) : error C2440: 'initializing' : cannot convert from 'void (__thiscall CCmdTarget::*)(void)' to 'unsigned int'
Conversion is a valid standard conversion, which can be performed implicitly or by use of static_cast, C-style cast or function-style cast

请问大家是为什么啊?谢谢。
...全文
272 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
newbiestar 2005-07-23
  • 打赏
  • 举报
回复
当然了,你在类体里面仅仅是声明,还要在单独的.cpp文件中定义这个变量
magicwind2002 2005-07-23
  • 打赏
  • 举报
回复
问题解决了。原来忘了给静态变量初始化了。
magicwind2002 2005-07-23
  • 打赏
  • 举报
回复
谢谢回答。
我搞错了,原来错误不在OnMsgAdd,而是m_msgAdd。
我把m_msgAdd改成了static UINT m_msgadd;
可是却又有链接错误:
error LNK2001: unresolved external symbol "public: static unsigned int CMainFrame::m_msgAdd" (?m_msgAdd@CMainFrame@@2IA)
请问这是怎么回事?
magicwind2002 2005-07-22
  • 打赏
  • 举报
回复
谢谢回答。
我可能没有表达清楚。我的意思是我想知道一般的自定义消息都是怎么处理的?因为我很疑惑:
1. 如果使用静态成员函数作为消息处理函数的话,这个消息处理函数怎么知道实例(因为它属于类,不属于实例)。比如这个消息处理函数希望在CMainFrame的一个窗口上面写一些字,但是却没有这个实例的指针。
2. 如果绑定到某个类对象的实例上,那么在写
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_REGISTERED_MESSAGE(m_msgAdd, OnMsgAdd)
END_MESSAGE_MAP()
的时候还没有实例化,因而似乎没有办法写成ON_REGISTERED_MESSAGE(m_msgAdd, Instance.OnMsgAdd)

所以如果“类的每一个实体都处理这一个消息”的话,那么我的问题似乎也可以解决了。
谢谢。
newbiestar 2005-07-22
  • 打赏
  • 举报
回复
一个进程里面会有多少个CMainFrame?如果只有一个的话,其他的和这个没有关系的……
magicwind2002 2005-07-22
  • 打赏
  • 举报
回复
谢谢。那如果需要消息处理,一般会怎么写呢?
我的意思是要类的每一个实体都处理这一个消息。
newbiestar 2005-07-22
  • 打赏
  • 举报
回复
这个是当然,一个是指向成员的指针类型,还有一个是指针类型

需要榜定到某个类对象的实体上,才可以进行转换。

如果成为静态的话,也可以达到你要的效果,因为静态成员不属于任何一个独立的对象。
vcmute 2005-07-22
  • 打赏
  • 举报
回复
public:
static UINT m_msgAdd;
或全局变量

16,472

社区成员

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

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

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