我在一个过程中setMapMode,但在另一个过程中却又恢复默认映射方式了,为什么? (100分)

  • 主题发起人 主题发起人 xx_lzj
  • 开始时间 开始时间
X

xx_lzj

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个按钮单击过程中设置映射模式,通过画线证明没有问题
procedure TForm1.Button1Click(sender:TObject);
begin
SetMapMode(Canvas.Handle,MM_ANISOTROPIC);
SetWindowExtEx(Canvas.Handle,10000,-10000,nil);
SetViewportExtEx(Canvas.Handle,ClientWidth,ClientHeight,nil);
SetViewportOrgEx(Canvas.Handle,0,ClientHeight,nil);
Canvas.MoveTo(0,0);
Canvas.Lineto(200,5000);
end;
但在另一个过程中,却发现窗口和视口的范围值已经恢复为默认了!
procedure TForm1.Button2Click(Sender:TObject);
var
sW,sV:size;
begin
GetWindowExtEx(Canvas.Handle,sW);
GetViewportExtEx(canvas.Handle.sV);
end;
难道SetMapMode只在一个过程范围有效吗?
 
可能是在Delphi在重华过程中又给重致了
 
 
有没有办法全局改变坐标映射?
 
虽然知道他是用来 设置指定设备场景的映射模式
但确实很少用到他,
能说说他有什么很大的用途吗???
呵呵~~~~~~~~~~~~~~~~~~~~
 
在vc中也是这样的,mfc的类在draw的时候默认的调用了preparedc
在该函数中改变了影响方式;
所以,你在delphi中实现的时候,可以参考vc的实现方式
编写一个preparedc函数,每次你paint的时候首先调用
 
lijun说的有道理,但还是不能全局改变,另编一个函数和直接在paint方法里面写除了层次清晰些,没有本质改变。我的就是试图找出delphi中类似prepareDC的一个全局方法。不知有没有。
 
遗憾,好像没有
 
后退
顶部