PreTranslateMessage で特定のメッセージを処理する MFC ダイアログ アプリケーションがあります。私が興味を持っているものの1つはCtrl+Rです。ただし、別のウィンドウ (Visual Studio 2010 のコード エディター、notepad++ など) をクリックしてCtrl+ C(または Ctrl+X) でテキストをコピーすると、このメッセージが表示されます。Ctrl+では発生しないようで、 と の両方をV使用して再現可能であることに注意してください。動作が非常に紛らわしいです!再現するには、Visual Studio 10 で基本的な MFC ダイアログを作成し、pretranslate を次のように追加します。GetKeyState
GetASyncKeyState
BOOL CPreTranslateTestDlg::PreTranslateMessage(MSG *pMsg)
{
if (GetKeyState(VK_CONTROL) & 0x8000 && pMsg->wParam == 'R')
{
return true;
}
return CDialogEx::PreTranslateMessage(pMsg);
}
にブレークポイントを置きreturn true;
、ダイアログを起動します。次に、Visual Studio Code ウィンドウに移動し、Ctrl+Cテキストを入力します。ブレークポイントにヒットします。
なぜこれが起こっているのかについてのアイデアはありますか?