如何在Win32 api中清除屏幕

VIS*_*VAM -4 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));
Run Code Online (Sandbox Code Playgroud)

我进一步的文本输出已经被这样覆盖了在此处输入图片说明

如何清除前一个并添加这个。

我发现在像这样的同一位置执行 TextOut 功能

TextOut(hdc,200,170,buffer,_tcslen(buffer));
        TextOut(hdc, 200, 170, buffer1, _tcslen(buffer1));
Run Code Online (Sandbox Code Playgroud)

将替换前一个,但由于其他一些原因,我不能这样做,清除屏幕的实际方法是什么。控制台中是否有类似 system("cls") 之类的 Windows 谢谢

Mat*_*lia 8

问题提出不当,因为您似乎认为窗口的可绘制表面在某种程度上是持久的 - 事实并非如此,系统可以自由地忘记其所有内容并调用您的WM_PAINT处理程序将其重新绘制回说明它在哪里。出于这个原因,这个问题感觉很奇怪:不是你删除了一些已经存在的内容(窗口内容是短暂的),你安排让你的绘制代码不再绘制你不想要的东西并强制重新绘制。

所以,如果你正在做的图形中WM_PAINT应该像你,你应该设置一些种类标志(或者可能是,清除存储的元素绘制数据结构),它告诉你的重绘代码没有绘制文本,做一个InvalidateRect(hwnd, TRUE)有您的窗口背景已重新粉刷并被WM_PAINT调用。

然而,我担心的是,您没有WM_PAINT按照应有的方式进行绘画,而是分散在其他地方使用GetDC等(提示:在正常应用程序中,几乎没有地方需要GetDCCreateDC);在这种情况下,您已经做错了(正如您可以通过最小化和恢复窗口看到的那样),您应该在继续之前学习如何正确执行此操作。