如何根据位图(BMP)构建透明(异形)窗口?(请给出代码)(50分)

  • 主题发起人 主题发起人 linyi_cn
  • 开始时间 开始时间
L

linyi_cn

Unregistered / Unconfirmed
GUEST, unregistred user!
听说好象有一种掩膜的方法,我是用CANVAS的PIXELS属性判断边框,
总是不行,请大家多多帮忙
 
没人会么??
 
你的方法是可以的啊,一行行读Pixels,例如以黑色为背景色,取下不是黑色的点
作一个region,然后把每行的region用CombineRgn合并起来就行了
 
作一个region,然后把每行的region用CombineRgn合并起来就行了
~~~~~~~~~~~~请给出代码好么?
 
能生成RGN么?
 
没有这么麻烦吧,1stclass中imageform就可以的,不过图形不能动态的载入。
 
我就是想自己研究,找控件我有一堆
 
function Tform1.CreateRegion(wMask:TBitmap;wColor:TColor;hControl:THandle): HRGN;
var
; dc, dc_c: HDC;
; rgn: HRGN;
; x, y: integer;
; coord: TPoint;
; line: boolean;
; color: TColor;
begin
; dc := GetWindowDC(hControl);
; dc_c := CreateCompatibleDC(dc);
; SelectObject(dc_c, wMask.Handle);
; BeginPath(dc);
; 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;
; ; ; ; ; coord.x := x;
; ; ; ; ; coord.y := y;
; ; ; ; end;
; ; ; end;
; ; ; if (color = wColor) or (y=wMask.Height-1) then
; ; ; begin
; ; ; ; if line then
; ; ; ; begin
; ; ; ; ; line := false;
; ; ; ; ; MoveToEx(dc, coord.x, coord.y, nil);
; ; ; ; ; LineTo(dc, coord.x, y);
; ; ; ; ; LineTo(dc, coord.x + 1, y);
; ; ; ; ; LineTo(dc, coord.x + 1, coord.y);
; ; ; ; ; CloseFigure(dc);
; ; ; ; end;
; ; ; end;
; ; end;
; end;
; EndPath(dc);
; rgn := PathToRegion(dc);
; ReleaseDC(hControl, dc);
; Result := rgn;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
; w1:TBitmap;
; w2:TColor;
; rgn: HRGN;
begin
; w1:=TBitmap.Create;
; w1.Assign(image1.Picture.Bitmap);
; w2:=w1.Canvas.Pixels[0,0];
; rgn := CreateRegion(w1,w2,Handle);
; if rgn<>0 then
; begin
; ; ;SetWindowRgn(Handle, rgn, true);
; end;
; w1.Free;
end;
 
正确,JAMW,接分
 
后退
顶部