在 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()的主要内容,如果未能解决你的问题,请参考以下文章