MFC slider滑动条OnNMCustomdrawSlider(NMHDR *pNMHDR, LRESULT *pResult)事件

时间:2023-01-16 23:18:06

鼠标拖动滑动条的时候,触发事件

OnNMCustomdrawSlider(NMHDR *pNMHDR, LRESULT *pResult)
但是在窗体被其他页面遮挡重新显示在屏幕最前面的时候也会触发这个事件,例如最小化重新最大化的时候。

网友对三种消息类型的解释:

NM_CUSTOMDRAW,是子控件通知其父控件它已经完成重画功能,对Slider来说也就是我们每次鼠标按住滑块移动一下就能使滑块向拥有该滑块的Slider产生一个NM_CUSTOMDRAW消息,以便用户实时获得移动滑块时的是实时值。

NM_RELEASEDCAPTURE,是子控件被鼠标按住拖动到适当位置以后鼠标释放时子控件向父控件产发送的消息,对于Slider来说就是每次滑块被鼠标拖曳完鼠标释放的时候滑块给Slider发送的消息。

NM_OUTOFMEMORY,当没有足够内存来相应子控件时向父控件发送的消息。


对于这种不想要的触发直接用是不行了,多加了个变量判断一下



定义变量

int slider1;

在页面初始化

BOOL CtcpclientDlg::OnInitDialog()

的时候置成0

slider1 = 0;

在消息响应函数里面添加

void CtcpclientDlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{

LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
int pos = ((CSliderCtrl *)GetDlgItem(IDC_SLIDER1))->GetPos();
if(pos == slider1) return;
<span style="white-space:pre"></span>。。。。。。。。。。。。。
}