首页 VC对话框显示图片

VC对话框显示图片

举报
开通vip

VC对话框显示图片VC对话框显示图片 VC中在对话框上显示图片 用图片控件,好像图片最多色彩数不超过256色,也就是8位,但是用代码在里面写的方法就可以解决这个问题了. 让一个对话框显示背景通常有两种做法:使用图片控件、在WM_PAINT消息中画图。 用图片控件非常简单,但功能功能不强大,不能对图片拉申等。 在WM_PAINT中画图,相对复杂,但可以做很多特殊处理(如对图片拉申、图片取反等等)。 那么下面就对两种方法略述。 1、用图片控件 在对话框中加入Picture控件,属性页中General,,Type设为Bitma...

VC对话框显示图片
VC对话框显示图片 VC中在对话框上显示图片 用图片控件,好像图片最多色彩数不超过256色,也就是8位,但是用代码在里面写的方法就可以解决这个问题了. 让一个对话框显示背景通常有两种做法:使用图片控件、在WM_PAINT消息中画图。 用图片控件非常简单,但功能功能不强大,不能对图片拉申等。 在WM_PAINT中画图,相对复杂,但可以做很多特殊处理(如对图片拉申、图片取反等等)。 那么下面就对两种方法略述。 1、用图片控件 在对话框中加入Picture控件,属性页中General,,Type设为Bitmap, Image中选中相关联的图片资源号。 这样就编译运行,你就会发现它己经可以了。 耶,不对,图片复盖了其它控件~怎么办, 哈哈,这是由于你的Picture控件是后面放上去的。这样它会显示在最上层,所以有些控件看不到了。有两种方法可以解决: (1)、选中所有控件Ctrl+A, 然后取消对图片控件的选择,将其它控件剪切Ctrl+X,再粘帖 Ctrl+C,编译运行或Ctrl+T看看,是不是可以了, (2)、在.rc文件中找到此对话框的定义,此处以例子中的一对话框为例。(用记事本打开.rc文件) IDD_DLG_USE_STATIC DIALOGEX 0, 0, 266, 201 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_APPWINDOW CAPTION "DlgUseStatic" FONT 9, "宋体" BEGIN CONTROL 129,IDC_STATIC,"Static",SS_BITMAP,0,0,266,201 PUSHBUTTON "取消",IDCANCEL,210,23,50,14 DEFPUSHBUTTON "确定",IDOK,210,7,50,14 LTEXT "这是个通过图片控件来实现Dialog背景的",IDC_STATIC,13,106,156,8 PUSHBUTTON "方法二,,",IDC_BUTTON1,215,104,50,14 END 在BEGIN至END中便是各个控件的定义和先后顺序,你可以随意调整它们的顺序,这样最先的,它将会显示在最底层(即可能被其它控件覆盖)。 2、在WM_PAINT中画图 这是显示图片最常用的方法,各类窗体、控件要加上背景都基本上是在OnPaint中将图片画上。具体做法如下: CPaintDC dc(this); //从资源中载入图片 , CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP1); //得到图片信息 BITMAP bmpInfo; bmp.GetBitmap(&bmpInfo); //在内存中创建一个位图兼容设备 CDC dcMemory; dcMemory.CreateCompatibleDC(&dc); //将图片选入兼容设备 CBitmap *pOldBmp=dcMemory.SelectObject(&bmp); //将兼容设备的内容copy到屏幕设备中,实现真正的Paint dc.BitBlt(0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 0, 0, SRCCOPY); //将设备还原 dcMemory.SelectObject(pOldBmp) (这时不需要再调用CDialog::OnPaint()所以删除该行) 这样图片便显示在主对话框上。 但是图片不能完全显示,因此可将代码改为 CPaintDC dc(this); //从资源中载入图片 CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); //得到图片信息 BITMAP bmpInfo; bitmap.GetBitmap(&bmpInfo); //在内存中创建一个位图兼容设备 CDC dcMemory; dcMemory.CreateCompatibleDC(&dc); //得到对话框信息 CRect rect; GetWindowRect(&rect); //将图片选入兼容设备 CBitmap *pOldBmp=dcMemory.SelectObject(&bitmap); //将兼容设备的内容拷贝到屏幕设备中,实现真正的Paint dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMemory,0,0,bmpInfo.bmWidth, bmpInfo.bmHeight,SRCCOPY); //还原设备 dc.SelectObject(pOldBmp); 特殊处理: 是不是经常有人提到某些加快图形显示、减少闪烁,处理什么WM_ERASEBKGND消息, 确实是这样,应为每个窗体重画时,它先会发WM_ERASEBKGND消息,让窗体用设置好的刷子将窗体需要重画的区域刷一次,然后才会发送 WM_PAINT消息,将需要的再画上去。这样就可以保证不会有残留的图形。但这样就会在短暂的时间内出现灰色背景,如果执行比较慢,就会让人感觉到。因此如果你确定不需要清除原有的背景,那么你就可以在OnEraseBkgnd中直接返回TRUE,或者直接在这里面绘图。 但一定要注意,不擦除背景时弄不好会带来上些麻烦事,源码中有此演示(由于一开始设置为不擦除背景,所以窗体创建时,没有画图的部分将显示为原来屏幕上的图象)。 /* CBitmap bit; bit.LoadBitmap(IDB_BITMAP1); BITMAP bmp; bit.GetBitmap(&bmp); CDC cdCompatible; cdCompatible.CreateCompatibleDC(&dc); cdCompatible.SelectObject(&bit); CRect Rect; GetClientRect(&Rect); dc.StretchBlt(0,0,Rect.Width(),Rect.Height(),&cdCompatible, 0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);*/ VC在控件上显示图片 在Static控件上画图的方法.. 声明两个变量在view或Dialog的头文件中. CWnd* pWnd; // 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示控件窗口的变量 CDC* pControlDC; //表示控件窗口的设备描述表.DC 在OnInitialUpdate()函数中进行赋值(View) pWnd=GetDlgItem(IDC_STATICRCT); pControlDC=pWnd->GetDC(); 重载OnPaint()函数. 在函数中 void CMy****View::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here pWnd=GetDlgItem(IDC_PAINT_STATIC); pControlDC=pWnd->GetDC(); pWnd->Invalidate(); pWnd->UpdateWindow(); CRect rct; pWnd->GetClientRect(rct); CPen RectPen(PS_DASH,1,0x0000FF); pControlDC->SelectObject(&RectPen); //----------------------------------------------- //-- Draw //----------------------------------------------- pControlDC->Rectangle(rct.left+10,rct.top+10,rct.right-10,rct.bottom-10); pControlDC->MoveTo(0,0); pControlDC->LineTo(0,100); pControlDC->LineTo(100,100); pControlDC->LineTo(100,0); pControlDC->LineTo(0,0); RectPen.DeleteObject(); pWnd->ReleaseDC(pControlDC); } 这里有一个技巧应该注意,即在控件窗口内绘图的同时,还要防止Windows对它重复绘制.依次调用Invalidate/UpdateWindow,便可以完成这项工作. 看看VCc的技术内幕,上面有这个例子.
本文档为【VC对话框显示图片】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_554469
暂无简介~
格式:doc
大小:20KB
软件:Word
页数:0
分类:互联网
上传时间:2017-09-01
浏览量:14