この質問に加えてPreTranslateMessage
、メインウィンドウの機能を上書きして、メッセージが送信されCMainFrame
たかどうかを確認することにしました。WM_MOUSEWHEEL
メッセージが送信され、メッセージのターゲットがコンボボックスである場合は、メッセージがディスパッチされないようにします。
ただし、メッセージのターゲットがコンボボックスであるかどうかを判断する際に問題が発生しています。現在試しているのは次のとおりです。
BOOL CMainFrame::PreTranslateMessage( MSG* pMsg )
{
CWnd* pWnd = CWnd::FromHandle( pMsg->hwnd );
if( pWnd )
{
if( pMsg->message == WM_MOUSEWHEEL )
{
CRuntimeClass* pRuntimeClass = pWnd->GetRuntimeClass();
bool bIsCombo = pRuntimeClass->IsDerivedFrom( RUNTIME_CLASS(CComboBox) ) || pWnd->IsKindOf( RUNTIME_CLASS(CComboBox) );
if( bIsCombo && !reinterpret_cast<CComboBox*>(pWnd)->GetDroppedState() )
return TRUE;
}
}
return CFrameWndEx::PreTranslateMessage( pMsg );
}
ただし、ランタイム クラスは常に のように見えるため、これは機能しませんCWnd
。これを機能させる方法があるかどうか知りたいですか? dynamic_cast
fromを使用しCWnd*
てCComboBox*
も機能しないようです。
前もって感謝します!