求助:关于窗口重画问题!

isabel1169 2004-10-28 10:03:56
各位仁兄:
最近遇到一个问题,我在对话框中放了十几个按钮,用了XP风格的界面,但是当拖动对话框时,所有的按钮是一个接一个被画出来的.问题出在哪,如何解决? 多谢!!!
...全文
70 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
isabel1169 2004-10-29
重新画的时候并不慢,主要问题是BUTTON在结束是关闭速度太慢。
回复
huwei001982 2004-10-29
重绘太慢

应该选用好的皮肤类 按按钮类
回复
isabel1169 2004-10-29
void CXPButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
//从lpDrawItemStruct获取控件的相关信息
CRect rect = lpDrawItemStruct->rcItem;
CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
int nSaveDC=pDC->SaveDC();
UINT state = lpDrawItemStruct->itemState;
POINT pt ;
TCHAR strText[MAX_PATH + 1];
::GetWindowText(m_hWnd, strText, MAX_PATH);

//画按钮的外边框,它是一个半径为5的圆角矩形
pt.x = 5;
pt.y = 5;
CPen* hOldPen = pDC->SelectObject(&m_BoundryPen);
pDC->RoundRect(&rect, pt);

//获取按钮的状态
if (state & ODS_FOCUS)
{
m_bFocus = TRUE;
m_bSelected = TRUE;
}
else
{
m_bFocus = FALSE;
m_bSelected = FALSE;
}


if (state & ODS_SELECTED || state & ODS_DEFAULT)
{
m_bFocus = TRUE;
pDC->Draw3dRect(rect, GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_3DHILIGHT));
}


pDC->SelectObject(hOldPen);

rect.DeflateRect(CSize(GetSystemMetrics(SM_CXEDGE), GetSystemMetrics(SM_CYEDGE)));

//根据按钮的状态填充按钮的底色
CBrush* pOldBrush;
if (m_bOver)
{
pOldBrush = pDC->SelectObject(&m_FillActive);
DoGradientFill(pDC, &rect);
}
else
{
pOldBrush = pDC->SelectObject(&m_FillInactive);
DoGradientFill(pDC, &rect);
}

//根据按钮的状态绘制内边框
if (m_bOver || m_bSelected)
DrawInsideBorder(pDC, &rect);

pDC->SelectObject(pOldBrush);

//显示按钮的文本
if (strText!=NULL)
{
CFont* hFont = GetFont();
CFont* hOldFont = pDC->SelectObject(hFont);
CSize szExtent = pDC->GetTextExtent(strText, lstrlen(strText));
CPoint pt( rect.CenterPoint().x - szExtent.cx / 2, rect.CenterPoint().y - szExtent.cy / 2);
if (state & ODS_SELECTED)
pt.Offset(1, 1);
int nMode = pDC->SetBkMode(TRANSPARENT);
if (state & ODS_DISABLED)
pDC->DrawState(pt, szExtent, strText, DSS_DISABLED, TRUE, 0, (HBRUSH)NULL);
else
pDC->DrawState(pt, szExtent, strText, DSS_NORMAL, TRUE, 0, (HBRUSH)NULL);
pDC->SelectObject(hOldFont);
pDC->SetBkMode(nMode);
}

pDC->RestoreDC(nSaveDC);
}
回复
DentistryDoctor 2004-10-29
代码?
回复
isabel1169 2004-10-29
有解决的方法么?
回复
try876 2004-10-29
就是button的OnDraw函数的问题,画得太慢了
也有可以是你又用了其它的皮肤,皮肤画得太慢了也会有这种问题
回复
isabel1169 2004-10-29
我知道代码有问题,所以才请教各位仁兄大概是什么地方的问题!
回复
roger_ding 2004-10-29
button的代码有问题
回复
相关推荐
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2004-10-28 10:03
社区公告
暂无公告