Python调用win32 API新建窗口与直接创建窗口的流程相同

流程:注册窗口→创建窗口→显示窗口→更新窗口→消息循环

代码:

# -*- coding: utf-8 -*-

import win32api

import win32con

import win32gui

import math

NUM=1000 #取1000个点

def main():

hInstance = win32api.GetModuleHandle() #获取当前的实例句柄

className = 'window'#窗口的类名

#定义窗口类

wndClass                = win32gui.WNDCLASS()

wndClass.style          = win32con.CS_HREDRAW | win32con.CS_VREDRAW

wndClass.lpfnWndProc    = wndProc

wndClass.hInstance      = hInstance

wndClass.hIcon          = win32gui.LoadIcon(0, win32con.IDI_APPLICATION)

wndClass.hCursor        = win32gui.LoadCursor(0, win32con.IDC_ARROW)

wndClass.hbrBackground  = win32gui.GetStockObject(win32con.WHITE_BRUSH)

wndClass.lpszClassName  = className

#注册窗口类

wndClassAtom = None

try: #判断是否注册窗口成功

wndClassAtom = win32gui.RegisterClass(wndClass)

except Exception, e:

print e

raise e

#创建窗口

hWindow = win32gui.CreateWindow(

wndClassAtom,

'Python Win32 Window',

win32con.WS_OVERLAPPEDWINDOW,

win32con.CW_USEDEFAULT,

win32con.CW_USEDEFAULT,

win32con.CW_USEDEFAULT,

win32con.CW_USEDEFAULT,

0,

0,

hInstance,

None)

#显示窗口

win32gui.ShowWindow(hWindow, win32con.SW_SHOWNORMAL)

#更新窗口

win32gui.UpdateWindow(hWindow)

#消息循环

win32gui.PumpMessages()

def wndProc(hWnd, message, wParam, lParam):

if not hasattr(wndProc, 'cxClient'):

wndProc.cxClient=0

wndProc.cyClient=0

if message==win32con.WM_SIZE:

wndProc.cxClient=win32gui.LOWORD(lParam) #附加参数的低位字保存窗口的宽度

wndProc.cyClient=win32gui.HIWORD(lParam) #附加参数的高位字保存窗口的高度

if message == win32con.WM_PAINT:

hdc, paintStruct = win32gui.BeginPaint(hWnd) #获取窗口的dc和窗口客户区所需要的信息的结构

win32gui.MoveToEx(hdc,0,wndProc.cyClient/2) #移动到直线的起始点,这里比win32 API少了最后一个参数

win32gui.LineTo(hdc,wndProc.cxClient,wndProc.cyClient/2) #画出直线

vertices=list() #定义一个列表用来存储点,形式为[x,y]的形式

point=list() #定义一个列表用来存储一系列作图的点

for i in xrange(NUM):

vertices=[]

vertices.append(i*wndProc.cxClient/NUM)  #计算出x坐标

vertices.append(int(wndProc.cyClient/2*(1-math.sin(2*math.pi*i/NUM)))) #计算出y坐标

point.append(tuple(vertices)) #将点添加到列表当中

win32gui.Polyline(hdc,point) #画出正弦图像

win32gui.EndPaint(hWnd, paintStruct) #关闭dc

return 0

if message == win32con.WM_DESTROY:

win32gui.PostQuitMessage(0) #发送消息,退出窗口的进程

return 0

else:

return win32gui.DefWindowProc(hWnd, message, wParam, lParam) #其他消息路由给操作系统处理

if __name__ == '__main__':

main()

Python调用win32 API绘制正弦波的更多相关文章

  1. 使用Python调用Flickr API抓取图片数据

    Flickr是雅虎旗下的图片分享网站,上面有全世界网友分享的大量精彩图片,被认为是专业的图片网站.其API也很友好,可以实现多种功能.这里我使用了Python调用其API获得了大量的照片数据.需要注意 ...

  2. MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API(转)

    转自:http://www.cnblogs.com/Yahong111/archive/2007/08/16/857574.html 续上文[翻译]MSIL 教程(一) ,本文继续讲解数组.分支.循环 ...

  3. 基于python调用libvirt API

    基于python调用libvirt API 1.程序代码 #!/usr/bin/python import libvirt import sys def createConnection(): con ...

  4. 关于python调用zabbix api接口

    因公司业务需要,引进了自动化运维,所用到的监控平台为zbbix3.2,最近正在学习python,计划使用python调用zabbix api接口去做些事情,如生成报表,我想最基本的是要取得zabbix ...

  5. C#调用Win32 api学习总结

    从.NET平台调用Win32 API Win32 API可以直接控制Microsoft Windows的核心,因为API(Application Programming Interface)本来就是微 ...

  6. python 调用zabbix api接口实现主机的增删改查

    python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数. 函数说明: zabbixtools()  调用zabbi ...

  7. 『Python』Python 调用 ZoomEye API 批量获取目标网站IP

    #### 20160712 更新 原API的访问方式是以 HTTP 的方式访问的,根据官网最新文档,现在已经修改成 HTTPS 方式,测试可以正常使用API了. 0x 00 前言 ZoomEye 的 ...

  8. Python调用ansible API系列(四)动态生成hosts文件

    方法一:通过最原始的操作文件的方式 #!/usr/bin/env python # -*- coding: utf-8 -*- """ 通过操作文件形式动态生成ansib ...

  9. python 调用zabbix api实现查询主机信息,输出所有主机ip

    之前发现搜索出来的主机调用zabbix api信息都不是那么明确,后来通过zabbix官方文档,查到想要的api信息,随后写一篇自己这次项目中用到的api. #!/usr/bin/env python ...

随机推荐

  1. Java自学-控制流程 If

    Java的 If 条件语句 条件判断 示例 1 : if if(表达式1){ 表达式2: } 如果表达式1的值是true, 就执行表达式2 public class HelloWorld { publ ...

  2. 记.net core 项目在linux系统下启动失败的一个教训

    最近准备用.net core开发一个项目.使用的是Coldairarrow的框架.做了一部分之后,准备部署到服务器上测试一下.然后就遇到了这个问题. 项目路径: /home/www/webapi/ 启 ...

  3. 钻石diamaund外语

    Whenever I fail as a father or husband... a toy and a diamond always works. I never worry about diet ...

  4. Celery:Monitor

    参考文档:http://docs.celeryproject.org/en/latest/userguide/monitoring.html#guide-monitoring

  5. leetcode 学习心得 (1) (24~300)

    源代码地址:https://github.com/hopebo/hopelee 语言:C++ 24.Swap Nodes in Pairs Given a linked list, swap ever ...

  6. 关于小程序授权地理位置(wx.getLocation + 用户体验)

    wx.getLocation 如果用户曾点击过一次 “确认授权” , 那么再次调用该接口时将不会出现弹出框(可以直接拿到经纬度) 关于用户体验: 在 onLoad 中判断: 如果用户之前“没有触发过“ ...

  7. 使用kubeadm 新加入节点(原始token过期后)---转发

    kubeadm join kubeadm init 安装完成后你会得到以下的输出,使用join指令可以新增节点到集群,此token 有效期为24小时 You should now deploy a p ...

  8. Codeforces G. Bus Number(dfs排列)

    题目描述: Bus Number time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  9. python的pandas库读取csv

    首先建立test.csv原始数据,内容如下 时间,地点 一月,北京 二月,上海 三月,广东 四月,深圳 五月,河南 六月,郑州 七月,新密 八月,大连 九月,盘锦 十月,沈阳 十一月,武汉 十二月,南 ...

  10. pandas 常用方法使用示例

    from pandas import DataFrame import numpy as np import pandas as pd t={ , , np.nan, , np.nan, ], &qu ...