为了在拖动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,即达到一举两得的效果????

解决方案 »

  1.   

    slider类处理完自身的OnCustomdraw后
    SendMessage()
    试试
      

  2.   

    ON_NOTIFY_REFLECT()When a WM_NOTIFY message is sent, the control is offered the first chance to handle it. If any other reflected message is sent, the parent window has the first chance to handle it and the control will receive the reflected message
      

  3.   

    对话框中里的最好不要在NM_CUSTOMDRAW处理消息
    可以在对话框的WM_HSCROLL消息里一样能处理
      

  4.   

    对话框的WM_HSCROLL消息---这和slider一点关系也没有啊
      

  5.   

    Did you have a try?
      

  6.   

    void CXXXDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    CSliderCtrl *slider;
    slider=(CSliderCtrl*)GetDlgItem(IDC_SLIDERZU);//控件ID
    m_contrast=slider->GetPos();
    UpdateData(FALSE);
    }
      

  7.   

    少了个CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
      

  8.   

    成功了,简直不可思议谢谢  seu07201213和livedeal
    可是我还是不明白,拖动slider为什么会导致 对话框的OnHscroll事件发生,
    二位可以给我解释一下吗再次感谢
      

  9.   

    Slider会向父窗口发WM_HSCROLL消息
    这是微软做好的对所有的滚动类控件滚动的同一消息接口。Slider控件也是滚动类控件中的一种,因此,它的滚动事件,也是由OnHScroll和OnVScroll处理