キーボードアクセラレータ

[戻る]
ろー 2009/05/05(火) 00:36:12
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) ;
}

ろー 2009/05/06(水) 19:30:53
同様に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) ;
}

ろー 2009/05/07(木) 00:14:13
追記

Test4という名前でプロジェクトを作り直したところ正常動作しました。
異常のプロジェクトのテキストファイルのTest1を全てTest4に変更したところ、正常動
作したのですが、もう一度Test1で作り直したところやはり異常でした。

プロジェクト名で動作が変わっているようです。

ろー 2009/05/07(木) 08:55:38
[[解決]]
PCを変えて確認したところ現象は発生しませんでした。
VisualStudioとOSの再インストールを行うことにしました。

古いスレッドには追加発言できません。