如何在Win32 api中清除屏幕

时间:2016-02-10 06:23:16

标签: c++ api winapi

我有一个C ++ Windows API程序,它使用TextOut函数

显示文本
TCHAR buffer[] = _T("Hello");
        TCHAR buffer1[] = _T("How to clear this one\?");
        TextOut(hdc,200,170,buffer,_tcslen(buffer));
        TextOut(hdc, 200, 185, buffer1, _tcslen(buffer1));

我的进一步文字输出已被覆盖,如enter image description here

如何清除前一个并添加此文件。

我发现在像这样的

这样的位置上做TextOut功能
TextOut(hdc,200,170,buffer,_tcslen(buffer));
        TextOut(hdc, 200, 170, buffer1, _tcslen(buffer1));

将取代之前的那个,但由于其他原因,我不能这样做 什么是清除屏幕的实际方式。 窗口中有什么像系统(“cls”)的控制台 谢谢

1 个答案:

答案 0 :(得分:4)

这个问题是不正确的,因为你似乎认为窗口的可绘制表面是某种持久性的 - 它不是,系统可以自由地忘记它的所有内容并调用你的{{1处理程序让它重新绘制回原来的状态。出于这个原因,这个问题很奇怪:不是你删除了已经存在的一些内容(窗口内容是短暂的),你安排好让你的油漆代码不再描绘你不想要的东西并强制重绘。

所以,如果你正在使用WM_PAINT进行绘图,你应该设置某种标记(或者可能清除存储要绘制的元素的数据结构),告诉你的重绘代码不要绘制文本并执行WM_PAINT以重新绘制窗口背景并调用InvalidateRect(hwnd, TRUE)

然而,我担心你没有按照WM_PAINT画画,而是使用WM_PAINT等散布在其他地方(提示:在正常的应用程序中,几乎没有您需要的地方GetDCGetDC);在这种情况下,你已经做错了(正如你可以通过最小化和恢复窗口看到的那样),你应该{I} learn how to do it properly才能继续。