在 C++ 中使用 FillRect()

Posted

技术标签:

【中文标题】在 C++ 中使用 FillRect()【英文标题】:Using FillRect() in C++ 【发布时间】:2013-04-13 04:41:36 【问题描述】:

我不熟悉在 Visual C++ 中使用图形。我只是想制作一个填充颜色的矩形。需要帮助来纠正这个...

RECT rect;
HDC hdc;
hdc=CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);
rect.left=30;
rect.right=100;
rect.top=50;
rect.bottom=200;
FillRect(hdc,&rect,(HBRUSH)(RGB(40,151,151)));

错误是:

ERROR: The variable 'rect' is being used without being initialized.

【问题讨论】:

真的吗?我原以为那会奏效。你确定这适用于某个地方没有另一个“矩形”吗? 这是错误还是警告? 【参考方案1】:

这通常是警告,而不是错误。在这种情况下,它也似乎是虚假的。

可能如果你初始化它会更好:

HDC hdc=CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);
RECT rect = 30, 50, 100, 200;
HBRUSH brush = CreateSolidBrush(RGB(50, 151, 151));

FillRect(hdc, &rect, brush);

DeleteObject(brush);

请注意CreateSolidBrush 的使用——将颜色投射到 HBRUSH 似乎不太可能。

【讨论】:

谢谢,但它没有制作指定的矩形。 @shubhanksrivastava:它应该使用您指定的相同坐标。如果这些都错了,我也无能为力。说实话,硬编码的坐标几乎总是错误的。 上面我猜你的意思是 CreateSolidBrush(RGB(50,151,151));【参考方案2】:

您的代码由于此代码而失败:

(HBRUSH)(RGB(40,151,151))

您不能以任何有意义的方式将 RGB 颜色转换为 HBRUSH。获得HBRUSH 的唯一方法是要求系统给你一个。

因此,您需要为此目的使用其中一个 API 函数创建一个真正的画笔。例如,CreateSolidBrush

HBRUSH hBrush = CreateSolidBrush(RGB(40,151,151));

刷完后,调用DeleteObject将资源返还给系统。

作为一般规则,每次编写演员表时,都将代码视为非常可疑。始终努力编写没有强制转换的代码。

【讨论】:

以上是关于在 C++ 中使用 FillRect()的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中填充椭圆

带有 WHITE_BRUSH 的 FillRect 在 WinCE 6.0 上失败

无法使用fillrect方法绘制矩形

之间的区别。图形 fillRect 和 clearRect

ctx.fillRect不是一个函数

win32-使用FillRect绘制具有渐变颜色的客户区域背景