SelectObject WinApi 函数无法在 Rad Studio Seatle 中编译
SelectObject WinApi function Cannot Compiling in Rad Studio Seatle
我正在尝试在 Rad Studio Seatle CBuilder 10 中编译 below code snippet。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HPEN hpen, hpenOld;
HBRUSH hbrush, hbrushOld;
HDC hdc = this->Canvas->Handle;
// Red pen for the border
hpen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
// Blue brush for the interior.
hbrush = CreateSolidBrush(RGB(0, 0, 255));
// Select the new pen and brush then draw a rectangle.
hpenOld = SelectObject(hdc, hpen);
hbrushOld = SelectObject(hdc, hbrush);
Rectangle(hdc, 100,100, 400,250);
// After using your objects, delete them and restore the originals
SelectObject(hdc, hpenOld);
DeleteObject(hpen);
SelectObject(hdc, hbrushOld);
DeleteObject(hbrush);
}
但无法编译该行并显示错误消息。
hpenOld = SelectObject(hdc, hpen);
[bcc32 Error] Unit1.cpp(132): E2034 Cannot convert 'void *' to 'HPEN__
*' Full parser context
Unit1.cpp(121): parsing: void _fastcall TForm1::Button1Click(TObject *)
我可以在 "c++ builder 6".
中成功编译此源代码
我还检查了 CBuilder 6 和 Cbuilder 10 中的 SelectObject 函数声明
CBuilder 6 声明(wingdi.h)
WINGDIAPI HGDIOBJ WINAPI SelectObject(IN HDC, IN HGDIOBJ);
CBuilder 10 声明(wingdi.h)
WINGDIAPI HGDIOBJ WINAPI SelectObject(_In_ HDC hdc, _In_ HGDIOBJ h);
我没有看到任何不同。
我的问题是什么。
谢谢。
SelectObject
returns HGDIOBJ
与 HPEN
不兼容。重点是 SelectObject
可以 return 多种不同的 GDI 对象类型。由您决定 returned 是什么类型,并进行相应的转换。例如:
hpenOld = (HPEN)SelectObject(hdc, hpen);
您需要对 SelectObject
的另一个调用执行同样的操作。
我正在尝试在 Rad Studio Seatle CBuilder 10 中编译 below code snippet。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HPEN hpen, hpenOld;
HBRUSH hbrush, hbrushOld;
HDC hdc = this->Canvas->Handle;
// Red pen for the border
hpen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0));
// Blue brush for the interior.
hbrush = CreateSolidBrush(RGB(0, 0, 255));
// Select the new pen and brush then draw a rectangle.
hpenOld = SelectObject(hdc, hpen);
hbrushOld = SelectObject(hdc, hbrush);
Rectangle(hdc, 100,100, 400,250);
// After using your objects, delete them and restore the originals
SelectObject(hdc, hpenOld);
DeleteObject(hpen);
SelectObject(hdc, hbrushOld);
DeleteObject(hbrush);
}
但无法编译该行并显示错误消息。
hpenOld = SelectObject(hdc, hpen);
[bcc32 Error] Unit1.cpp(132): E2034 Cannot convert 'void *' to 'HPEN__ *' Full parser context Unit1.cpp(121): parsing: void _fastcall TForm1::Button1Click(TObject *)
我可以在 "c++ builder 6".
中成功编译此源代码我还检查了 CBuilder 6 和 Cbuilder 10 中的 SelectObject 函数声明
CBuilder 6 声明(wingdi.h)
WINGDIAPI HGDIOBJ WINAPI SelectObject(IN HDC, IN HGDIOBJ);
CBuilder 10 声明(wingdi.h)
WINGDIAPI HGDIOBJ WINAPI SelectObject(_In_ HDC hdc, _In_ HGDIOBJ h);
我没有看到任何不同。
我的问题是什么。
谢谢。
SelectObject
returns HGDIOBJ
与 HPEN
不兼容。重点是 SelectObject
可以 return 多种不同的 GDI 对象类型。由您决定 returned 是什么类型,并进行相应的转换。例如:
hpenOld = (HPEN)SelectObject(hdc, hpen);
您需要对 SelectObject
的另一个调用执行同样的操作。