第一个python版Windows程序 供初学者参考

基本思路  定义窗口类-为类赋初始值-注册类-使用类创建窗口-显示窗口-更新窗口-创建消息循环

-等待消息。其中涉及一些命名约定都是基于C语言版本的 有这些背景知识程序无需太多注释。后期继续加入菜单

我的在Windows10系统测试通过

import win32gui
import win32con
import ctypes

import ctypes.wintypes
user32 = ctypes.windll.user32

#--------因为python是解释型语言 所以回调函数最先创建----------------------------------------

def windowProc(hwnd, msg, wParam, lParam):
    #-----------使用if风格的回调函数 显示立体边框------------------
    # if msg == win32con.WM_DESTROY:
    #     win32gui.PostQuitMessage(0)
    #     return 0
    # else:
    #     print("消息编号",msg)
    #     print("w参数",wPrame)
    #     print("l参数",lParam)
    # return win32gui.DefWindowProc(hwnd, msg, wParam, lParam)

    #-----------使用这种语句 显示老式风格的边框-----------------
    match msg:
        case win32con.WM_CREATE:
            print("窗口第一次创建")
            return 0
        case win32con.WM_PAINT:
            print("接收到绘制消息",msg)
            hdc,ps=win32gui.BeginPaint(hwnd)
            print(ps)
            # hdc=win32gui.GetDC(hwnd)
            rect=win32gui.GetClientRect(hwnd)
            win32gui.DrawTextW(hdc,"hello中国",len("hello中国"),rect,win32con.DT_SINGLELINE | win32con.DT_CENTER | win32con.DT_VCENTER)
            # win32gui.ReleaseDC(hwnd,hdc)
            win32gui.EndPaint(hwnd,ps)
            return 0
        case  win32con.WM_DESTROY:
            win32gui.PostQuitMessage(0)
            return 0

    return win32gui.DefWindowProc(hwnd, msg, wParam, lParam)


className = 'MyWindowClass'
#---------第一步   初始化类结构-python版本和C语言版本有一定的不同 某些域没有cbClsExtra-----------------------------------------
wndClass = win32gui.WNDCLASS()
wndClass.cbWndExtra=0
wndClass.style = win32con.CS_HREDRAW | win32con.CS_VREDRAW  #每当窗口水平方向或垂直方向尺寸发生改变后 要完全刷新窗口
wndClass.lpfnWndProc = windowProc                           #这个过程要处理基于这个窗口类创建的所有窗口的全部消息  使用函数名 实际引用提供指向函数的指针
wndClass.hInstance = win32gui.GetModuleHandle(None)         #程序的实例句柄
wndClass.hCursor = win32gui.LoadCursor(None, win32con.IDC_ARROW)    #使用预定义图标 第一个参数为None  使用自定义图片 第一个参数为程序的实例句柄
wndClass.hbrBackground =  win32con.COLOR_WINDOW     #win32gui.GetStockObject(win32con.WHITE_BRUSH) 或者获取图像对象#将窗口客户区边界设置为指定颜色
wndClass.lpszClassName = className

#--------第二步  注册类---------------------------------------------
wndClassAtom = win32gui.RegisterClass(wndClass)

#-------第三步  创建程序主窗口-------------------------------------------------
hwnd = win32gui.CreateWindow(className, "我的窗口", win32con.WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, None, None, win32gui.GetModuleHandle(None), None)

#---------第四步 显示并更新窗口
win32gui.ShowWindow(hwnd, win32con.SW_SHOW)
win32gui.UpdateWindow(hwnd)

#-------第五步 创建消息结构体并建立消息循环 -------------------------------
msg = ctypes.wintypes.MSG()

wPrame=None
lparame=None
#手动调用一次回调函数 python调试时中不自动执行创建初始化
windowProc(hwnd,win32con.WM_CREATE,0,0)

#第六步 自动执行消息队列  msg由操作系统自动生成 传递给你的程序
while user32.GetMessageW(ctypes.byref(msg), None, wPrame, lparame) != 0:
    user32.TranslateMessage(ctypes.byref(msg))
    user32.DispatchMessageW(ctypes.byref(msg))

效果如下图:

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值