something about clipping in OnCustomdraw
hi folks;-)
the following snipped comes from a customdraw-fn in a slider. As you
can see, i draw my own thumb and want to set some text in the control:
____________________________________________________________
class SHTC_API CQSlider : public CSliderCtrl
{
public:
CQSlider();
virtual ~CQSlider();
// ... other stuff ... //
// set sliders text, may contain '%d' (or %x...) for value
void QTitleSet(LPCTSTR szTitle);
protected:
//{{AFX_MSG(CQSlider)
afx_msg void OnCustomdraw(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
void _DrawThumb(NMCUSTOMDRAW& nmcd);
void _DrawText(NMCUSTOMDRAW& nmcd);
CString m_scTitle;
};
//-----------------------------------------------------------------------------
void CQSlider::OnCustomdraw(NMHDR* pNMHDR, LRESULT* pResult)
{
NMCUSTOMDRAW nmcd = *(LPNMCUSTOMDRAW)pNMHDR;
switch (nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW | CDRF_NOTIFYPOSTPAINT;
break;
case CDDS_ITEMPREPAINT:
switch (nmcd.dwItemSpec)
{
case TBCD_TICS:
*pResult = CDRF_DODEFAULT;
break;
case TBCD_THUMB:
_DrawThumb(nmcd);
*pResult = CDRF_SKIPDEFAULT;
break;
case TBCD_CHANNEL:
*pResult = CDRF_DODEFAULT;
break;
}
break;
case CDDS_POSTPAINT:
_DrawText(nmcd);
break;
default:
*pResult = CDRF_DODEFAULT;
}
}
//-----------------------------------------------------------------------------
void CQSlider::_DrawText(NMCUSTOMDRAW& nmcd)
{
CDC* pDC = CDC::FromHandle(nmcd.hdc);
CRect rcClient;
GetClientRect(&rcClient);
CString scText;
scText.Format(m_scTitle, GetPos());
pDC->SetBkMode(TRANSPARENT);
pDC->SelectClipRgn(NULL);
pDC->DrawText(scText, rcClient, DT_CENTER | DT_BOTTOM |
DT_SINGLELINE);
}
____________________________________________________________
the problem is: first time (initial, get focus), the text is drawn
correctly, but then, when moving the slider, everything except the
thumb gets clipped, so pDC->SelectClipRgn(NULL) seems to dont do
anything at all.
any suggestions welcome,
~.rhavin;)