HWND 删除其上绘制的内容;无法追踪

HWND deleting what is drawn on it; can't trace

本文关键字:追踪 删除 绘制 HWND      更新时间:2023-10-16

所以我有以下代码:

void showBlankBitmap()
{
HDC hdcMem=CreateCompatibleDC(GetDC(printWind));
HBITMAP blankBimp=NULL;
    //create a black bitmap
    blankBimp=CreateCompatibleBitmap(hdcMem, 1920, 1080);
    HBRUSH hBrushFill=CreateSolidBrush(RGB(0,0,0));
    HBITMAP hBmpOld=(HBITMAP)SelectObject(hdcMem, blankBimp);
    HBRUSH brushOld=(HBRUSH)SelectObject(hdcMem, hBrushFill);
    Rectangle(hdcMem, 0,0,1920, 1080);
    SelectObject(hdcMem, hBmpOld);
    SelectObject(hdcMem, brushOld);
    DeleteObject(hBrushFill);
    DeleteDC(hdcMem);
    SetBitmapDimensionEx(blankBimp, 1920, 1080, NULL);

    HDC hDC=GetDC(printWind);
    BitBlt(hDC, endOfLaptopW, 0, 1920, 1080, (HDC)blankBimp, 0, 0, NULL);
    DeleteDC(hDC);
}

当我运行它时,它会创建一个黑色位图来覆盖窗口,这正是我想要的,但后来它就消失了。我不知道是什么在删除它。当浏览程序时,我可以看到函数退出后窗口仍然是黑色的,但由于它是在WndProc(消息接收器(中调用的,我无法跟踪它,错误似乎发生在WndProc之外,或者就在它返回时。我也试过SetBkColor。也不起作用。非常感谢您的帮助。谢谢

这是意料之中的事。Windows不保持持久图形状态。您需要在窗口的窗口过程中处理WM_PAINT消息,然后进行绘制。

在你写的代码中:

hDC = GetDC(printWind);

当您处理WM_PAINT时,您可以通过调用BeginPaint来获得DC。完成绘画后,请致电EndPaint

它是这样的:

PAINTSTRUCT ps;
HDC hDC = BeginPaint(hwnd &ps);
// ... paint onto hDC
EndPaint(hwnd, &ps);