控件自绘解决方法
控件自绘
我在基于FORMVIEW的对话框上添加了按钮控件,并设置属性为owner draw,重载了DrawItem函数如下
void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct ) ;
void CImageButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct )
{
if( lpDrawItemStruct->CtlType != ODT_BUTTON)
return;
CRect rectButton( lpDrawItemStruct->rcItem );
CDC *pDC = CDC::FromHandle( lpDrawItemStruct->hDC );
if (m_bOver)
{
CPoint point;
point.x=5;
point.y=5;
CPen *OldPen,newPen;
CBrush *OldBrush,newBrush;
newPen.CreatePen(PS_SOLID,1,RGB(234,175,0));
OldPen=pDC->SelectObject(&newPen);
newBrush.CreateSolidBrush(RGB(255,236,181));
OldBrush=pDC->SelectObject(&newBrush);
pDC->RoundRect(rectButton,point);
pDC->SelectObject(OldPen);
pDC->SelectObject(OldBrush);
}
else
{
pDC->FillRect(rectButton,&CBrush(RGB(240, 240, 240)));
}
if(m_bClick)
{
CPoint point;
point.x=5;
point.y=5;
CPen *OldPen,newPen;
CBrush *OldBrush,newBrush;
newPen.CreatePen(PS_SOLID,1,RGB(229,195,101));
OldPen=pDC->SelectObject(&newPen);
newBrush.CreateSolidBrush(RGB(255,232,166));
OldBrush=pDC->SelectObject(&newBrush);
pDC->RoundRect(rectButton,point);
pDC->SelectObject(OldPen);
pDC->SelectObject(OldBrush);
}
m_ImageList.DrawIndirect( pDC , 0 , CPoint( m_RectImage.left , m_RectImage.top ), CSize( m_bitmap.bmWidth , m_bitmap.bmHeight ), CPoint( 0 , 0 ) ,ILD_NORMAL );
pDC->SetBkMode(TRANSPARENT);
pDC->DrawText(_T("方向"),m_RectText,DT_CENTER);
}
为什么控件无法重绘呀,调试显示程序没有走到DrawItem这步,对话框就被绘制出来了,要怎么解决
------解决思路----------------------
DDX_Control 关联控件了没? 或Create
我在基于FORMVIEW的对话框上添加了按钮控件,并设置属性为owner draw,重载了DrawItem函数如下
void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct ) ;
void CImageButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct )
{
if( lpDrawItemStruct->CtlType != ODT_BUTTON)
return;
CRect rectButton( lpDrawItemStruct->rcItem );
CDC *pDC = CDC::FromHandle( lpDrawItemStruct->hDC );
if (m_bOver)
{
CPoint point;
point.x=5;
point.y=5;
CPen *OldPen,newPen;
CBrush *OldBrush,newBrush;
newPen.CreatePen(PS_SOLID,1,RGB(234,175,0));
OldPen=pDC->SelectObject(&newPen);
newBrush.CreateSolidBrush(RGB(255,236,181));
OldBrush=pDC->SelectObject(&newBrush);
pDC->RoundRect(rectButton,point);
pDC->SelectObject(OldPen);
pDC->SelectObject(OldBrush);
}
else
{
pDC->FillRect(rectButton,&CBrush(RGB(240, 240, 240)));
}
if(m_bClick)
{
CPoint point;
point.x=5;
point.y=5;
CPen *OldPen,newPen;
CBrush *OldBrush,newBrush;
newPen.CreatePen(PS_SOLID,1,RGB(229,195,101));
OldPen=pDC->SelectObject(&newPen);
newBrush.CreateSolidBrush(RGB(255,232,166));
OldBrush=pDC->SelectObject(&newBrush);
pDC->RoundRect(rectButton,point);
pDC->SelectObject(OldPen);
pDC->SelectObject(OldBrush);
}
m_ImageList.DrawIndirect( pDC , 0 , CPoint( m_RectImage.left , m_RectImage.top ), CSize( m_bitmap.bmWidth , m_bitmap.bmHeight ), CPoint( 0 , 0 ) ,ILD_NORMAL );
pDC->SetBkMode(TRANSPARENT);
pDC->DrawText(_T("方向"),m_RectText,DT_CENTER);
}
为什么控件无法重绘呀,调试显示程序没有走到DrawItem这步,对话框就被绘制出来了,要怎么解决
------解决思路----------------------
DDX_Control 关联控件了没? 或Create