Win32 api 中的画笔

问题描述 投票:0回答:1

我正在尝试在 C++ 中将整个屏幕颜色更改为蓝色。 这是我的代码:

#include <iostream>
#include <tchar.h>

#include <windows.h>
#include <wingdi.h>
#include <winuser.h>

void Color()
{
    int screenWidth = GetSystemMetrics(SM_CXSCREEN);
    int screenHeight = GetSystemMetrics(SM_CYSCREEN);

    HWND hwnd = GetDesktopWindow();
    HDC hdc = GetWindowDC(hwnd);

    COLORREF color = 0x000000FF;
    HBRUSH brush = CreateSolidBrush(color);
    SetDCBrushColor(hdc, color);
    PatBlt(hdc, 0, 0, screenWidth, screenHeight, PATCOPY);

    ReleaseDC(hwnd, hdc);
}

我的问题是它将颜色设置为白色而不是红色。 我搜索了问题的解决方案,但得到了 Photoshop 教程。

我做错了什么?

c++ winapi gdi
1个回答
0
投票

抱歉回复晚了,但如果您想要将程序的背景颜色设置为蓝色,您应该考虑执行以下操作。 - 处理 WM_PAINT 事件中屏幕颜色的变化,以便背景每次都可以重新绘制为蓝色。 -为此,请在 WM_PAINT 案例中创建一个 PAINTSTRUCT 实例。 -调用

BeginPaint(hwnd, PAINTSTRUCTURE)
并将返回值存储在
HDC
对象中。此函数返回
PAINSTRUCT
窗口的设备上下文的句柄,该句柄作为参数传递给它。该函数还负责其他功能,例如了解需要绘制窗口的哪些部分及其坐标。 下次打电话
FillRect(HDC,RECT,HBRUSH)
。该函数接收由
HDC
返回的
BeginPaint()
、一个存储需要重绘区域的
PaintStructure
成员变量和一个
HBRUSH
。 -
HBRUSH
是一种可以让您在屏幕上绘图的工具。该工具可以存储颜色和样式(据我所知)。因此调用
FillRect
并传递 HBRUSH 将使用 HBRUSH 的颜色。 下面是这个的代码

case WM_PAINT:
{


PAINTSTRUCT ps;
    HDC dc = BeginPaint(hwnd, &ps);
    HBRUSH hbr = CreateSolidBrush(RGB(0, 100, 150));
    FillRect(dc, &ps.rcPaint, hbr);


DeleteObject(hbr);

EndPaint(hwnd, &ps);
break;
}

我大约 10 分钟前才了解到这一点,并正在寻找有关该主题的问题,以便我能获得更多理解。如果我错了请原谅我。

© www.soinside.com 2019 - 2024. All rights reserved.