MFC的一个对话框中怎样设置背景为一个图片

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC的一个对话框中怎样设置背景为一个图片相关的知识,希望对你有一定的参考价值。

我在对话框中放了一个Picture Control,想把一个位图作为对话框背景,
在OnInitDialog()函数中写入这样的代码:
... ...
// 添加背景位图
((CStatic*)GetDlgItem(IDC_PICTURE))->SetBitmap(HBITMAP(m_bgBitmap));
运行结果没有出现那个位图,什么原因呢?
(m_bgBitmap为Dlg类成员变量,在类构造函数中就用m_bgBitmap.LoadBitmapA(IDB_BG_BITMAP);初始化了)
我能不能把一个位图放到Picture Box中,然后再把其他按钮之类控件放到它上边这样显示呢?

在MFC中给对话框中设置背景图片,方法有多种,这里整理了三种,具体操作如下:

方法一:
1、声明成员变量CBrush m_brush;
2、在InitDialog中添加代码:
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加
m_brush.CreatePatternBrush(&bmp);
3、重载对话框的OnCtlColor,改最后的返回值:
return (HBRUSH)m_brush;

方法二:
把下面这段代码加进OnPaint()里就行了
CPaintDC dc(this);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1); //这个IDB_BITMAP1要自己添加
CBrush brush;
brush.CreatePatternBrush(&bitmap);
CBrush* pOldBrush = dc.SelectObject(&brush);
dc.Rectangle(0,0,200,200); // 这些参数可以调整图片添加位置和大小
dc.SelectObject(pOldBrush);

方法三:使用StretchBlt()函数,具有图像自适应窗体功能
CPaintDC dc(this);
CBitmap m_bmpBK;
m_bmpBK.LoadBitmap(IDB_BITMAP1);
CRect rect;
GetClientRect(&rect);//获得目标尺寸,即窗口客户区的坐标
BITMAP bitMap;//位图结构体
m_bmpBK.GetBitmap(&bitMap);//获得原图片尺寸
CDC dcMem; //目标DC
dcMem.CreateCompatibleDC(&dc); //创建与dc兼容的内存DC
dcMem.SelectObject(&m_bmpBK);//将位图对象m_bmpBK选入内存DC
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);
参考技术A 您好:
我觉得应该这样 ,把你需要的位图作为背景画刷
TestDlg.h中
CBrush m_brBk;//在public中定义

TestDlg.cpp中
在初始化函数OnInitDialog()中加入:
BOOL CTestDlg::OnInitDialog()

CDialog::OnInitDialog();
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP2);
m_brBk.CreatePatternBrush(&bmp);
bmp.DeleteObject();
return TRUE; // return TRUE unless you set the focus to a control


在打开类向导,找到WM_CTLCOLOR消息,重载得对应函数OnCtlColor(),添加如下:
HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

if (pWnd == this)

return m_brBk;

return hbr;
本回答被提问者采纳
参考技术B 你建了一个基本对话框,然后已经有了一确定按钮,接下来双击这个确定按钮添加一个消息响应函数,单你点击这个按钮时就会调用这个函数
void
cxxxxdlg::onok()

//
todo:
add
extra
validation
here

第二步:你选择insert菜单
里的resour
选项-->
dialog
-->
new
就新建一个对话框,然后双击该对话框会提示你为这个对话框创建一个类,你输入类名就可以了,这样一个新的对话框类(例如:cmynewdlg)就新建完成。
第三步:在你刚才添加确定按钮消息函数的.cpp文件中包含刚才新建类的头文件(例如#include
"mynewdlg.h")
,在onok函数中添加如下代码
void
cxxxxdlg::onok()

//
todo:
add
extra
validation
here
cmynewdlg
dlg;
//
对话框类对象
dlg.domodal();
//
弹出新建对话框

点击确定按钮就马上会弹出你刚才新建的对话框,整个过程就是这样了。
希望能帮到你。
参考技术C   参考思路:
  1、直接用图像控件是可以导入位图bitmap的;
  2、将Picture控件的属性做两点设定;
  (1).type设为bitmap;
  (2).Real Size Image设为true;
  3、然后,导入位图即可。
参考技术D Picture Control的属性里面有个(TYPE)类型,默认是Frame,你把他改成Bitmap,然后上面那个IMAGE属性栏就可以选择了,你在里面选择你所导入的bitmap图片,就显示出来了
---------------------------------------------------------------
至于你的补充问题,你把图片控件和你所放的按钮控件的属性有一项Transparent都设置为TRUE就可以重叠显示了,不用Picture Box

mfc中如何设置编辑框\按钮的外观

因为设置了背景图片,默认的外观很不协调。如何将编辑框\按钮等控件的外观也改变?

建议重写按钮和编辑框类,重写绘制函数就好了。这样按钮和编辑框的外观就都由自己来绘制了。有背景的话,还可以把编辑框弄成透明的。 参考技术A 自绘编辑框或者按扭!还有种方法就是重载对话框的OnCtrlColor函数,里面判断type是编辑框,就自己绘下!

以上是关于MFC的一个对话框中怎样设置背景为一个图片的主要内容,如果未能解决你的问题,请参考以下文章

vc中如何让背景图片随窗体的大小变化而改变 mfc

MFC如何设置对话框静态文字背景以及文字颜色

MFC中,对话框的背景如何更换?

如何给MFC对话框设置背景图片

想用MFC做个界面,但不知道如何在MFC对话框中插入背景图片,把这图片用于登录界面的背景

MFC给对话框设置统一风格背景图,wince 6.0应用程序