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. JS构造函数new的过程

    造函数其实和普通函数本质上并无区别,唯一的区别有两个: 函数首字母大写,这个区别只是约定俗成的,便于区分.你实在要小写定义构造函数也完全没问题,所以这个区别可以忽略. 构造函数的调用需要用new操作符 ...

  2. vue 数据更新问题

    在uni-app构建选项卡时,方法中改变的数组数据 无法更新v-if中的布尔值 在函数中打印出来是修改成功了,但在页面中并没有进行响应 布局如下: <swiper :current=" ...

  3. 视频网站大杂烩--HTML+CSS练手项目1【Frameset】

    [本文为原创,转载请注明出处] 技术[CSS+HTML]   布局[Frameset] -------------------------------------------------------- ...

  4. Java 之 ServletContext 对象

    ServletContext 对象 一.概念 ServletContext对象:代表整个 web 应用,可以和程序的容器(服务器)来通信. 二.获取 1.通过request 获取 方法: reques ...

  5. HTTP协议学习总结

    一个web应用程序,往往是通过http协议进行前后端通信的.而作为一个web工程师,掌握HTTP协议因此也是Web开发必备的一项技能了,尤其是在工作了一定年限之后,更是深感该知识点的重要性.因此,将以 ...

  6. 魅族手机使用应用沙盒一键修改imsi数据

    较早前文章介绍了怎么在安卓手机上安装激活XPosed框架,XPosed框架的牛逼之处功能各位都介绍过,可以不修改apk的前提下,修改系统内核的参数,打比方在某些应用领域,各位需要修改手机的某个系统参数 ...

  7. element ui axios使用formdata提交数据

    axios({ //formdata提交 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, transformRequ ...

  8. Linux一些服务的启动命令

    http:服务service httpd start 启动 service httpd restart 重新启动 service httpd stop 停止服务 启动ssh服务 # /etc/init ...

  9. 泛微 e-cology OA 远程代码执行漏洞复现

    0x00 前言 Poc已在github公开,由于环境搭建较为复杂,所以我在空间搜索引擎中找了国外的网站进行复现 如果有想自行搭建环境复现的可以在公众号内回复“泛微环境”即可获取源码及搭建方式 0x01 ...

  10. ServicePoint 类

    地址:https://docs.microsoft.com/zh-cn/dotnet/api/system.net.servicepoint?view=netframework-4.7.2 提供 HT ...