如何给对话框加载图片背景,使得窗口大小改变时,上面的控件任存在 如何给对话框加载图片背景,使得窗口大小改变时,上面的控件任存在?试了下,总是达不到效果 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 加在一个STATIC控件或者用BitBlt的方法画位图。 本帖最后由 xianglitian 于 2010-05-06 21:05:49 编辑 我想达到两个目的:1.将ID为IDB_BITMAP1的BMP格式的图片作为对话框的背景,但是可以随着对话框的大小改变而改变,也就是具有伸缩的功能,总能显示全图2.不影响对话框上的其他控件。现在问题就是,1和2都不满足。 把你上面的代码复制到OnSize里就OK,结把 我用你的代码测试了一下你在OnSize里加一句Invalidate试试 1、添加背景图片到“Bitmap”资源里。方法为“插入——资源”,如果还没有Bitmap,则新建一个Bitmap,否则选择资源 类型为“Bitmap”后“引入”想要插入的背景图片,我加入的背景图片如图1,加入过程如图2。2、定位到 void CXXXDlg::OnPaint(),在if()...else()中的else()下添加如下代码: else { //CDialog::OnPaint();//要禁止这个调用 CPaintDC dc(this); CRect rect; GetClientRect(&rect); CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP); //IDB_BITMAP是你自己的图对应的ID ,由于我刚刚加入的位图资源 //被我命名成了IDB_Bg,因而我这句就是bmpBackground.LoadBitmap(IDB_Bg); BITMAP bitmap; bmpBackground.GetBitmap(&bitmap); CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground); dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bitmap.bmWidth,bitmap.bmHeight,SRCCOPY); } 刷新问题,在Invalidate一下应该可以的, 还是不行,Invalidate(TURE)频闪;Invalidate(FALSE)上面的控件一闪而过。 Invalidate(FALSE)上面的控件一闪而过,而且上面的控件在更新时也不见了 哈哈,好了,搞定了。使用8楼的代码,不过,要将rect添加为成员变量,GetClientRect(&rect)放在OnSize()里面,并添加一条语句:InvalidateRect(&rect);这样的话,图片背景既能跟随对话框的大小变化而变化,又产生闪烁的问题,而且控件也一直存在。谢谢xianglitian同志。 如何让Messagebox定时弹出2秒后关闭? API程序客户区问题 如何在ATL做的控件中调用非MFC的DLL动态链接库 (50分)请教 CFileFind 的问题,搞了一天也没搞定 绘画大图问题 问一个弱弱的,关于CEdit控件的使用。。 大伙说说sendto、ping、sendarp 一个头疼的小问题,回答的让我理解一定高分。因为我一直很头疼这个。只要你不让我失望,我一定不会让你失望的。 ***面向对象思想在实际中的应用:我想从多继承的派生类中截取一个基类却失败了!(在线等待) 当在任务栏(不是托盘)鼠标点击一个程序的图标的时候,在vc中,响应的是那个事件或者消息? 为什么不让应用程序在抓到消息(通过GetMessage())之后,直接调用窗口函数处理消息呢? 请大神解释下这两个list容器函数的意思
1.将ID为IDB_BITMAP1的BMP格式的图片作为对话框的背景,
但是可以随着对话框的大小改变而改变,也就是具有伸缩的功能,总能显示全图
2.不影响对话框上的其他控件。
现在问题就是,1和2都不满足。
你在OnSize里加一句Invalidate试试
类型为“Bitmap”后“引入”想要插入的背景图片,我加入的背景图片如图1,加入过程如图2。2、定位到 void CXXXDlg::OnPaint(),在if()...else()中的else()下添加如下代码:
else
{
//CDialog::OnPaint();//要禁止这个调用
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP); //IDB_BITMAP是你自己的图对应的ID ,由于我刚刚加入的位图资源
//被我命名成了IDB_Bg,因而我这句就是bmpBackground.LoadBitmap(IDB_Bg);
BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,
bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
}
Invalidate(FALSE)上面的控件一闪而过。
使用8楼的代码,不过,要将rect添加为成员变量,GetClientRect(&rect)放在OnSize()里面,并添加一条语句:InvalidateRect(&rect);这样的话,图片背景既能跟随对话框的大小变化而变化,又产生闪烁的问题,而且控件也一直存在。
谢谢xianglitian同志。