mfc 窗口之间的消息传递
这里详细说明:现在有一个自定义主窗口类CMyMainFrame*MainFrame,两个子窗口类CMyFrameA*A,CMyFrameB*B。A和B都是显示在MainF...
这里详细说明:现在有一个自定义主窗口类CMyMainFrame *MainFrame,两个子窗口类CMyFrameA *A,CMyFrameB *B。A和B都是显示在MainFrame中。我现在希望点击子窗口A,则在子窗口B中显示"Get Message from A";点击子窗口B,则在子窗口A中显示"Get Message from B"。
如果用Qt的话,我只需要在MainFrame中写
connect(A, SIGNAL(clicked()), B, SLOT(showMessage()));
connect(B, SIGNAL(clicked()), A, SLOT(showMessage()));
两句话就可以实现。
但是在MFC中,似乎比较麻烦,我在网上找了很多,都不是我所希望的。我知道似乎应该用SendMessage,不过不知道怎么具体写。希望有高人能够提供比较完整的代码,供我学习一下。多谢!
还是提高一下悬赏。
我希望有一个能够在visual studio里跑的完整的例子,这样比较容易懂。有时候也许理论上是正确的,但是实际实现会出现问题,这样对于初学者来说要多走很多弯路。谢谢!
楼下热心网友的回答我试了一下不行啊……求能跑的代码 展开
如果用Qt的话,我只需要在MainFrame中写
connect(A, SIGNAL(clicked()), B, SLOT(showMessage()));
connect(B, SIGNAL(clicked()), A, SLOT(showMessage()));
两句话就可以实现。
但是在MFC中,似乎比较麻烦,我在网上找了很多,都不是我所希望的。我知道似乎应该用SendMessage,不过不知道怎么具体写。希望有高人能够提供比较完整的代码,供我学习一下。多谢!
还是提高一下悬赏。
我希望有一个能够在visual studio里跑的完整的例子,这样比较容易懂。有时候也许理论上是正确的,但是实际实现会出现问题,这样对于初学者来说要多走很多弯路。谢谢!
楼下热心网友的回答我试了一下不行啊……求能跑的代码 展开
展开全部
六七九四五七五菱 加我 我帮你写一个例子。
追问
已加qq,但是一直没有收到回复,说好的例子呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-12-04
展开全部
举个例子
#define WM_MYMESSAGE WM_USER + 110
class CMyFrameBase : public CXXXFrame
{
public:
void SetOtherWnd(CWnd* pWnd);
protected:
virtual int OnGetMessageFromOtherWnd(WPARAM wParam,LPARAM lParam)
{
return 0;
}
DECLARE_MESSAGE_MAP()
void OnLButtonUp(UINT nFlags, CPoint point)
{
__super::OnLButtonUp(nFlags, point);
m_pWnd->SendMessage(WM_MYMESSAGE,0,0);
}
private:
CWnd *m_pWnd;
}
.cpp
BEGIN_MESSAGE_MAP(CMyFrameBase , CXXXFrame)
...........
ON_WM_LBUTTONUP()
ON_MESSAGE(WM_MYMESSAGE,OnGetMessageFromOtherWnd)
END_MESSAGE_MAP()
class CMyFrameA : public CMyFrameBase
{
virtual int OnGetMessageFromOtherWnd(WPARAM wParam,LPARAM lParam)
{
return AfxMessageBox("Get Message from B");
}
}
class CMyFrameB : public CMyFrameBase
{
virtual int OnGetMessageFromOtherWnd(WPARAM wParam,LPARAM lParam)
{
return AfxMessageBox("Get Message from A");
}
}
CMyFrameA *A = new CMyFrameA;
CMyFrameB *B = new CMyFrameB;
A->Create(..........);
B->Create(..........);
A->SetOtherWnd(B);
B->SetOtherWnd(A);
#define WM_MYMESSAGE WM_USER + 110
class CMyFrameBase : public CXXXFrame
{
public:
void SetOtherWnd(CWnd* pWnd);
protected:
virtual int OnGetMessageFromOtherWnd(WPARAM wParam,LPARAM lParam)
{
return 0;
}
DECLARE_MESSAGE_MAP()
void OnLButtonUp(UINT nFlags, CPoint point)
{
__super::OnLButtonUp(nFlags, point);
m_pWnd->SendMessage(WM_MYMESSAGE,0,0);
}
private:
CWnd *m_pWnd;
}
.cpp
BEGIN_MESSAGE_MAP(CMyFrameBase , CXXXFrame)
...........
ON_WM_LBUTTONUP()
ON_MESSAGE(WM_MYMESSAGE,OnGetMessageFromOtherWnd)
END_MESSAGE_MAP()
class CMyFrameA : public CMyFrameBase
{
virtual int OnGetMessageFromOtherWnd(WPARAM wParam,LPARAM lParam)
{
return AfxMessageBox("Get Message from B");
}
}
class CMyFrameB : public CMyFrameBase
{
virtual int OnGetMessageFromOtherWnd(WPARAM wParam,LPARAM lParam)
{
return AfxMessageBox("Get Message from A");
}
}
CMyFrameA *A = new CMyFrameA;
CMyFrameB *B = new CMyFrameB;
A->Create(..........);
B->Create(..........);
A->SetOtherWnd(B);
B->SetOtherWnd(A);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询