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