在前面已经学习怎么样把注册窗口的功能封装成类的形式,接着下来就是创建窗口的功能,而这部分功能又是怎么样编写才是最合适的呢,以便后面所有开发工作都可以复用这些代码。我们来仔细地分析一下窗口上主要有什么东西是可变的,什么东西不变的,原则上就是把可变的东西变成通过函数方式来改变,不变的东西放在类内部,这样减少类的使用者在细节上考虑的问题。目前来看,一个窗口最容易变化的就两样东西:窗口类型,指明这个窗口是属于那一个种类的,比如Edit、List等;另外一个就是窗口的标题,因为软件的使用者只能从窗口的标题去区分相同类型的窗口。其实这两点就是从不同的角度去区分窗口的需求,窗口类型是从开发者角度去看不同窗口的类型;窗口的标题是从使用者角度去看不同窗口的功能区分。有这两点思路之后,就可以来编写这个类的代码了,完整的代码如下:
#开发人员:蔡军生(QQ:9073204) 深圳 2014-8-20 #创建窗口 class WinMaker: def __init__(self, className, hInst): self.className = className self.hInst = hInst self.style = WS_OVERLAPPEDWINDOW | WS_CAPTION self.exStyle = 0 self.x = CW_USEDEFAULT self.y = 0 self.width = CW_USEDEFAULT self.height = 0 self.hWndParent = HWND(0) self.hMenu = HWND(0) self.wndCreatData = c_void_p(0) def Create(self, title): self.hWnd = windll.user32.CreateWindowExW( self.exStyle, self.className, title, self.style, self.x, self.y, self.width, self.height, self.hWndParent, self.hMenu, self.hInst, self.wndCreatData) if not self.hWnd: print(‘Failed to create window‘) exit(0) return self.hWnd
class是Python类的关键字,主要用来定义类名称。WinMaker是我命名的创建窗口的类名称,以后就可以使用这个类来创建很多很多窗口,而不再需要拷贝粘贴N多的代码。接着下来就看到__init__构造函数,在这个构造函数里主要一件事情,就是创建窗口所有需要的参数。在这个构造函数的参数列表里,className是窗口类型的名称;hInst是窗口属于应用实例的句柄。创建时,其它窗口参数都使用默认的参数。当然你如果想控制更多的窗口属性,那可添加到参数列表里。最后定义了Create函数来创建窗口的操作,在这个操作里通过参数传递窗口的标题title进来,从而达到让窗口显示不同的名称。在这段代码里,主要使用到Python的类三个特性,一个是Python类的构造函数__init__;一个是Python类的成员函数Create;一个是Python类的成员变量,如self.className = className。