为了在拖动slider的时候可以同步更新按钮上的数字,我编写了如下代码:
BEGIN_MESSAGE_MAP(CSAEDVSDlg, CDialog)
//{{AFX_MSG_MAP(CSAEDVSDlg)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_CONTRAST, OnCustomdrawSliderContrast)
//}}AFX_MSG_MAP
END_MESSAGE_MAP() // Generated message map functions
//{{AFX_MSG(CSAEDVSDlg)
afx_msg void OnCustomdrawSliderContrast(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()void CSAEDVSDlg::OnCustomdrawSliderContrast(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_contrast=m_slider_contrast.GetPos();
UpdateData(FALSE);
*pResult = 0;
}也就是对sliaer的NM_CUSTOMDRAW消息进行的影射,这一步成功了!(注意到影射发生在对话框中)后来为了达到slider的同名效果,我继承列一个自己的slider类,为了实现控件自绘,我在继承类中又一次影射了NM_CUSTOMDRAW消息,并加了一些处理代码达到了控件透明效果,也成功了问题在于,我把对话框中的slider定义成这个自己写的继承的slider类时,此时对话框中的NM_CUSTOMDRAW消息影射不再生效了,也就是说OnCustomdrawSliderContrast没有执行
请问:我该怎样处理,使我的slider类处理完自身的OnCustomdraw后还可以通知对话框处理OnCustomdrawSliderContrast,即达到一举两得的效果????
BEGIN_MESSAGE_MAP(CSAEDVSDlg, CDialog)
//{{AFX_MSG_MAP(CSAEDVSDlg)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_CONTRAST, OnCustomdrawSliderContrast)
//}}AFX_MSG_MAP
END_MESSAGE_MAP() // Generated message map functions
//{{AFX_MSG(CSAEDVSDlg)
afx_msg void OnCustomdrawSliderContrast(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()void CSAEDVSDlg::OnCustomdrawSliderContrast(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_contrast=m_slider_contrast.GetPos();
UpdateData(FALSE);
*pResult = 0;
}也就是对sliaer的NM_CUSTOMDRAW消息进行的影射,这一步成功了!(注意到影射发生在对话框中)后来为了达到slider的同名效果,我继承列一个自己的slider类,为了实现控件自绘,我在继承类中又一次影射了NM_CUSTOMDRAW消息,并加了一些处理代码达到了控件透明效果,也成功了问题在于,我把对话框中的slider定义成这个自己写的继承的slider类时,此时对话框中的NM_CUSTOMDRAW消息影射不再生效了,也就是说OnCustomdrawSliderContrast没有执行
请问:我该怎样处理,使我的slider类处理完自身的OnCustomdraw后还可以通知对话框处理OnCustomdrawSliderContrast,即达到一举两得的效果????
SendMessage()
试试
可以在对话框的WM_HSCROLL消息里一样能处理
{
CSliderCtrl *slider;
slider=(CSliderCtrl*)GetDlgItem(IDC_SLIDERZU);//控件ID
m_contrast=slider->GetPos();
UpdateData(FALSE);
}
可是我还是不明白,拖动slider为什么会导致 对话框的OnHscroll事件发生,
二位可以给我解释一下吗再次感谢
这是微软做好的对所有的滚动类控件滚动的同一消息接口。Slider控件也是滚动类控件中的一种,因此,它的滚动事件,也是由OnHScroll和OnVScroll处理