滑块控件SLIDER的应用与消息

 写程序正好用到SLIDER控件,随把心得发表出来以供分享。

 

一、应用

 

 

CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default CSliderCtrl *pSlidCtrl=(CSliderCtrl*)GetDlgItem(IDC_SLIDER1); int m_nCur=pSlidCtrl->GetPos(); CString str; str.Format("%d/n",m_nCur); TRACE(str); CDialog::OnHScroll(nSBCode,nPos,pScrollBar); }

 

【MFC 中】关于对话框中的OnVScroll() 和 OnHScroll()函数
所以,要想对滑块有效控制,就要对这两个函数(改写对话框的这两个函数)进行控制。

如:
/////////////////////////////////////////////////////////////////////////////////////////////////// // 水平移动 /////////////////////////////////////////////////////////////////////////////////////////////////// void CTestDialog::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: 在此添加消息处理程序代码和/或调用默认值 //Slider CSliderCtrl* pSlider = (CSliderCtrl*)pScrollBar; CString strText; int dValue[10] = {0}; //多个SLIDER控件控制 switch( pSlider->GetDlgCtrlID() ) { //Slider1 case IDC_SLIDER1: strText.Format( _T("%d"), pSlider->GetPos() ); SetDlgItemText( IDC_STATIC_SLIDER1, strText ); break; //Slider2 case IDC_SLIDER2: strText.Format( _T("%3.1f"), dValue[pSlider->GetPos()] ); SetDlgItemText( IDC_STATIC_SLIDER2, strText ); break; //dValue[6] = {1.5, 3.0, 4.5, 6.0, 7.5, 8.0}; } CDialog::OnHScroll(nSBCode, nPos, pScrollBar); } /////////////////////////////////////////////////////////////////////////////////////////////////// // 垂直滚动 /////////////////////////////////////////////////////////////////////////////////////////////////// void CTestDialog::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if( nSBCode == SB_ENDSCROLL ) { return; } //Spin Button if( pScrollBar->GetDlgCtrlID() == IDC_SPIN1 ) { CString strValue; strValue.Format( _T("%3.1f"), (double)nPos / 10.0 ); //((CSpinButtonCtrl*)pScrollBar)->GetBuddy()->SetWindowTextW( strValue ); CEdit* pEdit =(CEdit*) ((CSpinButtonCtrl*)pScrollBar)->GetBuddy(); pEdit->SetWindowTextW( strValue ); } CDialog::OnVScroll(nSBCode, nPos, pScrollBar); }

 

 

 

二、滑块通知消息

Visual C++ 概念:添加功能
滑块通知消息

滑块控件 (Slider Control) 通过向父窗口发送 WM_HSCROLLWM_VSCROLL 消息(取决于滑块控件 (Slider Control) 的方向),将用户操作通知其父窗口。若要处理这些消息,请将 WM_HSCROLLWM_VSCROLL 消息的处理程序添加到父窗口。将向 OnHScroll 和 OnVScroll 成员函数传递通知代码、滑块的位置和指向 CSliderCtrl 对象的指针。注意指针的类型为 CScrollBar *,即使它指向 CSliderCtrl 对象。若要操作滑块控件 (Slider Control),可能需要转换该指针的类型。

 

滑块控件 (Slider Control) 不是使用滚动条通知代码,而是发送不同的通知代码集。只有当用户使用键盘与滑块控件 (Slider Control) 交互时,滑块控件 (Slider Control) 才发送 TB_BOTTOMTB_LINEDOWNTB_LINEUPTB_TOP 通知代码。只有当用户使用鼠标时才发送 TB_THUMBPOSITIONTB_THUMBTRACK 通知消息。在两种情况下都发送 TB_ENDTRACKTB_PAGEDOWNTB_PAGEUP 通知代码。

下表列出了滑块控件 (Slider Control) 通知消息和导致发送通知的事件(虚键控代码和鼠标事件)。(有关标准虚键控代码的列表,请参见 Winuser.h。)

通知消息 导致发送通知的事件
TB_BOTTOM VK_END
TB_ENDTRACK WM_KEYUP(用户释放了发送相关虚键控代码的键)
TB_LINEDOWN VK_RIGHTVK_DOWN
TB_LINEUP VK_LEFTVK_UP
TB_PAGEDOWN VK_NEXT(用户单击了滑块下面或右边的通道)
TB_PAGEUP VK_PRIOR(用户单击了滑块上面或左边的通道)
TB_THUMBPOSITION WM_LBUTTONUPTB_THUMBTRACK 通知消息之后
TB_THUMBTRACK 滑块移动(用户拖动了滑块)
TB_TOP VK_HOME

范例代码:
//控制垂直滚动条移动
 HWND hWnd = GetDlgItem(IDC_SLIDER1)->GetSafeHwnd();
 ::SendMessage(hWnd,WM_SETFOCUS,0,0);
 ::SendMessage(hWnd,WM_KEYDOWN,VK_UP,1);
 ::SendMessage(hWnd,WM_VSCROLL,TB_LINEUP,0);

你可能感兴趣的:(VC开发)