В дополнение к this question я решил переписать PreTranslateMessage
функцию моего главного окна CMainFrame
, чтобы проверить, если WM_MOUSEWHEEL
сообщение было отправлено, и если у него есть и цель сообщения является списком а затем запретить отправку сообщения.Определение типа объекта MFC от HWND
Однако, я имею вопрос, определяющий, если цель сообщения является списком, вот что я в настоящее время пытаюсь:
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
от CWnd*
до CComboBox*
также не работает.
Заранее благодарен!