窗口类型注册类

从前面的窗口程序可以看到,这个程序主要做了三件事情,第一件是注册窗口,第二件是创建窗口,第三件是显示窗口。从程序的代码上,很容易就看出来每个函数是在做什么事情,这典型是基于函数式的编程,行云如流水般。对于小的程序,这样的编程方式是没有什么问题。现在我们来考虑一下如果要注册多个窗口,创建多个窗口和显示多个窗口,再使用这样的函数代码,就比较难复用了。因而随着编程技术发展和软件项目的增大,目前普遍基于面向对象编程,这样可以很方便地构思多个窗口的注册、创建和显示。比如可以把注册窗口封装为一个类,如果要创建多个窗口,就创建多个对象就可以了。一个对象就是数据结构加算法,因此普通的对象都有成员变量和成员函数。至于是否面向对象编程,不是在于你使用什么语言,而是在于你在编程时使用的思想。只要使用了数据结构加算法这种封装的思想,就是在使用面向对象编程。像不支持面向对象编程的C语言在Linux内核编程里,开发人员也使用这种思想在编程。因而语言支持面向对象编程,只是提供更加方便的工具,不是关键因素,关键还是在于开发人员的思维模式而不是工具。在Python里也提供支持面向对象编程,它有自己的类定义方式。

窗口类型注册类

先来看一下例子代码,如下:

#开发人员:蔡军生(QQ9073204) 深圳  2014-8-15

#窗口类型注册类
class WinClassMaker:
    def __init__(self, wndProc, className, hInst):
        self.wndClass = WNDCLASSEX()
        self.wndClass.cbSize = sizeof(WNDCLASSEX)
        self.wndClass.style = CS_HREDRAW | CS_VREDRAW
        self.wndClass.lpfnWndProc = wndProc
        self.wndClass.cbClsExtra = 0
        self.wndClass.cbWndExtra = 0
        self.wndClass.hInstance = hInst
        self.wndClass.hIcon = 0
        self.wndClass.hCursor = 0
        self.wndClass.hBrush = windll.gdi32.GetStockObject(WHITE_BRUSH)
        self.wndClass.lpszMenuName = 0
        self.wndClass.lpszClassName = className
        self.wndClass.hIconSm = 0
    def Register(self):
        return windll.user32.RegisterClassExW(byref(self.wndClass))

从这段代码看来,Python的类定义是采用关键字class为开头,接着是类名称WinClassMaker,它的后面是冒号(:),最后是类的代码块。Python的关键字与c++语言里的关键字是一样的,不过它的构造函数、析构造函数与C++语言的就有比较大的差别了。Python类的构造函数是__init__函数,而析构函数是__del__函数。构造函数__init__是在一个类里自动地最先地执行的函数,因此所有创建的代码大多数放在这里,比如定义成员变量。析构函数__del__是在一个类里最后自动地调用的函数,主要用来释放占用的资源。一个类拥有这种属性,是方便来组织资源管理的,以便解决资源分配之后忘记去调用删除的动作,把调用时机都交编译器去处理,这样就大大地提高了开发者的效率,不用费心去关心资源删除的问题。另外类的复用就是数据结构和函数的复用,由于这些函数都是针对这些数据结构的编写,因此出错机会也减少很多。最后使用类还可以把数据结构放在类里面,只要使用它提供的函数就可以了,这样当函数名称不变时,但类的成员变量改变了以及它的算法产生了改变,就可以让外面的调用者不用去修改代码,不用感知这种变化。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值