博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC为控件添加背景
阅读量:5064 次
发布时间:2019-06-12

本文共 3186 字,大约阅读时间需要 10 分钟。

为对话框添加背景图片

1.将要添加的图片经PS或画图工具,另存为位图(bmp),并在MFC中引入该BITMAP资源,ID为IDB_BITMAP1;

2.在该Dialog的OnPaint()函数中,添加如下代码:

  CPaintDC dc(this);

  CRect rect;
  GetClientRect(&rect);
  CDC dcMem;
  dcMem.CreateCompatibleDC(&dc);
  CBitmap bmpBackground;
  bmpBackground.LoadBitmap(IDB_BITMAP1);
  BITMAP bitmap;
  bmpBackground.GetBitmap(&bitmap);
  CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
  dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);

//若该对话框为主框,则在OnPaint()函数中if...else...语句中的else中添加以上代码;

 

为控件设置背景颜色

1.为控件所在对话框的类添加CBrush类型的变量,例如m_Brush;

   在该对话框的构造函数中,创建一个画刷,例如:

CDeleteFace::CDeleteFace(CWnd* pParent )

 : CDialog(CDeleteFace::IDD, pParent)
{
 //{
{AFX_DATA_INIT(CDeleteFace)
 m_edit1 = _T("");
 //}}AFX_DATA_INIT
 m_brush.CreateSolidBrush(RGB(200,230,190));
}

为该对话框添加OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 函数:

在OnCtlColor中添加如下代码:

if (pWnd->GetDlgCtrlID()==IDC_EDIT1||pWnd->GetDlgCtrlID()==IDC_STATIC)

 {
  pDC->SetBkMode(TRANSPARENT);
  return m_brush;
 }

Begin---重载 OnCtrlColor.

HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
 if(nCtlColor == CTLCOLOR_DLG || nCtlColor == CTLCOLOR_STATIC)
 {
  //pDC->SetTextColor(RGB(0,0,255));//字体色
  pDC->SetBkColor(RGB(210,230,211));//字体背景色******
  HBRUSH B = CreateSolidBrush(RGB(210,230,211)); //背景色
  return B;
 }
 if(nCtlColor == CTLCOLOR_EDIT)
 {
  pDC->SetTextColor(RGB(0,0,255));//字体色
 }

 return hbr;

}

即可完成对控件的颜色设置!

End-----

2.上述方法对Button控件不适用;可用以下方法为Button控件设置背景:

(1).先将Button的Styles设置为owner draw,再在OnInitDialog中加入代码:

((CBitmapButton *)GetDlgItem(IDC_BUTTON1))->LoadBitmaps(IDB_BITMAP)

(2).为工程添加类CSXBtn,基类为CButton,为CSXBtn添加虚函数DrawItem(),完成对Button控件背景、字体颜色的设置;

代码如下:

void CSXBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

{
 UINT uStyle = BS_DEFPUSHBUTTON ;//DFCS_BUTTONPUSH;
 
 // This code only works with buttons.
 ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);
 
 // If drawing selected, add the pushed style to DrawFrameControl.
 if (lpDrawItemStruct->itemState & ODS_SELECTED)
  uStyle |= DFCS_PUSHED;
 
 // Draw the button frame.
 ::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem,
  DFC_BUTTON, uStyle);
 
 CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
 
 // Get the button's text.
 CString strText;
 GetWindowText(strText);
 
 // Draw the button text using the text color red.
 CBrush B;
 CRect rect;
 CRect focusRect;
 focusRect.CopyRect(&lpDrawItemStruct->rcItem);
 DrawFocusRect(lpDrawItemStruct->hDC, (LPRECT)&focusRect);
 focusRect.left += 4;
 focusRect.right -= 4;
 focusRect.top += 4;
 focusRect.bottom -= 4;
 
 rect.CopyRect(&lpDrawItemStruct->rcItem);
 pDC->Draw3dRect(rect, ::GetSysColor(COLOR_BTNSHADOW), ::GetSysColor(COLOR_BTNHILIGHT));
 B.CreateSolidBrush(RGB(200,230,190));
 ::FillRect(lpDrawItemStruct->hDC,&rect, (HBRUSH)B.m_hObject);
 ::SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT);
 COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(0,0,0));
 ::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),
  &lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
 ::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
}

将Button控件属性中“所有者绘制”选中,并为控件添加变量,变量类型为CSXBtn;即可!

 

转载于:https://www.cnblogs.com/jzxx/archive/2012/09/07/2674760.html

你可能感兴趣的文章
Kubernetes 运维学习笔记
查看>>
spring security 11种过滤器介绍
查看>>
代码实现导航栏分割线
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
【AS3代码】播放FLV视频流的三步骤!
查看>>
枚举的使用
查看>>
luogu4849 寻找宝藏 (cdq分治+dp)
查看>>
日志框架--(一)基础篇
查看>>
关于源程序到可运行程序的过程
查看>>
转载:mysql数据库密码忘记找回方法
查看>>
scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
查看>>
【贪心+DFS】D. Field expansion
查看>>
C# Async与Await的使用
查看>>
Mysql性能调优
查看>>
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>
自定义tabbar(纯代码)
查看>>
小程序底部导航栏
查看>>
ibatis学习笔记
查看>>
18-ES6(1)
查看>>
poj1611 简单并查集
查看>>