如何让一个类可以接受消息

artmouse 2005-03-02 02:32:55
定义了一个类
class CManager : public CWnd

在程序某处new 了一个实例

但是其他地方不管是sendMessage或者Postmessage给它都不行

我估计是要将它绑定到一个窗口,但是不知道应该怎么绑定到窗口
给点代码瞧瞧拉
...全文
162 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
artmouse 2005-03-04
  • 打赏
  • 举报
回复
结贴。。。
wshcdr 2005-03-02
  • 打赏
  • 举报
回复
从CCmdTarget类继承过来,就可有消息了吧
artmouse 2005-03-02
  • 打赏
  • 举报
回复
问题终于部分解决了
用AfxRegisterWndClass生成一个窗口,
用create绑定这个窗口
CString m_sWndName=AfxRegisterWndClass(NULL);

this->Create(m_sWndName,"??",WS_BORDER,m_Rect,pMain,12345);
除了第一个参数外,后面几个都是乱写的,偶还不会用。

这个还有一个问题,这个类释放的时候我恐怕还要释放窗口,不知道应该怎么做!
bobob 2005-03-02
  • 打赏
  • 举报
回复
看来楼主很认真^_^佩服

给类添加
protected:
DECLARE_MESSAGE_MAP()

然后再实现
BEGIN_MESSAGE_MAP(CManager,CWnd)
//{{AFX_MSG_MAP(CManager )
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


试试,主要还是要参考向导生成的代码
artmouse 2005-03-02
  • 打赏
  • 举报
回复
点评一下:
1楼:Caps77(厉兵秣马) ,你说的那个我都看到了,但是还是不知道怎么做,而且我还用了cwnd的create呢,不太懂。
2楼:showjancn(难得一剑)(CN) ,谢帮顶
3楼:luckyboy1979(一个人的孤单) ,就是不知道怎么create才问人的。
4楼:vcleaner(我没做大哥已经很久了.......) ,这个我知道要一个窗口的
6楼:wjohenw(CSharp),这方法恐怕太耗资源了,万一我有10000个实体
7楼:bobob(静思--潜心研究PDF),其实你这句和m_pParentWnd->SendMessage(1,NULL,NULL);是一样的,只不过pManager->GetSafeHwnd()如果取到为空的话,不发消息而已。
bobob 2005-03-02
  • 打赏
  • 举报
回复
但是其他地方不管是sendMessage或者Postmessage给它都不行

=====================>
你是怎么sendMessage或者Postmessage的?

可以参考这样:
CManager *pManager=NULL;
pManager = new CManager;
SendMessage(pManager->GetSafeHwnd(),msg,wParam,lParam );

还有,仔细检查消息响应函数是不是正确.

wjohenw 2005-03-02
  • 打赏
  • 举报
回复
class CManager : public CWnd
{
public:
int m_iVal;
}

//在CManager定义一线程,一直扫描m_iVal的值,发现m_iVal值变化就doSth.

你想发消息,就改变m_iVal的值好了.
artmouse 2005-03-02
  • 打赏
  • 举报
回复
Cwnd不算窗口类嘛?
老夏Max 2005-03-02
  • 打赏
  • 举报
回复
LRESULT SendMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);

BOOL PostMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to post
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
注意这两个API的第一个参数,他们都是接受消息的窗口句柄。虽然MFC中的函数没有这个句柄但是其实是MFC封装了这两个API函数,最终调用还是他们。所以要接受消息,必须是窗口类。
luckyboy1979 2005-03-02
  • 打赏
  • 举报
回复
要create出来才行,你试试看
showjancn 2005-03-02
  • 打赏
  • 举报
回复
帮顶!
Caps77 2005-03-02
  • 打赏
  • 举报
回复
你随便找个有窗口的类看看

好像得弄个Enum{IDD = ...}

16,467

社区成员

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

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

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