视类(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)
时间: 2024-10-27 00:38:36

视类(View)的相关文章

OpenGL学习脚印: 视变换(view transformation)

写在前面 OpenGL中的坐标处理过程包括模型变换.视变换.投影变换.视口变换等内容,这个主题的内容有些多,因此分节学习,主题将分为5节内容来学习.上一节模型变换,本节学习模型变换的下一阶段--视变换.到目前位置,主要在2D下编写程序,学习了视变换后,我们可以看到3D应用的效果了.本节示例程序均可在我的github下载. 通过本节可以了解到 视变换的概念 索引绘制立方体 LookAt矩阵的推导(对数学不感兴趣,可以跳过) 相机位置随时间改变的应用程序 坐标处理的全局过程(了解,另文详述) Ope

django基类View.as_view()

参考:https://www.zmrenwu.com/post/53/ 详细见参考 一般请求的判断方法: def view(request, *args, **kwargs): if request.method.lower() == 'get': do_something() if request.method.lower() == 'post': do_something() 使用View.as_view()代替判断: class ClassName(View): ''' 继承View自动判

tp框架视图层view——模板继承

在做网站的时候,每个网站都有头部和尾部,也就是菜单栏和页脚,网站的各个子网页的头部和尾部基本就是一样的,所以tp框架提供了一种模板继承的方法: 1.首先在View的Main文件夹下建立一个base.html页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

mfc视类中错误:IntelliSense: declaration is incompatible with。。。解决方案

基本情况是我自己写了一个类: class CDib {....} 然后在mfc自动生成的"工程名Dlg.cpp"中使用类CDib,我的工程名是MfcPictureProcessing,所以类是class CMfcPictureProcessingDlg,下面是视图类.h文件里: class CMfcPictureProcessingDlg: public CDialogEx { ... CDib *Dlgdib; CPalette* CreateBitmapPalette(CDib *

小程序框架之视图层 View~获取界面节点信息

获取界面上的节点信息 WXML节点信息 节点信息查询 API 可以用于获取节点属性.样式.在界面上的位置等信息. 最常见的用法是使用这个接口来查询某个节点的当前位置,以及界面的滚动位置. 示例代码: const query = wx.createSelectorQuery() query.select('#the-id').boundingClientRect(function(res){ res.top // #the-id 节点的上边界坐标(相对于显示区域) }) query.selectV

(转)MFC中Doc,View,MainFrmae,App各指针的互相获取

App是应用域,所有的域中的东西都可以通过全局函数访问到它. MainFrame是主框架,也基本可以用全局函数访问到. MainFrame下是若干个ChildFrame,ChildFrame中若干个View和Document(可能不成对),ChildFrame管理着View,View和Document进行互操作. 因此整体框架就出来了,一般除了直接应用的关系都可以通过MainFrame-->Active ChildFrame-->Active View-->Document这条线进行访问

VC的若干实用小技巧 (如何干净的删除一个类)

Visual C++6.0(5.0)开发工具功能非常强大,但是对于初学者来说,却有很多细节的问题需要注意.作者搜集整理了以下一些实用小技巧,希望对初学者有所帮助. 1:使用vc开发项目时,常会遇到这种情况:      即明明只改动了一个文件,却要把整个项目全部重新编译连接一次.刚刚连接好,一运行,又提示重新编译连接一次,非常讨厌.这是因为出现了未来文件的缘故.      解决方法:      找出对应文件夹下的debug目录,将未来文件全部delete, 再rebuild all一次.(未来 文

Android 中几个重要的View

SurfaceView, GLSurfaceView, SurfaceTexture以及TextureView是Android当中名字比较绕,关系又比较密切的几个类.本文基于Android 5.0(Lollipop)的代码理一下它们的基本原理,联系与区别. SurfaceView从Android 1.0(API level 1)时就有 .它继承自类View,因此它本质上是一个View.但与普通View不同的是,它有自己的Surface.我们知道,一般的Activity包含的多个View会组成Vi

Android进阶笔记05:View、SurfaceView 和GLSurfaceView 的关系和区别

1.  Android游戏当中主要的除了控制类外就是显示类View.SurfaceView是从View基类中派生出来的显示类.android游戏开发中常用的三种视图是:    (1) view.SurfaceView 和 GLSurfaceView的区别如下: • View: 显示视图,内置画布,提供图形绘制函数.触屏事件.按键事件函数等:必须在UI主线程内更新画面,速度较慢 • SurfaceView: 基于view视图进行拓展的视图类,更适合2D游戏的开发:是View的子类,类似使用双缓机制