CSliderCtrl的各种消息总结

CSliderCtrl本身的一些消息没有这个好用,一般可以通过在对话框上直接添加OnHScroll,通过参数判断CSliderCtrl,然后判断响应相关消息;


当用户拖拽滑块、点击滑块、按↑↓←→键、按PageUp PageDown键、按Home End键时都会触发滚动条消息(此滚动条已经获得焦点)。这些消息的响应一般在父窗口的WM_HSCROLL中处理(讨论水平滚动条)。下来总结下WM_HSCROLL消息的消息响应函数之nSBCode参数的意思。

 

函数原型:afx_msg void OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar );

nSBCode

Specifies a scroll-bar code that indicates the user’s scrolling request. This parameter can be one of the following:

  • SB_LEFT   Scroll to far left. // 按Home键时触发
  • SB_ENDSCROLL   End scroll.//结束对滚动条的控制时触发,比如点击滚动条,当鼠标左键弹起时便叫结束控制
  • SB_LINELEFT   Scroll left.//按方向键时触发
  • SB_LINERIGHT   Scroll right.//按方向键时触发
  • SB_PAGELEFT   Scroll one page left.//按PageUp时或点击滑块左侧空白处触发
  • SB_PAGERIGHT   Scroll one page right.//按PageDown时或点击滑块右侧空白处触发
  • SB_RIGHT   Scroll to far right..// 按End键时触发
  • SB_THUMBPOSITION   Scroll to absolute position. The current position is specified by the nPosparameter.//拖拽滑块并释放时触发,此时nPos有效
  • SB_THUMBTRACK   Drag scroll box to specified position. The current position is specified by the nPosparameter.//拖拽滑块过程中触发,此时nPos有效

测试代码:

[cpp]  view plaincopy
  1. void CCVTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)  
  2. {  
  3.     // TODO: 在此添加消息处理程序代码和/或调用默认值  
  4.     int Brightness = ((CSliderCtrl*)GetDlgItem(IDC_SLIDER1))->GetPos();//def :128  
  5.     int Contrast = ((CSliderCtrl*)GetDlgItem(IDC_SLIDER2))->GetPos();//def :64  
  6.     int Saturation = ((CSliderCtrl*)GetDlgItem(IDC_SLIDER3))->GetPos();//def :64  
  7.     int Hue = ((CSliderCtrl*)GetDlgItem(IDC_SLIDER4))->GetPos();//def :0  
  8.     CString str;  
  9.     if(GetDlgItem(IDC_SLIDER1) == pScrollBar)  
  10.     {  
  11.         //MessageBox(L"Slider1");  
  12.         switch(nSBCode)  
  13.         {  
  14.         case SB_PAGELEFT://影响鼠标点击一次滑块或用户按下PageUp和PageDown键,滑块移动的距离,由SetPageSize决定  
  15.         case SB_PAGERIGHT:  
  16.         case SB_LEFT://用户按下Home键触发  
  17.         case SB_RIGHT://用户按下End键触发  
  18.         case SB_LINELEFT://用户按下↑↓←→键时触发  
  19.         case SB_LINERIGHT://用户按下↑↓←→键时触发  
  20.             Brightness = ((CSliderCtrl*)GetDlgItem(IDC_SLIDER1))->GetPos();  
  21.             str.Format(L"%d",Brightness);  
  22.             SetDlgItemText(IDC_BRIGHT_EDIT,str);  
  23.             SetVideoPara(ChannelHandle[3], Brightness, Contrast, Saturation, Hue);  
  24.             break;  
  25.         case SB_THUMBPOSITION://鼠标拖拽滑块并释放时触发,此时nPos有效  
  26.         case SB_THUMBTRACK://鼠标拖拽滑块时触发,此时nPos有效  
  27.             //MessageBox(L"SB_THUMBPOSITION");  
  28.             Brightness = nPos;  
  29.             str.Format(L"%d",Brightness);  
  30.             SetDlgItemText(IDC_BRIGHT_EDIT,str);  
  31.             SetVideoPara(ChannelHandle[3], Brightness, Contrast, Saturation, Hue);  
  32.             break;  
  33.         default:  
  34.             break;  
  35.         }  
  36.     }  
  37.     CDialog::OnHScroll(nSBCode, nPos, pScrollBar);  
  38. }  

你可能感兴趣的:(CSliderCtrl的各种消息总结)