[求助]在WM_PAINT位图怎么也显示不了!附代码
从节前到现在卡在这个问题上都有15天了,买了好几本书,看了很多网页,居然还没有搞定,真是服了自己的气,完全没有办法了(靠自己摸),现在求师傅们帮帮我......谢谢了!目 标:想在窗口过程回调函数里的WM_PAINT中显示一张位图。(想以后学习游戏编程,所以不用MFC)
准备工作:A 资源准备:由VC生成.RC文件 里面有 IDB_BITMAP1 BITMAP DISCARDABLE "tanke.bmp" //(一张坦克的图片 600*400大小)
resource.h头文件 里面有 #define IDB_BITMAP1 111 //(下面还有一些#ifdef、#ifndef、#define是VC生成的)
图片在项目文件夹根目录下 。
B GDI+准备:做好了VC6的include以及lib目录添加,并在工程中连接了GdiPlus.lib
做了有关GDI+的头文件,里面写了#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#endif
#include "gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")这是核对了网上与书中的内容后照抄的
WinMain()所在的程序中include了这个头文件,然后在程序中做了GDI+的初始化,这样写的:
ULONG_PTR gdi_Opject; //GDI对象
GdiplusStartupInput gdiplusStartupInput; //用于初始化的GDI对象
GdiplusStartup(&gdi_Opject, &gdiplusStartupInput, NULL); //初始化GDI+,这一句我写在了WinMain()里
C 窗口准备:已经可以显示一个窗口了,在WindowProc()加了WM_KEYDOWN消息,可以按ESC退出。
准备工作做完了,下面在在WindowProc()里加了WM_PAINT事件的代码,编译和连接没有出错误,显示了窗口,就是没有图片。
下面是WindowProc()里的全部代码:(其中qd_hInstance是程序句柄,qd_hwnd是窗口句柄。因为我的程序名是qd,所以这样命名)
LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam )
{
HBITMAP qd_bmp=(HBITMAP)LoadImage(qd_hInstance,MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
BITMAP bm;
::GetObject( qd_bmp, sizeof( bm ), &bm );
int bmWidth = bm.bmWidth;
int bmHeight =bm.bmHeight;
HDC hdc=GetDC(qd_hwnd);
HDC QDdc=CreateCompatibleDC(GetDC(qd_hwnd));
SelectObject(QDdc,&qd_bmp);
PAINTSTRUCT ps;
RECT rect; //以上这些声明在WM_PAINT之外,是怕由BeginPaint()产生多余的重复声明,不知道应不应该这样做。
switch (uMsg)
{
case WM_PAINT:
{
hdc = BeginPaint(qd_hwnd,&ps);
GetClientRect(qd_hwnd,&rect);
BitBlt(hdc,0,0,bmWidth,bmHeight,QDdc,0,0,SRCCOPY);
EndPaint (qd_hwnd, &ps);
return 0;
}
break;
case WM_KEYDOWN: //按ESC键退出窗口
if(wParam == VK_ESCAPE)
{
PostMessage(hwnd, WM_CLOSE, 0, 0);
PostQuitMessage(0);
DeleteObject(qd_bmp); //删除位图 ***********************
ReleaseDC(qd_hwnd,hdc); //释放设备上下文 *
DeleteDC(QDdc); //删除内存设备上下文 *
GdiplusShutdown(gdi_Opject); //销毁GDI+ *
} //我想,应该是在窗口退出的时候释放这些,所以这样做了*****
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
结果:编译和连接没有错误,有窗口,没有显示图片。耽误师傅们的宝贵时间,帮我看一下,谢谢、谢谢!