キーボードアクセラレータ – プログラミング – Home

キーボードアクセラレータ
 
通知
すべてクリア

[解決済] キーボードアクセラレータ


ろー
 ろー
(@ろー)
ゲスト
結合: 16年前
投稿: 9
Topic starter  

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) ;
}


引用未解決
トピックタグ
ろー
 ろー
(@ろー)
ゲスト
結合: 16年前
投稿: 9
Topic starter  

同様に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) ;
}


返信引用
ろー
 ろー
(@ろー)
ゲスト
結合: 16年前
投稿: 9
Topic starter  

追記

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

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


返信引用
ろー
 ろー
(@ろー)
ゲスト
結合: 16年前
投稿: 9
Topic starter  

PCを変えて確認したところ現象は発生しませんでした。
VisualStudioとOSの再インストールを行うことにしました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました