ProfUIS 的 CExtSliderWnd用法

刚开始用CExtSliderWnd,以为跟其它类型一样,可实际用起来出现问题了:

类型定义是一样的,用CExtSliderWnd替换CSliderCtrl,

但替换之后,原来用CSliderCtrl类型定义的NM_CUSTOMDRAW事件就不起作用了,

事件不会被触发。

解决方法:

添加窗体的OnVScroll、OnHScroll、OnSize事件。void CSetDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: 在此添加消息处理程序代码和/或调用默认值 RedrawWindow( NULL, NULL, RDW_INVALIDATE|RDW_ALLCHILDREN ); if( m_slider.GetSafeHwnd() != NULL ) m_slider.UpdateSliderWnd(); CDialog::OnVScroll(nSBCode, nPos, pScrollBar); } void CSetDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { if( pScrollBar->GetSafeHwnd() != NULL && pScrollBar->GetDlgCtrlID() == IDC_SLIDER_BACK ) { // 在这里添加你原来在NM_CUSTOMDRAW事件里的代码 return; } CDialog::OnHScroll(nSBCode, nPos, pScrollBar); RedrawWindow( NULL, NULL, RDW_INVALIDATE|RDW_ALLCHILDREN ); if( m_slider.GetSafeHwnd() != NULL ) m_slider.UpdateSliderWnd(); } void CSetDlg::OnSize(UINT nType, int cx, int cy) { CProfUISDialog::OnSize(nType, cx, cy); if( m_slider.GetSafeHwnd() != NULL ) m_slider.UpdateSliderWnd(); }

==================================================================

在OnInitDialog()里初始化CExtSliderWnd控件:

BOOL CSetDlg::OnInitDialog() { CDialog::OnInitDialog(); m_slider.SetPos(255-m_transparent); // 设置CSliderCtrl的样式 m_slider.SetStyle( CExtSliderWnd::ES_PROFUIS ); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }

你可能感兴趣的:(null)