加载位图程序哪里错了,编译通过,就是不显示,拜托各位了!!! 本帖最后由 xianglitian 于 2012-04-18 09:52:41 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 WinSunProc中很多参数没有声明就引用了,当然了既然没有编译错误,估计是你漏写了hdcmem hdc…… 调试一下hBm=LoadBitmap(hInstance,"forest"); //加载位图看看这里是否能够成功加载是不是应该带上扩展名 hBm=LoadBitmap(hInstance,"forest"); 用绝对路径加上全文件名试试 LoadBitmap(hInstance,"forest"); 应该是这里错了,看看返回值是什么 百科上这样说的:“返回值:如果函数执行成功,则返回值是指向指定位图的句柄。如果函数执行失败,那么返回值是NULL。”具体怎么写呢??? if(hBm==NULL){ AfxMessageBox("error");} HANDLE hHand = ::LoadImage((HINSTANCE)GetSafeHwnd(), "forest.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE); hBm = (HBITMAP)hHand;GetObject(hBm,sizeof(BITMAP),(LPVOID)&bm);//获取位图尺寸或者这么写试试 case WM_CREATE: hdc=GetDC(hwnd); //获取设备环境 hdcmem=CreateCompatibleDC(hdc); //获取内存设备环境 ReleaseDC(hwnd,hdc); //释放设备环境感觉是这点错了,你创建窗口的时候创建DC,然后紧接着释放了。然后绘制的时候又在使用这个hdc绘制。 BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);把你在case WM_CREATE的语句放到WM_PAINT开始hdc=GetDC(hwnd); //获取设备环境hdcmem=CreateCompatibleDC(hdc); //获取内存设备环境 绘制完之后再ReleaseDC(hwnd,hdc); 试一下。不知道对不对? 确实是加载失败,反加值为NULL,怎么解决呢? 用的是API,初学者 不会用MFC (HINSTANCE)GetSafeHwnd()换成hInstance 不好意思我看错了,没有看见hdc=BeginPaint(hwnd,&ps)这一句。这点应该是没有错误的 以下我按照你说的修改的还是不可以!!!!:HANDLE hHand = ::LoadImage(hInstance, "IDB_BITMAP1", IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE); hBm = (HBITMAP)hHand; //hBm=LoadBitmap(hInstance,"IDB_BITMAP1"); //加载位图 if(hBm==NULL) { MessageBox(hwnd,"位图加载失败","错误",MB_OK); } GetObject(hBm,sizeof(BITMAP),(LPVOID)&bm);//获取位图尺寸 HANDLE hHand = ::LoadImage(hInstance, "forest.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE); http://img.my.csdn.net/uploads/201204/18/1334737604_6781.png 我是通过右击资源文件,引入的,图片默认放在了工程文件夹下。上面图片地址,文件名:forest.bmp 如果不在资源中,在文件中要加LR_LOADFROMFILE 这是资源文件 部分内容///////////////////////////////////////////////////////////////////////////////// Bitmap//forest BITMAP DISCARDABLE "forest.bmp"IDB_BITMAP5 BITMAP DISCARDABLE "bitmap5.bmp"#endif // Chinese (中国) resources///////////////////////////////////////////////////////////////////////////// HBITMAP hBitmap=(HBITMAP)LoadImage(0,"res\\thinning.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); HBITMAP hbmp=(HBITMAP)LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0,0); 我添加资源试了一下你的代码没有问题应该是你资源的问题我这面脚本是这样的///////////////////////////////////////////////////////////////////////////////// Bitmap//forest BITMAP "test.bmp" 寻求方案 急求fltk高手解答 关于多边形填充的问题 请教,为什么向excel中输出的数组都是同一个值? 窗体显示问题? 一个关于序列化Serialize函数的小问题 为什么客户程序关掉重新打开就接受不到了 如何判断数据库中有无某个表,使用ado,急,高分奉送! 不明白,帮帮我! A和B两个程序,能通过PostMessage或SendMessage传送自定义的结构吗?如果能,怎么写呢? VS2008自动生成的CPropertiesWnd中,我初始化一些参数,可是却写不进去,显示空白,大家都是怎么处理的? IIS,C#服务器端向MFC的客户端的程序推送数据。
hdcmem hdc……
hBm=LoadBitmap(hInstance,"forest"); //加载位图
看看这里是否能够成功加载
是不是应该带上扩展名
用绝对路径加上全文件名试试
{
AfxMessageBox("error");
}
hBm = (HBITMAP)hHand;
GetObject(hBm,sizeof(BITMAP),(LPVOID)&bm);//获取位图尺寸或者这么写试试
hdc=GetDC(hwnd); //获取设备环境
hdcmem=CreateCompatibleDC(hdc); //获取内存设备环境
ReleaseDC(hwnd,hdc); //释放设备环境
感觉是这点错了,你创建窗口的时候创建DC,然后紧接着释放了。然后绘制的时候又在使用这个hdc绘制。
BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);把你在case WM_CREATE的语句放到WM_PAINT开始
hdc=GetDC(hwnd); //获取设备环境
hdcmem=CreateCompatibleDC(hdc); //获取内存设备环境 绘制完之后再ReleaseDC(hwnd,hdc); 试一下。不知道对不对?
不好意思我看错了,没有看见hdc=BeginPaint(hwnd,&ps)这一句。这点应该是没有错误的
以下我按照你说的修改的还是不可以!!!!:
HANDLE hHand = ::LoadImage(hInstance, "IDB_BITMAP1", IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE);
hBm = (HBITMAP)hHand; //hBm=LoadBitmap(hInstance,"IDB_BITMAP1"); //加载位图
if(hBm==NULL)
{
MessageBox(hwnd,"位图加载失败","错误",MB_OK);
}
GetObject(hBm,sizeof(BITMAP),(LPVOID)&bm);//获取位图尺寸
LR_LOADFROMFILE
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//forest BITMAP DISCARDABLE "forest.bmp"
IDB_BITMAP5 BITMAP DISCARDABLE "bitmap5.bmp"
#endif // Chinese (中国) resources
/////////////////////////////////////////////////////////////////////////////
你的代码没有问题
应该是你资源的问题
我这面脚本是这样的
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//forest BITMAP "test.bmp"