C 如何在Win32中对整个屏幕进行纯色着色

C 如何在Win32中对整个屏幕进行纯色着色,c,winapi,background-color,C,Winapi,Background Color,这是我以前的尝试,没有任何效果。为了清楚起见,我正在尝试将整个屏幕着色为纯色。此代码使用GDI工作(您似乎正在使用): #包括 int main(){ HDC screenDC=GetDC(NULL);//NULL获取整个屏幕 HBRUSH brush=CreateSolidBrush(RGB(255,0,0));//创建笔刷 SelectObject(screenDC,brush);//选择刷入DC 矩形(screenDC,0,0,GetSystemMetrics(SM_CXSCREEN),G

这是我以前的尝试,没有任何效果。为了清楚起见,我正在尝试将整个屏幕着色为纯色。

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

#包括
int main(){
HDC screenDC=GetDC(NULL);//NULL获取整个屏幕
HBRUSH brush=CreateSolidBrush(RGB(255,0,0));//创建笔刷
SelectObject(screenDC,brush);//选择刷入DC
矩形(screenDC,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));//在整个屏幕上绘制矩形
//清理这里的东西
返回0;
}

这只是一个示例,而不是一个健壮的解决方案。例如,选择上一个笔刷返回DC始终是一个好主意。释放DC也是如此。另一种选择是在你可以用来绘制的所有东西上面都有一个全屏窗口。

创建一个全屏窗口(不仅最大化,而且覆盖多个监视器的整个工作空间)并将其涂成白色


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

正如Chris在回答的最后提到的,最好的方法是创建一个与整个屏幕大小相同的窗口,并将其涂成绿色。这样,当您删除窗口时,桌面将被重新绘制恢复正常,并且其他重新绘制不会干扰您的窗口。一般来说,你不应该在你没有的HDC上画画。但无论如何,它可能值得一试,这样你就可以看到它有什么问题:例如,等一下,你会看到状态栏中的时钟重新绘制了自己。我同意。做任何事情的最好方法是尽量不侵犯其他程序的隐私,并且在其他程序有相同想法的情况下,冲突的可能性最小。
    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);         
#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;
}