首页 > 代码库 > 视类(View)
视类(View)
视类主要用来向界面显示内容用的,与显示无前的内容都不会放到这里。在本例子里,主要用来向窗口画直线和在窗口固定位置显示当前鼠标所在位置。在Windows的画直线,就是调用它的API函数LineTo来实现,显示字符串使用API函数TextOut。为了方便使用,在这里都对这些部件进行封装,抽像成好用的类,这样使用起来不用担心句柄资源泄漏。一年之前,在公司里有一个新同事进来,刚开始写界面的代码,为了给界面绘图添加一种颜色,就创建了一个画笔,但奇怪的就在这里,他创建之后,从来不删除,结果这个软件在他那里测试几次,几十次都没有问题。但在测试组那里,经历了一个星期的测试,突然发现电脑的界面不能动了,像中病毒一样,我一直在找问题,一打开系统管理器查看,发现居然占用这么多句柄,肯定是在某个地方触发这段代码的运行,导致句柄超出了系统管理范围。不过问题是发现了,但要在50多万行代码里查找出这个问题,非常困难。最后只能几个人审查所有界面代码,然后针对一些界面句柄添加统计,查看是否释放掉。经历好几天,总算把它确定了位置,作出修改之后再测试一周,没有发现相应的问题。因此,这里使用类的构造和析构函数进行资源的自动管理是一个非常棒的方法。视图类的代码如下:
#视图类 class View: def __init__(self): self.x = 0 self.y = 0 def Paint(self, canvas, ptList): pen = Pen(0, 0, canvas.RGB(255, 0, 0)) penhold = Holder(canvas.Gethdc(), pen.Gethpe()) self.PrintPos(canvas, self.x, self.y) for pt in ptList: if pt[2]: canvas.MoveTo(pt[0], pt[1]) else: canvas.LineTo(pt[0], pt[1]) def PrintPos(self, canvas, x, y): self.x = x self.y = y strOut = u‘Mouse: %04d, %04d‘ % (x, y) canvas.Text(0, 0, strOut) def MoveTo(self, canvas, x, y, isVisible): if isVisible: pen = Pen(0, 0, canvas.RGB(255, 0, 0)) penhold = Holder(canvas.Gethdc(), pen.Gethpe()) canvas.Line(self.x, self.y, x, y) self.PrintPos(canvas, x, y)
视类(View)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。