AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

如何在VC中改变控件的背景色

51自学网 2015-08-30 http://www.wanshiok.com

 

第二步:定义各函数

//CcolorButton.cpp

……

// CColorButton

IMPLEMENT_DYNAMIC(CColorButton, CButton)

CColorButton::CColorButton()

{ }

CColorButton::~CColorButton()

{

}

//定义Attach()函数

BOOL CColorButton::Attach(const UINT nID, CWnd* pParent, const COLORREF BGColor, const COLORREF FGColor)

{

if (!SubclassDlgItem(nID, pParent))

return FALSE;

m_fg = FGColor;

m_bg = BGColor;

return TRUE;

}

//重载DrawItem()

void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)

{

CDC* pDC = CDC::FromHandle(lpDIS->hDC);

UINT state = lpDIS->itemState;

CRect focusRect, btnRect;

focusRect.CopyRect(&lpDIS->rcItem); //按纽的选中虚线框

btnRect.CopyRect(&lpDIS->rcItem);

// 设置表示按纽被选中的虚线框

focusRect.left += 4;

focusRect.right -= 4;

focusRect.top += 4;

focusRect.bottom -= 4;

// 按纽标题

const int bufSize = 512;

TCHAR buffer[bufSize];

GetWindowText(buffer, bufSize);

// 绘制并标志按纽

DrawFilledRect(pDC, btnRect, GetBGColor());

DrawFrame(pDC, btnRect);

DrawButtonText(pDC, btnRect, buffer, GetFGColor());

// 如果按纽处于选中状态则在其上绘制选中虚线框

if (state & ODS_FOCUS) {

DrawFocusRect(lpDIS->hDC, (LPRECT)&focusRect);

}

}

void CColorButton::DrawFrame(CDC *DC, CRect R)

{ //绘制按纽,用户通过定制该函数可实现不同形状的按纽。

DrawLine(DC, R.left, R.top, R.right, R.top, RGB(255, 255, 255));

DrawLine(DC, R.left, R.top, R.left, R.bottom, RGB(255, 255, 255));

//以下绘制按纽的外围框线以使按纽有立体感

DrawLine(DC, R.left + 1, R.bottom - 1, R.right, R.bottom - 1, RGB(1, 1, 1));

//绘制按纽左框线和上框线

DrawLine(DC, R.right - 1, R.top + 1, R.right - 1, R.bottom, RGB(1, 1, 1));

//绘制按纽右框线和下框线

}

//用色彩填充按纽框

void CColorButton::DrawFilledRect(CDC *DC, CRect R, COLORREF color)

{

CBrush B;

B.CreateSolidBrush(color);

DC->FillRect(R, &B);

}

// DrawLine用于绘制按纽,其为多态函数

void CColorButton::DrawLine(CDC *DC, CRect EndPoints, COLORREF color)

{

……

}

void CColorButton::DrawLine(CDC *DC, long left, long top, long right, long bottom, COLORREF color)

{

……

}

//绘制按纽文本

void CColorButton::DrawButtonText(CDC *DC, CRect R, const char *Buf, COLORREF TextColor)

{

COLORREF prevColor = DC->SetTextColor(TextColor);

DC->SetBkMode(TRANSPARENT);

DC->DrawText(Buf, strlen(Buf), R, DT_CENTER|DT_VCENTER|DT_SINGLELINE);

DC->SetTextColor(prevColor);

}

第三步:引用定制类

定制任意对话框CColorDlg,在其上画一按键控件。ID为IDOK。

//CColorDlg.h

class CColorDlg : public CDialog

{

…..

// Implementation

protected:

CColorButton m_btnOK;

}

//CColorDlg.cpp

…….

BOOL CColorBtnSampleDlg::OnInitDialog()

{

CDialog::OnInitDialog();

…….

VERIFY(m_btnOK.Attach(IDOK, this, RED, BLUE, YELLOW));

…….

}

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。

上一篇:用Visual C++实现带阴影弹出窗口的技术  下一篇:平台+插件软件设计思想及基于COM的原型实现