【问题标题】:How to color entire screen solid color in Win32Win32如何给整个屏幕上色纯色
【发布时间】:2012-09-15 03:44:10
【问题描述】:
    RECT rect;
    HWND hwnd = GetDesktopWindow();
    LockWindowUpdate(hwnd);
    HDC hdc = GetDC(hwnd);
    HBRUSH hbrush = CreateSolidBrush(RGB(255,0,0));
    GetWindowRect(hwnd, &rect);
    FillRect(hdc, &rect, hbrush);         

这是我之前的尝试,什么也没做。为了清楚起见,我正在尝试将整个屏幕着色为纯色。

【问题讨论】:

  • 正如克里斯在他的回答末尾提到的那样,最好的方法是创建自己的整个屏幕大小的窗口,并将其涂成绿色。这样,当你移除你的窗口时,桌面将被重新绘制成正常状态,并且其他重新绘制也不会干扰你的窗口。一般来说,您不应该在不属于您的窗口的 HDC 上绘画。但无论如何还是值得尝试一下,这样您就可以看到它有什么问题:例如,等一下,您会看到状态栏中的时钟重新绘制本身。
  • 我同意。做任何事情的最佳方式是尽可能少地侵犯其他程序的隐私,并且在另一个程序有相同想法的情况下尽量避免发生冲突。

标签: c winapi background-color


【解决方案1】:

此代码使用 GDI(您似乎正在使用)工作:

#include <windows.h>

int main() {
    HDC screenDC = GetDC(NULL); //NULL gets whole screen
    HBRUSH brush = CreateSolidBrush(RGB(255,0,0)); //create brush
    SelectObject(screenDC, brush); //select brush into DC
    Rectangle(screenDC, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)); //draw rectangle over whole screen
    //clean up stuff here
    return 0;
}

这只是一个示例,而不是一个可靠的解决方案。例如,选择之前的刷回DC总是一个好主意。释放 DC 也是如此。另一种选择是在您可以用来绘制的所有内容之上放置一个全屏窗口。

【讨论】:

    【解决方案2】:

    创建一个全屏窗口(不仅最大化,而且覆盖整个工作区以供多个显示器使用)并将其涂成白色。

    这是其他全屏图形应用程序(游戏、屏幕保护程序等)所做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多