HWND 删除其上绘制的内容;无法追踪
HWND deleting what is drawn on it; can't trace
所以我有以下代码:
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/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- C++中的线程安全删除
- 如何从存储在std::映射中的std::集中删除元素
- HWND 删除其上绘制的内容;无法追踪