procedure txpmenu.drawwindowborder(hwnd: hwnd; isrighttoleft: boolean); var wrect: trect; dcanvas: tcanvas; wdc: hdc; // +jt
regiontype: integer; // +jt r1,r2,wr,region: hrgn; // +jt rgnr: trect; // +jt begin
if (hwnd <= 0) or (fsettingwindowrng) then begin exit; end; // +jt wdc := getwindowdc(hwnd); //getdesktopwindow if wdc=0 then exit; // +jt fsettingwindowrng :=true; // +jt dcanvas := tcanvas.create; try dcanvas.handle := wdc; // +jt getwindowrect(hwnd, wrect); // +jt wrect.right := wrect.right-wrect.left; wrect.bottom := wrect.bottom-wrect.top; wrect.top:=0; wrect.left:=0; if getwindowlong(hwnd,gwl_wndproc)<>integer(@menuwindowproc) then begin setwindowlong(hwnd,gwl_userdata,getwindowlong(hwnd,gwl_wndproc)); setwindowlong(hwnd,gwl_wndproc,integer(@menuwindowproc)); end; {modify: conch 2004-11-04 画出的阴影太难看了 if not iswxp then begin wr:= createrectrgn(0,0,0,0); regiontype := getwindowrgn(hwnd, wr); getrgnbox(wr,rgnr); deleteobject(wr); if (regiontype = error) or (abs(rgnr.right-wrect.right)>5) or (abs(rgnr.bottom-wrect.bottom)>5) then begin region:= createrectrgn(0,0,0,0); r1:=createrectrgn(wrect.left,wrect.top,wrect.right-2,wrect.bottom-2); r2:=createrectrgn(wrect.left+2,wrect.top+2,wrect.right,wrect.bottom); combinergn(region,r1,r2,rgn_or); deleteobject(r1); deleteobject(r2); setwindowrgn(hwnd,region,true); end; // +jt dec(wrect.right, 2); dec(wrect.bottom, 2); end; // +jt } dcanvas.brush.style := bsclear; dcanvas.pen.color := fmenubordercolor; dcanvas.rectangle(wrect.left, wrect.top, wrect.right, wrect.bottom); if isrighttoleft then begin dcanvas.pen.color := fficonbackcolor; dcanvas.moveto(wrect.right - 3, wrect.top + 2); dcanvas.lineto(wrect.right - 2, wrect.bottom - 1); end else begin dcanvas.pen.color := fficonbackcolor; dcanvas.rectangle(wrect.left + 1, wrect.top + 2, wrect.left + 3, wrect.bottom - 1); end; // +jt stretchblt(dcanvas.handle,wrect.left + 1,wrect.top + 1,wrect.right - wrect.left-1,2, dcanvas.handle,wrect.left + 1,wrect.top + 3,wrect.right - wrect.left-1,1,srccopy); if iswxp then begin stretchblt(dcanvas.handle,wrect.left + 1,wrect.bottom - 3,wrect.right - wrect.left-1,2, dcanvas.handle,wrect.left + 1,wrect.top + 3,wrect.right - wrect.left-1,1, srccopy); dcanvas.pen.color := ffcolor; dcanvas.rectangle(wrect.right - 3, wrect.top+1, wrect.right - 1, wrect.bottom-1); end; // +jt {modify: conch 2004-11-04 画出的阴影太难看了 inc(wrect.right, 2); inc(wrect.bottom, 2); if not iswxp then // +jt begin // +jt dcanvas.pen.color := fmenushadowcolor; dcanvas.rectangle(wrect.left + 2, wrect.bottom, wrect.right, wrect.bottom - 2); dcanvas.rectangle(wrect.right - 2, wrect.bottom, wrect.right, wrect.top + 2); end; // +jt }
finally releasedc(hwnd, wdc); // +jt dcanvas.free; fsettingwindowrng :=false; end;
end; |