首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎样在一个Dlg中显示一个BMP图象啊的头发白!该怎么解决

2012-05-11 
怎样在一个Dlg中显示一个BMP图象啊?急的头发白!我需要在一个子窗口中显示指定路径下的BMP图象,网上资料不

怎样在一个Dlg中显示一个BMP图象啊?急的头发白!
我需要在一个子窗口中显示指定路径下的BMP图象,网上资料不少,可我试了个遍也没实现- -\

比如:
通过位图所在路径显示位图(此方法无需事先将位图文件添加为该工程的资源)

  准备工作:在对话框上放一个静态控件(一定是静态控件,若图片控件则无法显示) 将其重命名为IDC_BMP(不重命名的话无法添加变量),然后再为该控件添加一个变量,命名为m_image.

  具体代码:在需要使用的地方(如按钮函数或OnInitDialog()或OnPaint()里等等)加入如下代码:

  this->m_image.ModifyStyle(0,SS_BITMAP | SS_CENTERIMAGE); //和上面的作用一样,将该静态控件设置为是用来显示位图的,只不过这里是通

  //过该静态对话框的变量来进行modifystyle操作的

   
  HBITMAP hBmp = (HBITMAP)::LoadImage(0, "path\\1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); //从bmp文件所在的路径直接读取该bmp图象的句柄,并将其转换为HBITMAP类型

  //注:其中的"path\\1.bmp"是相对路径,即在和可执行文件的同一目录

  //下有一个名为path的文件夹,里面有一个名为1.bmp的位图文件. 
  this->m_image.SetBitmap(hBmp); //通过变量m_image来设置该静态框所显示的位图文件.



我是在子窗口的类中,添加了一个Static Text,然后按上面方法来做的,可就是没有图象显示,LoadImage可以获得位图句柄

[解决办法]
方法1:在放置static控件的时候就修改type为bitmap,然后LoadImage SetBitmap
方法2:代码同你的一样,只是ModifyStyle语句改为ModifyStyle(0,SS_BITMAP );
[解决办法]
m_image.ModifyStyle(0,SS_BITMAP | SS_CENTERIMAGE);
HBITMAP hBmp = (HBITMAP)::LoadImage(0, "path\\1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
m_image.SetBitmap(hBmp); 
放在OnInitDialog里实现,是完全可以的(楼主可单独做个小程序测试)!//确保路径图片存在。
且图片静态框,没被其它控件遮挡!!(估计楼主是使用了面板,把静态框给遮住了
[解决办法]
在onpaint里面画

C/C++ code
CPaintDC dc(this); // device context for painting    bitmap.LoadBitmapW(ID);//bmp 资源id    CDC picDC;        picDC.CreateCompatibleDC (&dc);        CBitmap *pOldBmp;    pOldBmp = picDC.SelectObject (&bitmap);        BITMAP bm;    bitmap.GetBitmap(&bm);             dc.BitBlt (x,y,bm.bmWidth ,bm.bmHeight,&picDC,0,0,SRCCOPY);    dc.SelectObject(pOldBmp)
[解决办法]
探讨
w29468哥你说的OnPaint方法能详细点吗?
将图片用GDI+加载进来,OnPaint时直接绘制怎么做?

Ifs09给的代码是实现静态Bmp图象显示的,我要得是动态的,也就是说Bmp可选择

按我最开始的方法,照liuchaotao说的修改后可以显示了,但有个新的问题,就是图片大小比静态框大时,整个对话框就被填充满了,
而且真彩图象(24位位图)显示有问题,被缩小了好多.而256色正常

[解决办法]
探讨
先感谢lfs09的顶帖,我说的动态就是Bmp图象是以路径方式读入的,而你说的是作为资源添加好的.
感觉应该用这个
HBITMAP hBmp = (HBITMAP)::LoadImage(0, "path\\1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

[解决办法]
贴一个我准备封装所有加载资源的类,刚开始仅做了用路径名加载位图的,刚好和您的相符。
C/C++ code
.h文件#pragma once#include "Afxwin.h"class LoadRes{public:    LoadRes();//构造函数    ~LoadRes();//析构函数    BOOL LoadBmpByName(const TCHAR* szBmpName);public:    HBITMAP   hBitmap;    DWORD    dwErrorCode;}; 

热点排行