在框架类通过重载PreTranslateMessage截取并处理工具栏的消息失败,该如何处理
在框架类通过重载PreTranslateMessage截取并处理工具栏的消息失败
滑动条控制在MFC类库中被封装为CSliderCtrl控制,其主要操作是设置刻度范围、绘制刻度标记、设置选择范围和当前滑标位置等。当用户进行交互操作时,滑动条控制将向其父窗口发送消息WM_HSCROLL,所以在应用程序中应重载父窗口的OnHScroll()成员函数,以便对消息进行正确处理。
在CMainFrame类添加一个成员变量CSliderCtrl m_SliderCtrl,是一个滑块控件然后把它创建在CttToolbar m_ToolBar(一个工具栏)上,因此滑块的父窗口是m_ToolBar,但无法在CttToolbar添加WM_HSCROLL消息处理函数(CttToolbar是一个底层基类,无法修改,也不能派生)。
然后我重载PreTranslateMessage函数,写了一个测试代码,
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
if((pMsg-> message==WM_HSCROLL)&&(pMsg-> hwnd==m_wndStereoToolbar.GetSafeHwand()))
{
CString str;
int i = m_SliderCtrl.GetPos();
str.format( "%d ",i); AfxMessageBox(str); }
}
但是运行时拖动滑块控件并没有反应,这是为什么呢?
------解决方案--------------------
有的消息不是发送到消息队列的,也就不会经过这里.
你可以重载WindowProc 在里面处理
滑动条控制在MFC类库中被封装为CSliderCtrl控制,其主要操作是设置刻度范围、绘制刻度标记、设置选择范围和当前滑标位置等。当用户进行交互操作时,滑动条控制将向其父窗口发送消息WM_HSCROLL,所以在应用程序中应重载父窗口的OnHScroll()成员函数,以便对消息进行正确处理。
在CMainFrame类添加一个成员变量CSliderCtrl m_SliderCtrl,是一个滑块控件然后把它创建在CttToolbar m_ToolBar(一个工具栏)上,因此滑块的父窗口是m_ToolBar,但无法在CttToolbar添加WM_HSCROLL消息处理函数(CttToolbar是一个底层基类,无法修改,也不能派生)。
然后我重载PreTranslateMessage函数,写了一个测试代码,
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
if((pMsg-> message==WM_HSCROLL)&&(pMsg-> hwnd==m_wndStereoToolbar.GetSafeHwand()))
{
CString str;
int i = m_SliderCtrl.GetPos();
str.format( "%d ",i); AfxMessageBox(str); }
}
但是运行时拖动滑块控件并没有反应,这是为什么呢?
------解决方案--------------------
有的消息不是发送到消息队列的,也就不会经过这里.
你可以重载WindowProc 在里面处理