【发布时间】:2015-06-19 09:07:22
【问题描述】:
我有一个使用 Win32 的窗口,并且在消息处理程序中我有一个 WM_PAINT 案例,以便在窗口中绘制位图。但是在运行时未绘制位图,是否有我遗漏的东西?我需要手动发送 WM_PAINT 消息吗?
这是我的代码:http://pastebin.com/bi48LB0U
这是 WM_PAINT 案例:
case WM_PAINT:
hDC = BeginPaint(hwnd, &ps);
bmp = LoadBitmap(hInst, L"C:\\example.bmp");
memDCExercising = CreateCompatibleDC(hDC);
SelectObject(memDCExercising, bmp);
BitBlt(hDC, 100, 100, 500, 500, memDCExercising, 0, 0, SRCCOPY);
DeleteDC(memDCExercising);
DeleteObject(bmp);
EndPaint(hwnd, &ps);
break;
【问题讨论】:
-
assert(bmp != NULL); -
注定失败,LoadBitmap() 取的是资源ID,而不是路径名。你需要 LoadImage() 代替。是的,请始终检查 winapi 返回值,至少要检查 assert()。
-
如何从我的文件名中创建资源 ID?
-
LoadBitmap: "指向以空字符结尾的字符串的指针,该字符串包含要加载的位图资源的名称。或者,此参数可以包括资源标识符在低位词中,在高位词中为零。"
-
您真的不想从
WM_PAINT的磁盘加载图像。这可以说很多。加载一次并保留 HBITMAP。