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基础之设置随机成语验证码

    package com.oracle; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import ja ...

  2. Linux Samba服务器的安装

    Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,也可以用于Linux与Linux之间的资源共享 安装 # yum install samba samba-cli ...

  3. 刷脸支付袭来,WeChat Pay & AliPay争宠,究竟谁能笑到最后?

    移动支付的快速发展,让我们摆脱了对现金的依赖,即使我们出门忘记带现金,那也没关系,我们照样可以通过手机来完成支付.现如今无论是大商场.还是水果摊都支持二维码付款,这也就意味着智慧化的生活正在一步步地向 ...

  4. Gtest:Using visual studio 2017 cross platform feature to compile code remotely

    参考:使用Visual Studio 2017作为Linux C++开发工具 前言 最近在学Gtest单元测试框架,由于平时都是使用Source Insight写代码,遇到问题自己还是要到Linux下 ...

  5. MySQL/MariaDB数据库的索引工作原理和优化

    MySQL/MariaDB数据库的索引工作原理和优化 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际工作中索引这个技术是影响服务器性能一个非常重要的指标,因此我们得花时间去了 ...

  6. 微信小程序校验文件在浏览器无法打开

    txt文件放在网站根目录后浏览器无法打开,同一目录的其他txt文件却可以打开.我试过了修改文件权限.修改所有者.修改文件编码等各种办法都没有用. 最后找到了.htaccess文件,原来在这个文件里修改 ...

  7. 关于python模块总结

    名词解释 模块(module):在python中,一个.py文件就是一个模块 包(package):为了避免模块名冲突,Python又引入了按目录来组织模块的方法.当目录下存在__init__.py, ...

  8. Codeforces I. Inna and Nine(组合)

    题目描述: Inna and Nine time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. tkinter代码正式版

    可以绘图了. import json import tkinter as tk from tkinter import filedialog from tkinter import LabelFram ...

  10. Django REST framework —— 认证组件源码分析

    我在前面的博客里已经讲过了,我们一般编写API的时候用的方式 class CoursesView(ViewSetMixin,APIView): pass 这种方式的有点是,灵活性比较大,可以根据自己的 ...