我有一个 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 谢谢
问题提出不当,因为您似乎认为窗口的可绘制表面在某种程度上是持久的 - 事实并非如此,系统可以自由地忘记其所有内容并调用您的WM_PAINT处理程序将其重新绘制回说明它在哪里。出于这个原因,这个问题感觉很奇怪:不是你删除了一些已经存在的内容(窗口内容是短暂的),你安排让你的绘制代码不再绘制你不想要的东西并强制重新绘制。
所以,如果你正在做的图形中WM_PAINT应该像你,你应该设置一些种类标志(或者可能是,清除存储的元素绘制数据结构),它告诉你的重绘代码没有绘制文本,做一个InvalidateRect(hwnd, TRUE)有您的窗口背景已重新粉刷并被WM_PAINT调用。
然而,我担心的是,您没有WM_PAINT按照应有的方式进行绘画,而是分散在其他地方使用GetDC等(提示:在正常应用程序中,几乎没有地方需要GetDC或CreateDC);在这种情况下,您已经做错了(正如您可以通过最小化和恢复窗口看到的那样),您应该在继续之前学习如何正确执行此操作。
| 归档时间: |
|
| 查看次数: |
7356 次 |
| 最近记录: |