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
“只有穿过消息队列的消息才受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
相关文章推荐
- 对话框不响应WM_KEYDOWN消息,可以通过重载BOOL PreTranslateMessage(MSG * pMsg)来实现
- 如何使得OCX控件能响应PreTranslateMessage消息?
- 在MFC中手动添加消息处理函数PreTranslateMessage
- PreTranslateMessage()函数捕获键盘按键消息
- PreTranslateMessage()函数捕获键盘按键消息
- 基于对话框的MFC程序中捕捉WM_KEYDOWN消息的方法----PreTranslateMessage(MSG* pMsg) 转帖
- 如何使得OCX控件能响应PreTranslateMessage消息?
- OCX控件响应PreTranslateMessage消息的步骤
- 如何使得OCX控件能响应PreTranslateMessage消息?
- 使得OCX控件响应PreTranslateMessage消息的步骤
- 在MFC中手动添加消息处理函数PreTranslateMessage
- 重写PreTranslateMessage(MSG* pMsg)遇到的问题--相应右键消息。隔一次响应一次,求解。
- 使得OCX控件响应PreTranslateMessage消息的步骤
- 在MFC中手动添加消息处理函数PreTranslateMessage和自定义消息
- 在MFC中手动添加消息处理函数PreTranslateMessage和自定义消息
- MFC消息截获之pretranslatemessage
- PreTranslateMessage处理键盘消息
- PreTranslateMessage()函数截获鼠标键盘消息
- VC++中添加自定义消息的响应 (BEGIN_MESSAGE_MAP ON_MESSAGE)
- MFC 中添加自定义消息的响应 (BEGIN_MESSAGE_MAP ON_MESSAGE)