我使用 Visual Studio 2013 制作了一个简单的拆分窗口应用程序。有两个视图,一个视图由 default-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;
}
这个分离器工作正常。
当我尝试将ON_COMMAND
处理程序添加到菜单项之一时,就会出现问题。如果我将ON_COMMAND
处理程序放在默认视图类中,则没有问题。菜单项点击良好,处理程序有效。
但是,如果我将ON_COMMAND
处理程序放在自定义视图类中,则菜单项根本不会启用。
我相信我已经尽一切努力在我的自定义视图类中正确实现消息映射。
/////////////////////////
// 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();
};
MyCustomView.h中DECLARE_MESSAGE_MAP()
肯定存在 , 当然,我已经在 MyCustomView.cpp 文件中添加了BEGIN_MESSAGE_MAP
,END_MESSAGE_MAP()
对。
/////////////////////////
// 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 command handler code here
}
但是,菜单项根本不会启用。它只是保持灰色。
我已经尽我所能在谷歌上搜索,但到目前为止似乎没有人有过这种经历。首先是否不可能将ON_COMMAND
处理程序添加到自定义视图类?我希望不是。
请给我一些建议。谢谢你。