求助:PostMessage发送消息的问题

硅谷阿波罗 2016-01-01 04:38:27
快要被搞疯了,求大侠指点:
编写了一个简单的程序,界面如下:

窗口分为左右两部分,左边是一个视图类CMakerRoverView,右边是另一个视图CSettingView,其中包含了一个对话框。
现在希望能通过右边对话框中的按钮发送消息去控制左边视图做出一些动作,使用的代码如下:

resource.h:
#define WM_MY_SHOWIMG WM_USER + 5

SettingView.cpp:
void CSettingView::OnBnClickedShowImg()
{
// TODO: 在此添加控件通知处理程序代码
CMakerRoverView* pView = GetActiveView();
if (pView != NULL)
pView->PostMessage(WM_MY_SHOWIMG, 0, 0);
// pView->ShowMsg();
}
//get current active view
CMakerRoverView* CSettingView::GetActiveView()
{
CMainFrame* pFrame = (CMainFrame*)(AfxGetMainWnd());
return (CMakerRoverView*)(pFrame->GetActiveView());
}

MakerRoverView.h:
protected:
afx_msg LRESULT OnShowImg(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()

MakerRoverView.cpp
BEGIN_MESSAGE_MAP(CMakerRoverView, CView)
ON_MESSAGE(WM_MY_SHOWIMG, OnShowImg)
END_MESSAGE_MAP()


LRESULT CMakerRoverView::OnShowImg(WPARAM wParam, LPARAM lParam)
{
// TODO: 在此添加控件通知处理程序代码
MessageBox(_T("hello"));
return 0;
}

按下按钮后程序没有任何反应。
在MakerRoverView.cpp中还定义了一个函数
void CMakerRoverView::ShowMsg()
{
MessageBox(_T("hello"));
}

如果取消掉pView->ShwoMsg();这行的注释,则按下按钮后能够弹出一个消息框,但通过传送消息的方式则不能弹出对话框

求大侠指点问题出在哪里?搞疯了
...全文
479 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2016-03-23
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复多日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
Eleven 2016-01-01
  • 打赏
  • 举报
回复
引用 3 楼 u012707907 的回复:
这个程序用的是一个dockable pane,不是拆分的窗口,这样做好像还是不行。 跟踪了一下,pView返回值确实是右边的窗口,怎么才能得到左边窗口的指针?
可以通过框架窗口CMainFrame类来中转~
schlafenhamster 2016-01-01
  • 打赏
  • 举报
回复
最不行 就是 FindWindow; windowfrompoint
硅谷阿波罗 2016-01-01
  • 打赏
  • 举报
回复
这个程序用的是一个dockable pane,不是拆分的窗口,这样做好像还是不行。 跟踪了一下,pView返回值确实是右边的窗口,怎么才能得到左边窗口的指针?
schlafenhamster 2016-01-01
  • 打赏
  • 举报
回复
使用: CMainFrame* pMain=(CMainFrame*)AfxGetMainWnd();// m_pMainWnd; CCMakerRoverView * pLeft=pMain->GetLeftPane();
schlafenhamster 2016-01-01
  • 打赏
  • 举报
回复
窗口分为左右两部分 protected: CSplitterWnd m_wndSplitter; CMakerRoverView* GetRightPane(); CCMakerRoverView* GetLeftPane(); // CCMakerRoverView* CMainFrame::GetLeftPane() { CWnd* pWnd = m_wndSplitter.GetPane(0, 0); CCMakerRoverView* pView = DYNAMIC_DOWNCAST(CCMakerRoverView,pWnd); return pView; }

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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