读书人

关于Control-gt;Perform(.)解决办法

发布时间: 2012-12-29 10:28:09 作者: rapoo

关于Control->Perform(...)
我看到一段delphi代码如下


procedure DoTrans(Canvas : TCanvas; Control : TWinControl);
var
DC : HDC;
SaveIndex : HDC;
Position: TPoint;
begin
if Control.Parent <> nil then
begin
{$R-}
DC := Canvas.Handle;
SaveIndex := SaveDC(DC);
GetViewportOrgEx(DC, Position);
SetViewportOrgEx(DC, Position.X - Control.Left, Position.Y - Control.Top, nil);
IntersectClipRect(DC, 0, 0, Control.Parent.ClientWidth, Control.Parent.ClientHeight);
Control.Parent.Perform(WM_ERASEBKGND, DC, 0);
Control.Parent.Perform(WM_PAINT, DC, 0);
RestoreDC(DC, SaveIndex);
{$R+}
end;
end;

我把它转译成BCB的,这句总是报错,第二个参数类型不匹配
Control->Parent->Perform(WM_ERASEBKGND, DC, 0);
我写成
Control->Parent->Perform(WM_ERASEBKGND, (int)DC, 0);
强制类型转换,编译是通过了,

但是这样写行么?


[解决办法]
Perform原型如下
int __fastcall Perform(unsigned Msg, int WParam, int LParam);


可见是可以的
[解决办法]
强制转换一下类型:
Control->Parent->Perform(WM_ERASEBKGND, (WPARAM)DC, 0);

读书人网 >C++ Builder

热点推荐