Я создал простую приложение с разделенным окном с помощью Visual Studio 2013. Существует два вида: один вид сделан из класса по умолчанию, а другой вид сделан из класс пользовательского вида, полученный от CScrollView
.Элемент меню отключается даже после добавления обработчика ON_COMMAND
/////////////////////////
// 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();
};
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 command handler code here
}
Но все же элемент меню не будет включен вообще. Он просто остается серым.
Я искал как можно больше, но кажется, что до сих пор никто не имел этого опыта. Невозможно добавить обработчик ON_COMMAND
в пользовательский вид-класс, в первую очередь? Надеюсь нет.
Прошу дать мне несколько советов. Спасибо.
Wow. Спасибо. Я не ожидал, что ответ наступит так быстро. Огромное спасибо. Я попробую, как вы упомянули. Я действительно надеюсь найти разрешение. –
И неутешительно знать, что командная маршрутизация является настолько ограничительной, хотя. –
Он ограничен, но хорошо документирован ...;) TN021 https://msdn.microsoft.com/en-us/library/xt2c310k.aspx?f=255&MSPPError=-2147217396 – xMRi