比如再一个Cmainframe上创建一个视图CGameControlPanelView,另外有一个对话框CCtrlDlg,对话框上有摁钮,用来点击响应处理函数。这里的问题就是,把摁钮的消息处理函数写在对话框类里可以正常响应,但是把消息处理函数写在CGameControlPanelView类里面,没法响应,原因是对话框截获了这个点击消息,没传到视图类CGameControlPanelView。
解决办法:
在对话框CCtrlDlg里重载函数
virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo);
实现如下:
BOOL CCtrlDlg::OnCmdMsg( UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo )
{
//MessageBox("here");
//GetParent()->OnCmdMsg(nID,nCode,pExtra,pHandlerInfo);
CMainFrame *pmwnd = (CMainFrame*)AfxGetMainWnd();
CbubbleView *pview = (CbubbleView*)(pmwnd->m_wndSplitter.GetPane(0,0));
//pview->SetFocus();
if (pview->OnCmdMsg(nID,nCode,pExtra,pHandlerInfo))
return TRUE;
return TRUE;
}