Python调用win32 API绘制正弦波
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绘制正弦波的更多相关文章
- 使用Python调用Flickr API抓取图片数据
Flickr是雅虎旗下的图片分享网站,上面有全世界网友分享的大量精彩图片,被认为是专业的图片网站.其API也很友好,可以实现多种功能.这里我使用了Python调用其API获得了大量的照片数据.需要注意 ...
- MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API(转)
转自:http://www.cnblogs.com/Yahong111/archive/2007/08/16/857574.html 续上文[翻译]MSIL 教程(一) ,本文继续讲解数组.分支.循环 ...
- 基于python调用libvirt API
基于python调用libvirt API 1.程序代码 #!/usr/bin/python import libvirt import sys def createConnection(): con ...
- 关于python调用zabbix api接口
因公司业务需要,引进了自动化运维,所用到的监控平台为zbbix3.2,最近正在学习python,计划使用python调用zabbix api接口去做些事情,如生成报表,我想最基本的是要取得zabbix ...
- C#调用Win32 api学习总结
从.NET平台调用Win32 API Win32 API可以直接控制Microsoft Windows的核心,因为API(Application Programming Interface)本来就是微 ...
- python 调用zabbix api接口实现主机的增删改查
python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数. 函数说明: zabbixtools() 调用zabbi ...
- 『Python』Python 调用 ZoomEye API 批量获取目标网站IP
#### 20160712 更新 原API的访问方式是以 HTTP 的方式访问的,根据官网最新文档,现在已经修改成 HTTPS 方式,测试可以正常使用API了. 0x 00 前言 ZoomEye 的 ...
- Python调用ansible API系列(四)动态生成hosts文件
方法一:通过最原始的操作文件的方式 #!/usr/bin/env python # -*- coding: utf-8 -*- """ 通过操作文件形式动态生成ansib ...
- python 调用zabbix api实现查询主机信息,输出所有主机ip
之前发现搜索出来的主机调用zabbix api信息都不是那么明确,后来通过zabbix官方文档,查到想要的api信息,随后写一篇自己这次项目中用到的api. #!/usr/bin/env python ...
随机推荐
- Pycharm中连接数据库乱码问题解决
当我们使用pycharm建立数据库之后,看到里面的数据都是乱码,就像下面一样: 其实这个并不是pycharm的显示问题,而是建立数据库时产生的. 解决方法是到指定字符集的命令提示符中重新建表并指定字符 ...
- Docker搭建私用仓库
搭建私有仓库 # 1.查找registry,官方的私用仓库镜像 docker search registry # 2.下载私有仓库镜像 docker pull registry # 3.创建并后台运行 ...
- Tomcat+Nginx+Memcached综合案例
Tomcat+Nginx+Memcached综合案例 说明 通过Nginx解析静态页面并将动态负载均衡调度给后面的多个Tomcat,Tomcat解析java动态程序. 由于http是无状态的协议,你访 ...
- Struts2漏洞导致的反弹shell——青藤云安全使用的是agent进程采集器进行检测
安全老司机 | Struts2漏洞爆发后,与黑客的一次正面交锋 from:https://zhuanlan.zhihu.com/p/66122521 备注: 青藤云安全:——用的是进程信息采集器 通 ...
- C#使用ODP.NET(Oracle.ManagedDataAccess.dll)操作Oracle数据库
在刚接触C#的时候由于公司使用的就是Oracle数据库,那么C#怎么连接Oracle数据库就成了首要去掌握的知识点了.在那时没有ODP.NET,但visual studio却对Oralce数据库的调用 ...
- vue中引入.svg图标,使用iconfont图标库
阿里巴巴的iconfont是一个很好的图标库,海量的素材可以快速满足开发人员日常对图标的诉求,我们采用symbol引用,官方介绍 创建SvgIcon组件 <template> <sv ...
- 20199301《Linux内核原理与分析》第十一周作业
Linux Capability探索实验 一.实验描述 本实验中,将感受到linux capability功能在访问控制上的优势,掌握使用Capability达到遵守最小权限原则的目的,并分析linu ...
- MySql常用函数大全
MySql常用函数大全 MySQL数据库中提供了很丰富的函数.MySQL函数包括数学函数.字符串函数.日期和时间函数.条件判断函数.系统信息函数.加密函数.格式化函数等.通过这些函数,可以简化用户的操 ...
- 宽带DOA估计方法
Wideband DOA Estimation. 语音信号以及野外的车辆信号的声音都是宽带信号,所以传统的窄带DOA算法(MUSIC,ESPRIT等)都不适用.需要采用宽带DOA算法来计算目标信号的波 ...
- LeetCode 979. Distribute Coins in Binary Tree
原题链接在这里:https://leetcode.com/problems/distribute-coins-in-binary-tree/ 题目: Given the root of a binar ...