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

你可能感兴趣的:(Win32)