窗口创建类

在前面已经学习怎么样把注册窗口的功能封装成类的形式,接着下来就是创建窗口的功能,而这部分功能又是怎么样编写才是最合适的呢,以便后面所有开发工作都可以复用这些代码。我们来仔细地分析一下窗口上主要有什么东西是可变的,什么东西不变的,原则上就是把可变的东西变成通过函数方式来改变,不变的东西放在类内部,这样减少类的使用者在细节上考虑的问题。目前来看,一个窗口最容易变化的就两样东西:窗口类型,指明这个窗口是属于那一个种类的,比如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。

时间: 2024-10-17 03:31:33

窗口创建类的相关文章

VC++编程之第三课笔记——MFC窗口创建过程以及窗口类的封装

第三课 MFC窗口创建过程以及窗口类的封装 MFC的每一个类都是以C开头的,表明这是一个Class. 工程包含(单文档) 创建工程名为aaa的工程(单文档)时,在类视图中可看见五个类: CAboutDlg CMainFrame CAaaApp CAaaDoc CAaaView 其中: 类CAboutDlg继承自CDialog类,对话框的类 类CMainFrame继承自CFrameWnd类,创建整个程序的框架窗口 类CAaaApp继承自CWinApp类,创建唯一的应用程序对象 类CAaaDoc继承

windows学习记录----hello world与窗口创建

1.第一个程序:Hello,world! 1 #include<windows.h> 2 3 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow ) 4 { 5 MessageBox( NULL, TEXT("Hello,world!"), TEXT("MessageBox"), 0 ); 6 7 return 0;

Tkinter类之窗口部件类

Tkinter类之窗口部件类 Tkinter支持15个核心的窗口部件,这个15个核心窗口部件类列表如下: 窗口部件及说明: Button:一个简单的按钮,用来执行一个命令或别的操作. Canvas:组织图形.这个部件可以用来绘制图表和图,创建图形编辑器,实现定制窗口部件. Checkbutton:代表一个变量,它有两个不同的值.点击这个按钮将会在这两个值间切换. Entry:文本输入域. Frame:一个容器窗口部件.帧可以有边框和背景,当创建一个应用程序或dialog(对话)版面时,帧被用来组

窗口创建及消息循环

窗口创建 1. 自定义窗口类别           WNDCLASS 2. 注册窗口类               RegisterClass 3. 创建窗口                 CreateWindow/CreateWindowEx                 WM_CREATE 4. 显示窗口                 ShowWindow                                  WM_SIZE & WM_SHOWWINDOW 5. 更新窗口 

Windows窗口创建的具体步骤

/*实现窗口创建的六步骤:第一步:创建入口函数WinMain第二步:注册窗口类第三部:实现回调函数的功能第四步:显示窗口第五步:更新窗口第六步:消息循环*/ #include "stdafx.h"//回调函数LRESULT CALLBACK WinProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam ){switch(uMsg){case WM_CREATE:{MessageBox(NULL,"即将创建一个窗口!"

窗口显示类

窗口在前面已经注册,并且已经创建出来了,但这时这个窗口并不能出现在我们的眼前,又是什么原因呢?哦,还不显示出来,原来是有原因的,就是窗口有多种状态,窗口可以隐藏.普通显示.最大化显示.最小化显示等.并且创建出来时,不立即显示,也是可以方便一性地创建很多很多窗口,最后才一次性地显示出来:另外创建窗口之后在系统看来窗口已经是可用的,这时可以先在窗口上绘图,当完成时再一次性显示出来,也避免窗口不断地刷新时窗口在闪动,看起来让人眼花缭乱.因而在这里就封装一个窗口显示类Window,这个类非常简单,它的代

使用StarUML创建类图

使用StarUML创建类图 http://www.flyne.org/article/379 1.综述(What) StarUML是一种生成类图和其他类型的UML图表的工具.本文是一个使用StarUML创建类图(Java语言描述)的简明手册. StarUML(简称SU),是一种创建UML类图,并能够自动生成Java的“stub code” 的工具.SU也可以做JAVA逆向工程,以产生相应的UML图表. 在本教程中,我们将使用SU设计一个pizza饼.执行后续步骤,可以创建如下面所示的UML图.S

JavaScript创建类的方式

一些写类工具函数或框架的写类方式本质上都是 构造函数+原型.只有理解这一点才能真正明白如何用JavaScript写出面向对象的代码,或者说组织代码的方式使用面向对象方式.当然用JS也可写出函数式的代码,它是多泛型的. 为了讨论的单一性,暂不考虑类的继承,(私有,受保护)属性或方法.EMCAScript中实际没有类(class)的概念,但可以把它理解为更广义的概念. 1.构造函数方式 /** * Person类:定义一个人,有个属性name,和一个getName方法 * @param {Strin

C# 利用反射根据类名创建类的实例对象

“反射”其实就是利用程序集的元数据信息. 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名空间. 1.假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型): Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL) object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)");