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中有很多示例代码

最新文章

  1. jQuery之ajax实现篇
  2. JS 判断数据类型的三种方法
  3. 15. 3Sum_左右开工,遍历找出符合目标的数字
  4. iOS UIView动画效果 学习笔记
  5. [UCSD白板题] Longest Common Subsequence of Three Sequences
  6. Anliven - 解决问题的一些方法
  7. PC-大概最全的黑客工具表了
  8. GridControl 列中显示图片 z
  9. (转) Spring读书笔记-----部署我的第一个Spring项目
  10. 无递归 A星寻路算法
  11. JavaScript中的this基本问题
  12. CentOS7安装最新版git教程
  13. 2018申请淘宝客AppKey
  14. 中期linux课程考试题
  15. slick插件一些配置
  16. 学习笔记之Naive Bayes Classifier
  17. VB.NET语法小结
  18. Memcached遇到的问题及解决办法
  19. execl 导出
  20. Android几行代码实现监听微信聊天

热门文章

  1. java设计模式- (1)单例模式
  2. Jquery UI
  3. pcDuino-V2利用madplay播放音乐
  4. [No0000A7]批处理经常用到的变量及批处理>NUL详细介绍
  5. [No000083]文件与文件夹操作
  6. CodeBlocks及LCM应用
  7. [LeetCode] Plus One Linked List 链表加一运算
  8. [LeetCode] Divide Two Integers 两数相除
  9. EntityFramework、Dapper vs 草根框架性能大比拼,数据库访问哪家强?
  10. .net(C#)中this关键字