と呼ばれる単純なメソッドによって処理される、スペースバーを含む一連のコントロールを持つメインウィンドウを持つアプリケーションがありますonSpacebar()
。そのメイン ウィンドウの上に、永続的なモードレス ダイアログがあります。ダイアログにフォーカスがあるか、メイン ウィンドウにフォーカスがあるかに関係なく、スペースバーをまったく同じように動作させる必要があります。
このダイアログは、次のような DialogProc によってサポートされています。
BOOL CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_NOTIFY:
std::cout<< "WM_NOTIFY" <<std::endl;
switch(LOWORD(wParam))
{
// which component caused the message?
case COMP_TREE:
if(((LPNMHDR)lParam)->code == NM_DBLCLK){
onDoubleclk()
}
//...
break;
// other components...
}
break;
case WM_CLOSE:
// the dialog can only be closed when the whole app is closed
//EndDialog(hDlg, IDCANCEL);
return TRUE;
case WM_DESTROY:
PostQuitMessage(0);
return TRUE;
}
return FALSE;
}
私が収集したものonSpacebar()
から、DialogProc 内からメソッドを呼び出す必要があります。同様に、ダブルクリックを処理する方法です。スペースバーが押されたときにダイアログが受信したことがわかりますWM_NOTIFY
(WM_NOTIFY というフレーズが cout に出力されます) が、ダイアログが受信する他の多数の通知とスペースバーの通知を区別できないようです。
WM_NOTIFY
その特定がスペースバーのキープレスに応答したものであることを認識する方法を教えてください。