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_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_SIZE: self.OnSize,
win32con.WM_PAINT: self.OnPaint,
win32con.WM_CLOSE: self.OnClose,
win32con.WM_DESTROY: self.OnDistroy,
}
def OnSize(self, hwnd, msg, wparam, lparam):
print 'message: WM_SIZE'
def OnPaint(self, hwnd, msg, wparam, lparam):
print 'message: WM_PAINT'
def OnClose(self, hwnd, msg, wparam, lparam):
print 'message: WM_CLOSE
def OnDestroy(self, hwnd, msg, wparam, lparam):
print 'message: WM_DESTROY'
PostQuitMessage(0)

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

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

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

    OpenGL 作为一个图形接口,并没有包含窗口的相关内容,但OpenGL使用必须依赖窗口,即必须在窗口中绘制.这就要求我们必须了解一种窗口系统,但不同的操作系统提供的创建窗口的API都不相同,如果我们 ...

  2. 【pygame游戏编程】第一篇-----创建一个窗口

    下面我们一起来创建一个背景为蓝色的窗口作为游戏编程的开始: import sys import pygame def creat_screen(): #初始化pygame pygame.init() ...

  3. OpenGL编程逐步深入(一)创建一个窗口

    原文地址:http://ogldev.atspace.co.uk/ 原文中使用gnu make进行项目管理,本系列文章使用visual studio2012.在翻译过程中并非直译,加入了一些笔者个人观 ...

  4. C语言创建一个窗口提示

    打开Vs2012[我的是2012] /* X下面这些东西并没有什么用... 就不改了用2013 2015都一样 当然 devC++ 还有最原始的那个vc6.0也都是可以的. 编译环境遇到了相关问题网上 ...

  5. Java 创建一个窗口,使其启动时位于屏幕中间

    import java.awt.Toolkit; import javax.swing.JFrame; public class WindowInTheMiddle extends JFrame { ...

  6. (7)nehe教程1 创建一个OpenGL窗口:

    不要用那个nehe ndk了 误人子弟! 转自: 一个窗口,代码可真多啊 http://www.yakergong.net/nehe/ 在这个教程里,我将教你在Windows环境中创建OpenGL程序 ...

  7. 我的Go语言学习之旅七:创建一个GUI窗口

    在上次中,刚刚学过了  弹窗效果.这里再接着学习一下怎样创建一个窗口. 还是老路子,先上代码: package main import ( "github.com/lxn/go-winapi ...

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

    父窗口 创建一个窗口 var backinfo = window.showModalDialog('UserSelect.aspx', '', 'dialogHeight=600px; dialogW ...

  9. Android创建窗口(一)创建应用窗口

    所谓的窗口(Window)就是一个显示在手机屏幕上可视化视图的一片区域.在Android中窗口是一个抽象的概念,每一个Activity就对应着一个窗口,而所有的窗口都是由视图(View)来呈现,而我们 ...

随机推荐

  1. Morris post order traversal algorithm

    Sept. 5, 2015 花时间把代码读明白, 比光看书强. 动手写代码, 改代码,  兴趣是最好的老师. 多记几个例子, 增加情趣. 举个例子关于中序遍历,            4       ...

  2. Unity需要频繁登录是什么情况

    这个问题会在Unity 5.5.0p3中修复 都一样,等新版本吧

  3. FujiXerox CP116w换无线路由器后重新连接

    因为手头没有安装光盘, 不得不用土办法修改cp116w的wifi连接参数 1. 将路由器的2.4GHz SSID和密码设置为和旧路由器一样, 这样打印机就能连接上了 2. 在路由器控制界面中找到类似于 ...

  4. Centos6下安装高版本Git

    yum remove git .tar.gz /usr/src/ cd /usr/src/ cd git-/ make configure whereis autoconf yum install a ...

  5. 理解 JavaScript 回调函数并使用

    JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...

  6. IRandomAccessStream, IBuffer, Stream, byte[] 之间相互转换

    /* * 用于实现 IRandomAccessStream, IBuffer, Stream, byte[] 之间相互转换的帮助类 */ using System;using System.IO;us ...

  7. css 使图片水平垂直居中

    1.利用display:table-cell,具体代码如下: html代码如下: <div class="img_wrap"> <img src="wg ...

  8. oracle新建登录用户sql语句

    CREATE TABLESPACE TEST_DBDATAFILE '/mnt/data/oracledata/TEST_DB .dbf' SIZE 5000M AUTOEXTEND ONUNIFOR ...

  9. Python Pandas分组聚合

    Pycharm 鼠标移动到函数上,CTRL+Q可以快速查看文档,CTR+P可以看基本的参数. apply(),applymap()和map() apply()和applymap()是DataFrame ...

  10. Apache报错信息之通常每个套接字地址(协议/网络地址/端口)只允许使用一次(could not bind to address 0.0.0.0:80)

    我们常常在执行 httpd –k restart 重启Apache时报错提示: (OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次.  : AH00072: make_soc ...