我使用Visual Studio 2013创建了一个简单的拆分窗口应用程序.有两个视图,一个视图由default-view-class组成,另一个视图由from-view-class派生而来CScrollView
.
/////////////////////////
// MainFrm.cpp
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs,CCreateContext* pContext)
{
split_wnd.CreateStatic(this,1,2);
CRect cr;
GetClientRect(&cr);
split_wnd.CreateView(0,0,RUNTIME_CLASS(CProjectMainView),CSize(cr.Width()/2,cr.Height()),pContext);
split_wnd.CreateView(0,1,RUNTIME_CLASS(CMyCustomView),CSize(cr.Width()/2,cr.Height()),pContext);
return true;
}
Run Code Online (Sandbox Code Playgroud)
这个分离器工作正常.
当我尝试将ON_COMMAND
处理程序添加到其中一个菜单项时,会出现问题.如果我将ON_COMMAND
处理程序放在default-view-class中则没有问题.菜单项点击很好,处理程序工作.
但是,如果我将ON_COMMAND
处理程序放在custom-view-class中,则菜单项根本不会启用.
我相信我已经做了一切,在我的自定义视图类中正确实现了消息映射.
/////////////////////////
// CMyCustomView.h
class CMyCustomView:public CScrollView
{
public:
DECLARE_DYNCREATE(CMyCustomView)
CMyCustomView();
~CMyCustomView();
virtual void OnDraw(CDC* /*pDC*/);
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual void OnInitialUpdate();
public:
DECLARE_MESSAGE_MAP()
afx_msg void OnMenuIdTestMessageMap();
};
Run Code Online (Sandbox Code Playgroud)
该DECLARE_MESSAGE_MAP()
肯定是有在MyCustomView.h当然,我已经添加BEGIN_MESSAGE_MAP
,END_MESSAGE_MAP()
对在MyCustomView.cpp文件.
/////////////////////////
// CMyCustomView.cpp
BEGIN_MESSAGE_MAP(CMyCustomView,CScrollView)
ON_COMMAND(MENU_ID_TEST_MESSAGE_MAP,&CMyCustomView::OnMenuIdTestMessageMap)
END_MESSAGE_MAP()
void CMyCaptureView::OnMenuIdTestMessageMap()
{
// TODO: Add your …
Run Code Online (Sandbox Code Playgroud)