【发布时间】:2015-02-14 15:01:27
【问题描述】:
我在互联网上阅读了很多例子,但我仍然卡住了。我正在尝试处理发送到我的应用程序的 WM_PAINT 消息。
在我的应用程序中,我总是在同一个 DC 中绘制,名为 g_hDC。它完美地工作。当收到WM_PAINT 时,我只是尝试将我的g_hDC 的内容绘制到BeginPaint 返回的DC 中。我猜g_hDC 包含我绘制的最后一个位图。所以我只想恢复它。
case WM_PAINT:
PAINTSTRUCT ps;
int ret;
HDC compatDC;
HDC currentDC;
HDC paintDC;
HBITMAP compatBitmap;
HGDIOBJ oldBitmap;
paintDC = BeginPaint(g_hWnd, &ps);
currentDC = GetDC(g_hWnd);
compatDC = CreateCompatibleDC(paintDC);
compatBitmap=CreateCompatibleBitmap(paintDC, CONFIG_WINDOW_WIDTH, CONFIG_WINDOW_HEIGHT);
oldBitmap=SelectObject(compatDC, compatBitmap);
ret = BitBlt(compatDC,
ps.rcPaint.left,
ps.rcPaint.top,
ps.rcPaint.right - ps.rcPaint.left,
ps.rcPaint.bottom - ps.rcPaint.top,
currentDC,
ps.rcPaint.left,
ps.rcPaint.top,
SRCCOPY);
ret = BitBlt(paintDC,
ps.rcPaint.left,
ps.rcPaint.top,
ps.rcPaint.right - ps.rcPaint.left,
ps.rcPaint.bottom - ps.rcPaint.top,
compatDC,
ps.rcPaint.left,
ps.rcPaint.top,
SRCCOPY);
DeleteObject(SelectObject(compatDC, oldBitmap));
DeleteDC(compatDC);
DeleteDC(currentDC);
EndPaint(g_hWnd, &ps);
休息;
但它只是画了一个白色的矩形......我尝试了很多可能性,但没有任何效果。你能帮帮我吗?
【问题讨论】:
-
c++ 标签不正确。将其更改为 Win32。
-
您还没有在 compatBitmap 中绘制任何东西 - 您希望在 BitBlt 之后看到什么?假设必须有“噪声”,即随机图像。
-
我删除了 c++ 标签。我只是在重叠窗口的位置看到一个白色矩形。
-
我想你会看到没有 BitBlt 的相同的白色矩形 - 这是正常的背景擦除(白色)。
-
你在任何时候都不会进入
BeginPaint返回的DC。