Re: something about clipping in OnCustomdraw
On 10 Okt., 18:16, ".rhavin grobert" <cl...@yahoo.de> wrote:
On 10 Okt., 18:02, ".rhavin grobert" <cl...@yahoo.de> wrote:
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 va=
lue
void QTitleSet(LPCTSTR szTitle);
protected:
//{{AFX_MSG(CQSlider)
afx_msg void OnCustomdraw(NMHDR* pNMHDR, LRESULT* pResu=
lt);
//}}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_DODEF=
AULT;
break;
case TBCD_THUMB:
_DrawThumb(nmcd);
*pResult = CDRF_SKIPD=
EFAULT;
break;
case TBCD_CHANNEL:
*pResult = CDRF_DODEF=
AULT;
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;)
oh and i should add that pDC->SelectClipRgn(NULL) returns SIMPLEREGION
but shouldnt it return NULLREGION !?
played with SetBoundsRect(), but that doesnt help either;-/