对于这个问题,我决定覆盖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*
toCComboBox*
似乎也不起作用。
提前致谢!