分類:[C/C++]
2010/08/24(Tue) 18:53:34 編集(投稿者)
いつもお世話になっております、ホエホエです。
さて今回はダイアログ上の特定コントロールのフォーカスイベントを
ローカルフックして処理したいと思ってるんですが、関係のない
コントロールのイベント発生時もフックプロシージャーが呼び出しされて
しまいます。
下記のようなソースコードに現在なってます。
HHOOK g_hEditHook = NULL; //ローカルフックグローバル
//ローカルフック処理部
BOOL CTestPgDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//フックしたいエディットコントロールのインスタンスハンドル取得
HINSTANCE hInst = (HINSTANCE)GetWindowLong( m_cEditCtrl.m_hWnd, GWL_HINSTANCE );
//ローカルフック設定
g_hEditHook = SetWindowsHookEx( WH_CALLWNDPROC, (HOOKPROC)EditWndProc, hInst, AfxGetApp()->m_nThreadID );
return TRUE;
}
//フックプロシージャー
LRESULT CALLBACK CTestPgDlg::EditWndProc( int p_nCode, WPARAM p_wParam, LPARAM p_lParam )
{
if( p_nCode == HC_ACTION && p_wParam == 0 )
{
CWPSTRUCT* pCwp = (CWPSTRUCT*)p_lParam;
switch( pCwp->message )
{
case WM_KILLFOCUS:
TRACE( _TEXT("フォーカスロスト!!%X %d\n"), pCwp->hwnd, pCwp->lParam );
break;
}
}
return CallNextHookEx( g_hEditHook, p_nCode, p_wParam, p_lParam );
}
どこがおかしいのでしょうか?
ちなみに開発環境がVC++6.0 MFCで、OSはWindowsXPです。
ぜひ教えてください。お願いします。