hInst=hInstance;这句语句放在UpdateWindow(hwnd)后执行,程序将无法显示位图,这个是为什么

human_cn 2012-03-31 05:23:42
#include<Windows.h>
#include "resource.h"

HINSTANCE hInst;//问题处在这个变量赋值语句,请看下面有注释的地方

LRESULT CALLBACK WindowProc(
__in HWND hwnd,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);

int WINAPI WinMain(
__in HINSTANCE hInstance,
__in HINSTANCE hPrevInstance,
__in LPSTR lpCmdLine,
__in int nCmdShow
)
{
WNDCLASS wndclass;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(0);
wndclass.hCursor=LoadCursor(NULL,IDC_IBEAM);
wndclass.hIcon=LoadIcon(NULL,IDI_ASTERISK);
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WindowProc;
wndclass.lpszClassName="WIN32";
wndclass.lpszMenuName=NULL;
wndclass.style=CS_VREDRAW&CS_HREDRAW;
RegisterClass(&wndclass);

HWND hwnd;

hwnd=CreateWindow("WIN32","WIN32",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
hInst=hInstance;//这句语句放在UpdateWindow(hwnd)后执行,程序将无法显示位图, //////////////////////////hInst=hInstance如果放在UpdateWindow(hwnd)前任意位置执行都可以显示位图,求解!!!


MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;

}

LRESULT CALLBACK WindowProc(
__in HWND hwnd,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
)
{ HDC hdc,hdcmem;
PAINTSTRUCT ps;
HBITMAP hBitmap;
BITMAP bitmap;
switch(uMsg)
{
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
hdcmem=CreateCompatibleDC(NULL);
hBitmap=LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1));//请自己建个位图验证下上面hInst位置问题
GetObject(hBitmap,sizeof(bitmap),&bitmap);
SelectObject(hdcmem,hBitmap);
DeleteObject(hBitmap);
BitBlt(hdc,0,0,bitmap.bmWidth,bitmap.bmHeight,hdcmem,0,0,SRCCOPY);
DeleteDC(hdcmem);
EndPaint(hwnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
...全文
86 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2012-03-31
  • 打赏
  • 举报
回复
因为updatewindow会触发WM_PAINT消息这样就要加载位图,这就意味着hInst需要先初始化

64,682

社区成员

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

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