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);
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-04
您好:
我觉得应该这样 ,把你需要的位图作为背景画刷
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;
}本回答被提问者采纳
第2个回答  2019-02-04
你建了一个基本对话框,然后已经有了一确定按钮,接下来双击这个确定按钮添加一个消息响应函数,单你点击这个按钮时就会调用这个函数
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();
//
弹出新建对话框
}
点击确定按钮就马上会弹出你刚才新建的对话框,整个过程就是这样了。
希望能帮到你。
第3个回答  推荐于2017-09-05
  参考思路:
  1、直接用图像控件是可以导入位图bitmap的;
  2、将Picture控件的属性做两点设定;
  (1).type设为bitmap;
  (2).Real Size Image设为true;
  3、然后,导入位图即可。
第4个回答  2008-08-20
Picture Control的属性里面有个(TYPE)类型,默认是Frame,你把他改成Bitmap,然后上面那个IMAGE属性栏就可以选择了,你在里面选择你所导入的bitmap图片,就显示出来了
---------------------------------------------------------------
至于你的补充问题,你把图片控件和你所放的按钮控件的属性有一项Transparent都设置为TRUE就可以重叠显示了,不用Picture Box
相似回答