【问题标题】:Using FillRect() in C++在 C++ 中使用 FillRect()
【发布时间】: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.

【问题讨论】:

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

标签: c++ visual-c++ graphics gdi


【解决方案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将资源返还给系统。

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

【讨论】:

    猜你喜欢
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2013-08-12
    相关资源
    最近更新 更多