アクセラレータの使用方法について – プログラミング – Home

アクセラレータの使用方法について
 
通知
すべてクリア

[解決済] アクセラレータの使用方法について


ぐ
 ぐ
(@ぐ)
ゲスト
結合: 24年前
投稿: 10
Topic starter  

こんにちは、ぐ です。
5/8の質問の続きになってしまうのですが・・
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200404/04040051.txt

2画面でCTRLキーを取得したいと思っていますが、
画面2でCTRL+Oする(「ファイルを開く」画面を出したい)と
画面1が前面に来て、「ファイルを開く」画面が出てしまいます。

状況は以下の通りです

画面1(ウィンドウ(CFormView))
・メニューID :IDR_GAMEN1
・アクセラレータID:IDR_GAMEN1(アクセラレータにCTRL+Oがある)

画面2(ダイアログ(CDialog))
・画面2は画面1から生成されるダイアログ
・ダイアログのプロパティでメニューを設定している
・メニューID :IDR_GAMEN2
・アクセラレータID:IDR_GAMEN2(アクセラレータにCTRL+Oはない)

画面2のOnInitDialog()で
m_hPulseDispAccel = ::LoadAccelerators( AfxGetInstanceHandle( ),
MAKEINTRESOURCE(IDR_GAMEN2));

画面2のPreTranslateMessage()で

if (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST)
return m_hPulseDispAccel != NULL &&
::TranslateAccelerator(this->m_hWnd,
this->m_hPulseDispAccel, pMsg);

としています。
LoadAcceleratorsでIDR_GAMEN2を指定しているので、そちらのアクセラレータが
使用されるのだろうと思っていたら、画面1のアクセラレータが使用されているように見えます。
(画面2のアクセラレータにはCTRL+Oはないはずなのに・・)

環境はWindowsXP ,VC++6.0(MFC使用)です。
どなたか、方法を教えてください。よろしくお願いいたします。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

PreTranslateMessage()はFALSEを返す限り、
親ウィンドウに遡ってどんどん呼び出されます。

> if (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST)
> return m_hPulseDispAccel != NULL &&
> ::TranslateAccelerator(this->m_hWnd,
> this->m_hPulseDispAccel, pMsg);

これだとダイアログの本来のPreTranslateMessage()が処理されないですね。
こんな風にしてみてはいかがでしょう。

if (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST) {
if (アクセラレーターの処理がなされた) {
return TRUE;
}
}
// ダイアログはキー操作を処理します。
return CDialog::PreTranslateMessage(pMsg);


返信引用
ぐ
 ぐ
(@ぐ)
ゲスト
結合: 24年前
投稿: 10
Topic starter  

> PreTranslateMessage()はFALSEを返す限り、
> 親ウィンドウに遡ってどんどん呼び出されます。

そうなんですか・・。知りませんでした・・・

if (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST)
{
if ( m_hPulseDispAccel != NULL &&
::TranslateAccelerator(this->m_hWnd,this->m_hPulseDispAccel, pMsg))
{
return TRUE;
}
}

と、してみたら出来ました。
dairygoodsさん、ありがとうございました!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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