我编写简单的windows c程序来在按下鼠标左键的地方显示位图。在第一次点击我的鼠标左键时,会出现位图。但在第二次单词时,位图没有显示在我点击鼠标左键的地方。Windows C:LoadBitmap()函数不起作用
这里是我的代码.........
LRESULT CALLBACK myHandler(HWND hw, UINT m, UINT mextra, long co_ord)
{
HDC hdc, hmemdc;
PAINTSTRUCT ps;
HBITMAP hbmp;
RECT r;
HGDIOBJ holdbmp;
int x, y;
switch(m)
{
case WM_LBUTTONDOWN:
hdc = BeginPaint(hw,&ps);
hmemdc = CreateCompatibleDC(hdc);
hbmp = LoadBitmap(h, MAKEINTRESOURCE(IDB_BITMAP1));
holdbmp = SelectObject(hmemdc, hbmp);
x = LOWORD(co_ord);
y = HIWORD(co_ord);
BitBlt(hdc, x, y, 190, 220, hmemdc, 0, 0, SRCCOPY);
EndPaint(hw,&ps);
SelectObject(hmemdc, holdbmp);
DeleteObject(hbmp);
DeleteDC(hmemdc);
DeleteDC(hdc);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hw,m,mextra,co_ord);
}
return 0L;
}
'DeleteDC(hdc);'不应该在那儿;从'BeginPaint'返回的DC的设备上下文清理由您已经调用的'EndPaint'管理。更重要的是,'BeginPaint' /'EndPaint'根本不应该被调用*,除非响应'WM_PAINT',否则不会。 – WhozCraig
谢谢你WhozCraig,我已经删除了BeginPaint(),EndPaint()和DeleteDC()。相反,我使用了GetDC()函数。我的工作...... – Sai
请记住:'释放'你得到'和'删除'你创建的'在你的情况下,如果你'GetDC'获得一个客户DC,那么你需要确保' ReleaseDC结束后会得到它。祝你好运。 – WhozCraig