背景图的设定
第一种 (平铺)
将代码加入在BOOL CXXXDlg::OnInitDialog()中
CDialogEx::SetBackgroundColor(RGB(155,170,190)); 纯色背景
// CDialogEx::SetBackgroundImage(IDB_BITMAP5); 图片背景
第二种 (拉伸填充)
在 void CXXXDlg::OnPaint()函数中加入代码
void CjiafaDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//加载位图
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP5);
//选入DC
CClientDC cdc(this);
CDC comdc;
comdc.CreateCompatibleDC(&cdc);
comdc.SelectObject(&bitmap);
//生成BITMAP
BITMAP bit;
bitmap.GetBitmap(&bit);
//客户区域
CRect rect;
GetClientRect(rect);
//用客户区的DC绘制所生成的BITMAP,并适应为窗口大小
cdc.StretchBlt(0,0,rect.Width(),rect.Height(),&comdc,0,0,bit.bmWidth,bit.bmHeight,SRCCOPY);
CDialogEx::OnPaint();
}
}
但是加入背景图会导致静态文本时重叠现象(例:建立一个静态框,实时显示时间时)
所以需要将控件局部刷新,在Ontimer中加入“刷新函数”
//控件的局部刷新,避免重叠 “刷新函数”
void CjiafaDlg::RefreshControl(UINT uCtlID) //控件的ID 例如:RefreshControl(IDC_DATE);
{
CRect rc;
GetDlgItem(uCtlID)->GetWindowRect(&rc);
ScreenToClient(&rc);
InvalidateRect(rc);
}
注意
经过测试,第二种拉伸填充时,用“刷新函数”会有问题,导致有些静态文本框无法正常显示,但是背景为纯色时正常
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)