新人求教:处理CSliderCtrl控件的=wm_Customdraw消息遇到的问题
sdfdl 2006-08-15 07:06:13 源代码:
void CColorSlider::OnCustomdraw(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMCUSTOMDRAW sp=(LPNMCUSTOMDRAW)pNMHDR;
switch(sp->dwDrawStage)
{
case CDDS_PREPAINT:
{
*pResult=CDRF_NOTIFYITEMDRAW;
break;
};
case CDDS_ITEMPREPAINT:
{
if(sp->dwItemSpec==TBCD_CHANNEL)
{
CRect rect(sp->rc);
CBrush brush(RGB(255,0,0));
CWindowDC dc(this);
dc.SelectObject(brush);
dc.Rectangle(rect);
*pResult=0;
break;
};
};
};
}
问题:
1、TBCD_CHANNEL是滑动控件中间白色的滑轨部分,TBCD_THUMB是滑块,那么,我想替代鼠标形状和滑轨以外的那些灰色部分该用什么?
2、该程序运行效果不良:刚开始运行的时候在鼠标点击控件之前滑轨并没有上色,断点后,发现是初始化后又被覆盖。点击时滑块发现原来的位置并没于画上。而绘画了滑块之后完全不起作用,同样发现是被覆盖。是什么原因造成的,怎样修正?
3、看过网上一些例子,对
//
CDRF_NOTIFYITEMDRAW The control will notify the parent of any item-related drawing operations. It will send NM_CUSTOMDRAW notification messages before and after drawing items. This occurs when dwDrawStage equals CDDS_PREPAINT.
CDRF_NOTIFYPOSTPAINT The control will notify the parent after painting an item. This occurs when dwDrawStage equals CDDS_PREPAINT.
CDRF_NOTIFYSUBITEMDRAW Version 4.71. Your application will receive an NM_CUSTOMDRAW message with dwDrawStage set to CDDS_ITEMPREPAINT | CDDS_SUBITEM before each list-view subitem is drawn. You can then specify font and color for each subitem separately or return
//
所造成的效果并不是很明白,CDRF_NOTIFYPOSTPAINT试验的结果甚至是比CDRF_NOTIFYITEMDRAW更早执行?十分不解他们的区别。而CDRF_NOTIFYSUBITEMDRAW是list之类的控件所使用的吧?
希望各位前辈指点迷津,m(_ _)m 某谢了~