1、 添加选择Bitmap导入图片,图片文件最好放在项目res目录中,同时是BMP格式。上传后的图片在资源视图,命名为IDB_BITMAP_M_BACK。
2、在cpp的C***Dlg::OnPaint()函数下添加如下代码
void C***Dlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
//获取控件在对话框上的位置,*IDC_STATIC_ENERGY_S为需添加背景图片的控件*
CRect rect;
GetDlgItem(IDC_STATIC_ENERGY_S)->GetWindowRect(&rect);//获取控件的屏幕坐标
ScreenToClient(&rect); //转换为对话框上的客户坐标
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP_M_BACK); //加载位图
BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap); //生成BITMAP
CDC dcMem;
dcMem.CreateCompatibleDC(&dc); //选入DC
CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
//用客户区的DC绘制所生成的BITMAP,并适应为窗口大小
dc.StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
// 不为绘图消息调用 CDialogEx::OnPaint()
}
如果是主程序的cpp文件中已有OnPaint函数,则修改else部分代码:文章来源:https://www.toymoban.com/news/detail-657651.html
void C***Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
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;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
// CDialogEx::OnPaint(); //注释该语句:防止重复调用重画函数
***在这里添加上面那段代码***
}
}
运行效果:
文章来源地址https://www.toymoban.com/news/detail-657651.html
到了这里,关于MFC为控件添加背景图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!