Visual Studio 2013 を使用して単純な分割ウィンドウ アプリケーションを作成しました。2 つのビューがあり、1 つのビューは default-view-class で作成され、もう 1 つのビューは から派生した custom-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
この問題は、メニュー項目の 1 つにハンドラを追加しようとしたときに発生します。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();
};
はDECLARE_MESSAGE_MAP()
間違いなく MyCustomView.h にあります。もちろん、 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
そもそも、custom-view-class にハンドラを追加することは不可能ですか? ないことを願っています。
私に何かアドバイスをください。ありがとうございました。