您的位置:首页 > 其它

PreTranslateMessage无法捕获WM_VSCROLL 滑动条添加消息响应

2017-08-05 16:32 513 查看
工作中对CScrollView生成的滑动条添加额外的响应,于是用重载的PreTranslateMessage捕获WM_HSCROLL和WM_VSCROLL消息时,发现毫无卵用:根本不会执行PreTranslateMessage。

只有穿过消息队列的消息才受PreTranslateMessage()影响,采用SendMessage()或其他类似的方式向窗口直接发送的而不经过消息队列的消息根本不会理睬PreTranslateMessage()的存在。”原来WM_HSCROLL和WM_VSCROLL哥俩不用排队会直接到达窗口。

可以通过为WM_HSCROLL添加消息响应OnHScroll 或 重载虚函数WindowProc来实现,实现举例如下:

void CWndMessageProcDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
if(*pScrollBar == m_scrollbarV)
MessageBox(L"Hi, I'm from OnVScroll");
CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
}

LRESULT CWndMessageProcDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if(message == WM_VSCROLL)
MessageBox(L"Hi, I'm form WindowProc");

return CDialogEx::WindowProc(message, wParam, lParam);
}

若两个函数都添加了,会先执行哪一个呢?
会先执行WindowProc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息