如何用API在桌面上画方框?(50分)

N

nzfsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,但方框要空心的,即只要边!<br>如果可以指定边框宽度最好~<br>
 
procedure Drawdesktop(DRect: TRect; Width: integer; Color: TColor);<br>var<br>&nbsp; DC: HDC;<br>&nbsp; can: TCanvas;<br>&nbsp; i: integer;<br>begin<br>&nbsp; DC :=GetWindowDC(0);<br>&nbsp; can := TCanvas.Create;<br>&nbsp; can.Handle := DC;<br>&nbsp; can.Brush.Color := Color;<br>&nbsp; for i := 0 to Width do<br>&nbsp; begin<br>&nbsp; &nbsp; can.FrameRect(DRect);<br>&nbsp; &nbsp; InflateRect(DRect, 1, 1);<br>&nbsp; end;<br>&nbsp; can.Free;<br>&nbsp; ReleaseDC(0, DC);<br>end;
 
边框怎么指定??在can.pen的属类里??
 
procedure TForm1.Button1Click(Sender: TObject);<br>var<br>thedc:Hdc;<br>wbr:Tbrush;<br>rect:Trect;<br>begin<br>rect.Left:=100;<br>rect.Top:=100;<br>rect.Bottom:=200;<br>rect.Right:=200;<br>wbr:=TBrush.Create;<br>wbr.Style:=bsSolid;<br>thedc:=GetDc(0);<br>framerect(thedc,rect,wbr.handle);<br>end;
 
没细看,原来是画多次啊......呵呵~[^][^]
 
to :MilkRoad,我用你的办法可以画出我需要的方框,但如果我再画第二个时,无法清除<br>原来的!<br><br>我用了RedrawWindow(),但不起做用,请指点!<br><br>另外:能否像抓屏软件一样,画出指定大小的方框来?(如需要,可另加分~)
 
借贵宝地一用:<br>如何实现用鼠标在屏幕上画个矩形边框,能同时圈住两个窗体上的内容,即画时不会因鼠标移动而发生<br>活动窗体的更替换,比如两个窗体重叠时?
 
to MilkRoad,你很忙吗?为什么不回复我的问题?<br><br>谢谢~
 
...............
 
P1,P2为矩形区域的lefttop,bottomright<br>在同一矩形区域,第一下画方框,第二下清除<br>Procedure TForm1.APIDrawFrame(P1,P2:TPoint);<br>var<br>&nbsp; a:LOGBRUSH;<br>&nbsp; TempHandle:Integer;<br>&nbsp; OldHandle,OldHandle1:Integer;<br>&nbsp; K:hdc;<br>&nbsp; BrushHandle:Integer;<br>begin<br>&nbsp; a.lbStyle:=bs_null;<br>&nbsp; TempHandle:=CreatePen(PS_SOLID,1,rgb(255,255,255));<br>&nbsp; k:=GetDc(0);<br>&nbsp; brushhandle:=CreateBrushIndirect(a);<br>&nbsp; OldHandle1:=SelectObject(k,brushhandle);<br>&nbsp; OldHandle:=SelectObject(k,TempHandle);<br>&nbsp; setrop2(k,R2_XORPEN);<br>&nbsp; Rectangle(k,P1.x-1,P1.y-1,P2.x+1,P2.y+1);<br>&nbsp; selectobject(k,oldhandle);<br>&nbsp; selectObject(k,OldHandle1);<br>&nbsp; DeleteObject(temphandle);<br>&nbsp; DeleteObject(brushhandle);<br>&nbsp; ReleaseDc(0,k);<br>end;
 
to zhenghui,首先谢谢老兄的回复,你用Xor操作是可以达到我画方框的要求,但这样,<br>我就无法指定色彩了,因为与桌面XOR后的色彩就不一定是"红色"了~<br><br>因此我想使用RedrawWindow函数做局部涮新,但搞不定,请老兄帮忙看看~
 
..............
 
..............<br>
 
..............................
 
我要知道你要实现的功能,<br>一定要红色的边框吗?如果那样的话只需改变一下tempHandle中的rgb参数就可以了<br>你要用redrawwindow刷新那部分区域
 
to zhenghui,我明白你的意思,上面的代码通过查帮助,还是可以看懂的,但我在上面的回<br>复说了,因为你用的是Xor(异或),所以如果我画在桌面的话,指定的色彩和桌面的色彩<br>Xor后,就不一定是我指定的(部分线变色)。因此,我想应该不能用Xor来画,但我用RedrawWindow<br>函数局部涮新,但一直没有成功,老兄可否提供代码??<br><br>谢谢~
 
我还是不明白你的意思<br>你想要给一个方框的边线赋予不同的颜色吗?<br>请详细说明?<br>对不起!我快要下班了!请快点回应!
 
这样的要求只能用异或画,颜色是和设定的有差距的,<br>而且如果屏幕上的颜色不一样的话,你画出来的颜色也是不一样的,<br>这是没有办法的,我所见到的所有的画框的都是这个效果,<br>而且如果把框画成一条直线,既宽度是0,就什么都没有了,<br>包括windows自己画的也是一样,你在桌面上鼠标一拉就看出来了
 
to zhenghui,老兄是否有EM或QQ或MSN?我们上面聊吧,这里不太方便~<br><br>to cook,你说的很对,用Xor只能在特定同色的背景下画,但这样也并不符合我的要求,<br>既然,XOR操作不能做到,我还是想问:RedrawWindow函数怎么达到局部重绘的方法?<br><br>我用了一下,不能局部涮新,一涮就是全屏!
 
顶部