控件什么时候拥有了Canvas??? (已经解答得很好,散分) (300分)

W

wlmmlw

Unregistered / Unconfirmed
GUEST, unregistred user!
不知道提得对不对,很是糊涂。
 
使用 ctrl + 鼠标点 类的名称
一层层的上溯到父类

你会找到的
 
象Form,Image之类的都有Canvas,就是没有也不怕,咱可以自己造,只要他有Handle就行。
var
DC: HDC;
Canvas: TCanvas;
begin
DC:=GetDC(Panel1.Handle);
try
Canvas:=TCanvas.Create;
try
Canvas.Handle:=DC;
//调用Canvas的过程
finally
Canvas.Free
end
finally
ReleaseDC(Panel1.Handle, DC)
end
end;
这就是为Panel造Canvas的例子
 
LeeChange:请教一下,是不是没有canvas但只要有句柄的控件都可以这样为它弄一个canvas?
 
在Create里引用Canvas的某些函数时,会报无Parent的错误,请解释。谢谢
 
只要有HDC就可以
 
to foxgirl:
是的,只要有Handle,都可以用上面的方法造Canvas。
 
就这样问一下就300分吗?真是不可思议。
 
Canvas就是Windows API中的设备上下文句柄的封装而已。不过我更喜欢直接用GDI的API。
 
救我啊,解释一下Invalidate到底是怎么回事?
 
Invalidate是用来重绘控件的.怎么又跟拥有Canvas扯上了.
看来楼主还没把问题提到点子上.
 
都是有关绘画的,呵。
能不能解释一下Invalidate的整过过程?
 
楼主有钱啊。[:)]
 
看在线帮助或代码自动提示不就知道控件有没有canvas了吗?没有的话,需要就按上面的方法造一个就行了。不太明白你的意思
 
楼主有钱
 
换另一种说法
控件的Canvas什么时候可用?
 
楼主:在有onpaint的事件里面可以用。要不就拦截窗体的wm_panit消息。
 
从TCustomControl就有了Canvas
 
从TCustomControl继承的控件并不多。
TControl没有Canvas,TGraphicControl的Canvas是从其Parent的Canvas上Clip来的。
大部分TWinControl都有Canvas。

Invalidate是TWinControl重新映射了Windows的InvalidateRect函数。绝大部分情况下会
触发WM_PAINT消息。
 

Similar threads

回复
0
查看
684
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部