pywin32创建一个窗口

import win32con,win32gui
class MyWindow():
    def __init__(self):
        #注册一个窗口类
        wc = win32gui.WNDCLASS()
        wc.lpszClassName = ‘MyWindow‘
        wc.hbrBackground = win32con.COLOR_BTNFACE+1 #这里颜色用法有点特殊,必须+1才能得到正确的颜色
        wc.lpfnWndProc = self.wndProc #可以用一个函数,也可以用一个字典
        class_atom=win32gui.RegisterClass(wc)
        #创建窗口
        self.hwnd = win32gui.CreateWindow(
            class_atom, u‘窗口标题‘, win32con.WS_OVERLAPPEDWINDOW,
            win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT,
            win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT,
            0,0, 0, None)
        #显示窗口
        win32gui.ShowWindow(self.hwnd, win32con.SW_SHOWNORMAL)
    #消息处理
    def wndProc(self, hwnd, msg, wParam, lParam):
        if msg == win32con.WM_CREATE: print ‘message: WM_CREATE‘
        if msg == win32con.WM_SIZE: print ‘message: WM_SIZE‘
        if msg == win32con.WM_PAINT: print ‘message: WM_PAINT‘
        if msg == win32con.WM_CLOSE: print ‘message: WM_CLOSE‘
        if msg == win32con.WM_DESTROY:
            print ‘message: WM_DESTROY‘
            win32gui.PostQuitMessage(0)
        return win32gui.DefWindowProc(hwnd, msg, wParam, lParam)
mw = MyWindow()
win32gui.PumpMessages()

对应的C代码可以参考下面文章:

Your First Windows Program

Python和上面的C基本上是一样的,只有以下细微区别:

1. win32gui.PumpMessages()

这里win32gui.PumpMessages()实际上取代了下面的C代码

while (GetMessage(&msg, NULL, 0, 0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

2. WNDCLASS.lpfnWndProc

lpfnWndProc既可以像C那样接受一个函数地址,也可以接受一个dict对象,用于映射具体的消息和针对的函数

wc.lpfnWndProc = {
    win32con.WM_CREATE: self.OnCreate,
    win32con.WM_SIZE: self.OnSize,
    win32con.WM_PAINT: self.OnPaint,
    win32con.WM_CLOSE: self.OnClose,
    win32con.WM_DESTROY: self.OnDistroy,
}
def OnDestroy(self, hwnd, msg, wparam, lparam):
    print ‘message: WM_DESTROY‘
    PostQuitMessage(0)
def OnSize(self, hwnd, msg, wparam, lparam):
    print ‘message: WM_SIZE‘
def OnPaint(self, hwnd, msg, wparam, lparam):
    print ‘message: WM_PAINT‘

大概是pywin32在这里做了智能识别吧,分别对函数和字典做不同的处理

pywin32的文档不太全,好在C:\Python27\Lib\site-packages\win32\Demos中有很多示例代码

pywin32创建一个窗口

时间: 2024-12-08 21:06:04

pywin32创建一个窗口的相关文章

MFC创建一个窗口五大步

.窗口的创建步骤: 1.设计一个窗口类: WNDCLASS结构体参数: (1)       UINT style:窗口类的类型, (2)       WNDPROC lpfnWndProc:窗口的过程,接收一个指针,在程序中会将一个回调函数赋给他,有系统自动调用 (3)       int cbClsExtra:追加一定字节的额外存储空间,附加内存空间,常设置为0 (4)       int cbWndExtra:窗口的附加内存,常置为0 (5)       HINSTANCE hInstanc

创建一个窗口

用函数CreateWindow()或CreateWindowEx()来创建窗口(或任何其他类似于窗口的对象,如控件).创建窗口时必须提供窗口类的文本名称,这个窗口类名称为之前想系统申请的类名称,用于表示窗口类.下面是CreateWindowEx()的函数原型: CreateWindowEx( DWORD dwExStyle,//窗口的扩展风格,是一种高级功能,一般都为NULL LPCTSTR lpClassName,//指向注册类名的字符串指针 LPCTSTR lpWindowName,//指向

Linux OpenGL 实践篇-2 创建一个窗口

OpenGL 作为一个图形接口,并没有包含窗口的相关内容,但OpenGL使用必须依赖窗口,即必须在窗口中绘制.这就要求我们必须了解一种窗口系统,但不同的操作系统提供的创建窗口的API都不相同,如果我们在学习OpenGL时要去学习一整套的窗口系统,这将带来很多的不便,所以出现了GLUT.GLUT全称OpenGL Utility Toolkit,是一套和窗口系统无关的软件包,为我们提供了窗口创建,用户输入输出处理等功能.优点是:简小,精悍.注意GLUT并不是一个功能特别全面的窗口系统工具包,所以构建

C语言创建一个窗口提示

打开Vs2012[我的是2012] /* X下面这些东西并没有什么用... 就不改了用2013 2015都一样 当然 devC++ 还有最原始的那个vc6.0也都是可以的. 编译环境遇到了相关问题网上搜索一下就可以解决的.最重要的是相信自己是可以解决的. 我就遇到了PDB加载不了的状况. 解决方案:http://jingyan.baidu.com/article/90bc8fc87fbafff653640ca6.html [开始用的 DEVC++] */ 二.新建项目 三. 下一步点选空项目:

jQuery EasyUI 窗口 – 创建简单窗口

jQuery EasyUI 窗口 – 创建简单窗口 创建一个窗口(window)非常简单,我们创建一个 DIV 标记: <div id="win" class="easyui-window" title="My Window" style="width:300px;height:100px;padding:5px;"> Some Content. </div> 现在运行测试页面,您会看见一个窗口(win

IE 中创建 子窗口 传值 与接收值 【window.showModalDialog】

父窗口 创建一个窗口 var backinfo = window.showModalDialog('UserSelect.aspx', '', 'dialogHeight=600px; dialogWidth= 600px; edge=Raised; center=Yes;resizable= No; status= no;help=no'); 子窗口 调用JS关闭自身并返回值 function SelectCompany(obj) {                            wi

Sessions, Window Stations and Desktops(GetDesktopWindow()得到的桌面句柄, 是Csrss.exe创建的一个窗口)

由于不是搞安全的,对这块的东西一直不是很清楚,今天特意整理下. 总的来说,他们的关系如下: 我们知道Windows是支持多用户的,Session可以理解为每个用户登录,比如当前登录和远程登陆.Window Stations可以理解为登陆后的不同用户组,我们在任务管理器中可以看到不同的用户名(比如 Richard, system, local service等),其中只有一个活动Station WinSta0, 只有这个Station是接受用户鼠标键盘输入的.而WinSta0 Station 又包

jsWindow 对象 Window 对象 Window 对象表示浏览器中打开的窗口。 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。 注释:没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。 Window 对象集合 集合 描述 frames[] 返回窗口中所有命

一.JSX简介 JSX就是Javascript和XML结合的一种格式.React发明了JSX,利用HTML语法来创建虚拟DOM.当遇到<,JSX就当HTML解析,遇到{就当JavaScript解析. 如下(JS写法) var child1 = React.createElement('li', null, 'First Text Content'); var child2 = React.createElement('li', null, 'Second Text Content'); var

Qt4.3.4下面创建一个OpenGL 窗口

直接上代码: NeHeWidget.h #include <QtOpenGL/qgl.h> class NeHeWidget:public QGLWidget { Q_OBJECT public: NeHeWidget( QWidget* parent=0 ); ~NeHeWidget(); protected: void initializeGL(); void paintGL(); void resizeGL(int width,int height); }; NeHeWidget.cpp