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中,然后再把其他按钮之类控件放到它上边这样显示呢?
方法一:
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的一个对话框中怎样设置背景为一个图片的主要内容,如果未能解决你的问题,请参考以下文章