c++ - HWND 删除上面绘制的内容;无法追踪

标签 c++ windows winapi visual-c++

<分区>

所以我有以下代码:

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);

关于c++ - HWND 删除上面绘制的内容;无法追踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31365442/

相关文章:

c++ - 对 makefile 无法识别的文件所做的更改

c - C Windows 代码中的 Asm bswap

windows - 在 Perl for win32 中获取 CPU ID 序列号

python - 在 Python/Django 中打印变量的值?

c++ - 创建子类复制构造函数时,我是否被迫使用/创建默认的 super 构造函数? [C++]

c++ - 一道C++语法问题

c++ - 如何使用 libjpeg 获取 JPEG 文件方向

c++ - 如何从控件中正确检索 Unicode 文本?

winapi - 如何优雅地终止一个进程?

c++ - WriteConsoleOutputA 的奇怪输出