如何确定 窗口 不规则的轮廓?(100分)

  • 主题发起人 主题发起人 老大,救我!
  • 开始时间 开始时间

老大,救我!

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi 里有椭圆,原角的,长方形的,自定义的函数。
但如何能确定不规则的轮廓?比如一个人的轮廓作为窗口~~
 
function Tmainfrm.CreateRegion(wMask: TBitmap; wColor: TColor;
hControl: THandle; top, Left: integer): HRGN;
var
dc, dc_c: HDC;
Rgn, TempRgn: HRGN;
X, Y, BeginY: Integer;
line: boolean;
color: TColor;
begin{代码风格不统一,因为有些是照抄那个外国人的。}
dc := GetWindowDC(hControl);
dc_c := CreateCompatibleDC(dc);
SelectObject(dc_c, wMask.Handle);
BeginY := 0;{这句可以不要,有了可以避免编译器警告。}
Rgn := CreateRectRgn(0, 0, 0, 0);{先初始化一个空的区域给Rgn。}
for X := 0 to wMask.Width - 1 do
begin
line := False;
for Y := 0 to wMask.Height - 1 do
begin
color := GetPixel(dc_c, X, Y);
if not (color <> wColor) then
begin
if not line then
begin
line := True;
BeginY:= Y;
end;
end;
if (color <> wColor) or (Y = wMask.Height - 1) then
begin
if line then
begin
line := False;
TempRgn := CreateRectRgn(X+left, BeginY+top, X + 1+left, Y+top);
CombineRgn(Rgn, Rgn, TempRgn, RGN_OR);
{把图形以连续得线段为单位生成区域,并且合并到总的区域中}
end;
end;
end;
end;
ReleaseDC(hControl, dc);
DeleteObject(dc);
Result := Rgn;
end;

procedure Tmainfrm.CreateFormIt;
var
R,R1,R2,R3,R4:HRgn;
TransColorL:TColor;
Region : array[0..1] of tPoint;
Bmp:Tbitmap;
begin // $008C00EC;//
{R:=CreateRectRgn(0,0,Width,Height-1);

bmp:=Tbitmap.Create;

bmp.Assign(ImageLeftTop.Picture.Bitmap);
TransColorL:=bmp.Canvas.Pixels[0,0];
R1:=CreateRegion(bmp,TransColorL,self.Handle,0,0);
combinergn(R,R,R1,RGN_DIFF);




if R<>0 then
SetWindowRgn(Handle, R, true);
bmp.Free;
end;
 
后退
顶部