SDIのViewでCtrl+Bのキー操作を処理したいのですが
やり方を教えてください。
以下を実装したのですが Ctest1View::OnEditXXXX()にとんできません
プロジェクトを新規に作成し下記を変更しました。
環境 Windows Vista VisualC++ 2008 pro
[resource.h] Ctrl+Bが処理されるID追加
#define ID_EDIT_XXXX 32773
[test1.rc] メニューとキーボードアクセラレーターテーブルに追加
IDR_MAINFRAME MENU
BEGIN
POPUP 編集(&E)
BEGIN
MENUITEM コピー(&C)\tCtrl+C, ID_EDIT_COPY
MENUITEM 貼り付け(&P)\tCtrl+V, ID_EDIT_PASTE
MENUITEM XXXX(&B)\tCtrl+B, ID_EDIT_XXXX
END
END
IDR_MAINFRAME ACCELERATORS
BEGIN
C, ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT
VK_INSERT, ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT
V, ID_EDIT_PASTE, VIRTKEY, CONTROL, NOINVERT
VK_INSERT, ID_EDIT_PASTE, VIRTKEY, SHIFT, NOINVERT
・・・省略・・・
B, ID_EDIT_XXXX, VIRTKEY, CONTROL, NOINVERT
END
[Test1View.h]
class Ctest1View : public CView
{
・・・省略・・・
public:
afx_msg void OnEditXXXX();
afx_msg void OnUpdateEditXXXX(CCmdUI *pCmdUI);
afx_msg void OnEditCopy();
afx_msg void OnUpdateEditCopy(CCmdUI *pCmdUI);
};
[Test1View.cpp]
BEGIN_MESSAGE_MAP(Ctest1View, CView)
// 標準印刷コマンド
ON_COMMAND(ID_EDIT_XXXX, &Ctest1View::OnEditXXXX)
ON_UPDATE_COMMAND_UI(ID_EDIT_XXXX, &Ctest1View::OnUpdateEditXXXX)
ON_COMMAND(ID_EDIT_COPY, &Ctest1View::OnEditCopy)
ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, &Ctest1View::OnUpdateEditCopy)
END_MESSAGE_MAP()
void Ctest1View::OnEditXXXX()
{
}
void Ctest1View::OnUpdateEditXXXX(CCmdUI *pCmdUI)
{
pCmdUI->Enable(TRUE) ;
}
void Ctest1View::OnEditCopy()
{
}
void Ctest1View::OnUpdateEditCopy(CCmdUI *pCmdUI)
{
pCmdUI->Enable(TRUE) ;
}
同様にVC++6.0で同じようにSDIプロジェクトに下記実装を追加したところ
こちらはOnEditXxxxが呼び出されます。
VC2008では何が必要になったのでしょうか?
環境 Windows Vista VC++ 6.0
[resource.h]
#define ID_EDIT_XXXX 32771
[test2.rc]
POPUP 編集(&E)
BEGIN
MENUITEM コピー(&C)\tCtrl+C, ID_EDIT_COPY
MENUITEM XXXX(&B)\tCtrl+B, ID_EDIT_XXXX
END
BEGIN
B, ID_EDIT_XXXX, VIRTKEY, CONTROL, NOINVERT
C, ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT
VK_INSERT, ID_EDIT_COPY, VIRTKEY, CONTROL, NOINVERT
END
[Test2View.h]
class CTest2View : public CView
{
・・・省略・・・
protected:
//{{AFX_MSG(CTest2View)
afx_msg void OnEditXxxx();
afx_msg void OnUpdateEditXxxx(CCmdUI* pCmdUI);
afx_msg void OnEditCopy();
afx_msg void OnUpdateEditCopy(CCmdUI* pCmdUI);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
[Test2View.cpp]
BEGIN_MESSAGE_MAP(CTest2View, CView)
//{{AFX_MSG_MAP(CTest2View)
ON_COMMAND(ID_EDIT_XXXX, OnEditXxxx)
ON_UPDATE_COMMAND_UI(ID_EDIT_XXXX, OnUpdateEditXxxx)
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateEditCopy)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CTest2View::OnEditXxxx()
{
}
void CTest2View::OnUpdateEditXxxx(CCmdUI* pCmdUI)
{
pCmdUI->Enable(TRUE) ;
}
void CTest2View::OnEditCopy()
{
}
void CTest2View::OnUpdateEditCopy(CCmdUI* pCmdUI)
{
pCmdUI->Enable(TRUE) ;
}
追記
Test4という名前でプロジェクトを作り直したところ正常動作しました。
異常のプロジェクトのテキストファイルのTest1を全てTest4に変更したところ、正常動
作したのですが、もう一度Test1で作り直したところやはり異常でした。
プロジェクト名で動作が変わっているようです。
PCを変えて確認したところ現象は発生しませんでした。
VisualStudioとOSの再インストールを行うことにしました。