为什么我写的代码显示不了图片?

k77897789 2011-06-10 04:09:11
代码如下:
#include "stdafx.h"
#include "resource.h"
#define MAXN 100
HINSTANCE hInstance;
MSG msg;
char lpszClassName[]="linkgame";
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
void OnLBUTTONDOWN(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
void OnPaint(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
int arrGame[MAXN][MAXN];
HBITMAP hBm;
HDC hdcBm;
BITMAP Bm;
class CFrameWnd
{
public:
HWND hWnd;
public:
int RegisterWindow();
void Create(LPCTSTR lpClassName,LPCTSTR lpWindowName);
void ShowWindow(int nCmdShow);
void UpdateWindow();
};
int CFrameWnd::RegisterWindow()
{
WNDCLASS wc;
wc.style=CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc=WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName=NULL;
wc.lpszClassName=lpszClassName;
return RegisterClass(&wc);
}
void CFrameWnd::Create(LPCTSTR lpClassName, LPCTSTR lpWindowName)
{
RegisterWindow();
hWnd=CreateWindow(lpszClassName,
lpWindowName,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
}
void CFrameWnd::ShowWindow(int nCmdShow)
{
::ShowWindow(hWnd,nCmdShow);
}
void CFrameWnd::UpdateWindow()
{
::UpdateWindow(hWnd);
}
class CWinApp
{
public:
CWinApp *m_pCurWinApp;
public:
CWinApp();
~CWinApp();
public:
CFrameWnd *m_pMainWnd;
public:
virtual bool InitInstance(int nCmdShow);
int Run();
};
CWinApp::CWinApp()
{
m_pCurWinApp=this;
}
bool CWinApp::InitInstance(int nCmdShow)
{
m_pMainWnd=new CFrameWnd;
m_pMainWnd->Create(NULL,"连连看");
m_pMainWnd->ShowWindow(nCmdShow);
m_pMainWnd->UpdateWindow();
return true;
}
int CWinApp::Run()
{
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
CWinApp::~CWinApp()
{
delete m_pMainWnd;
}
CWinApp MyApp;
CWinApp *AfxGetApp()
{
return MyApp.m_pCurWinApp;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
int ResultCode=-1;
CWinApp *pApp;
pApp=AfxGetApp();
pApp->InitInstance(nCmdShow);
return ResultCode=pApp->Run();
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch(message)
{
case WM_CREATE:
hdc = GetDC(hWnd);
hBm = LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_BITMAP1));
hdcBm = CreateCompatibleDC(hdc);
SelectObject(hdcBm,hBm);
GetObject(hBm,sizeof(BITMAP),&Bm);
ReleaseDC(hWnd,hdc);
break;
case WM_LBUTTONDOWN:
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
BitBlt(hdc,0,0,Bm.bmWidth,Bm.bmHeight,hdcBm,0,0,SRCCOPY);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}
...全文
189 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
k77897789 2011-06-10
  • 打赏
  • 举报
回复
能不能给我修改后的程序啊。。
雁子依然 2011-06-10
  • 打赏
  • 举报
回复
我的理解是这样的,不知道对不对:
hdcBm = CreateCompatibleDC(hdc);
创建兼容DC的时候,hdcBm是和这个hdc兼容的,但是WM_CREATE消息处理完了之后,这个hdc已经被releaseDC释放了,在WM_PAINT处理代码里面的hdc跟上面创建的hdcBm不兼容

你可以试试在WM_PAINT消息处理期间完成包括创建兼容DC的所有的工作

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧