windows(API)绘图《旋转的风车》

   这正是秋季将尽, 冬季未到的时候。 黄土高坡上应该已滚起了漫天黄土, 而这里却是万里晴空如连! 风, 丝丝入骨! 未央柳即将枯死的枝条,仍在挣扎。 街道两旁清一色的银杏树叶, 金灿耀眼。 耀的令人感动, 感动的令人心碎! 很显然,这是一个悲伤的人, 和一个悲伤的故事。

   为什么我眼里常含泪水, 因为我对这C艹爱的深沉。先交代一下故事背景, 就是我们老师用了一节课的时间, 给我们讲了一下windows编程(god! 要知道类和对象她都还没讲清楚啊!) 。 然后, 老师就布置了一道作业, 就是《旋转的风车》, TM -_-||。 无奈只有自己看textbook啦。 卧槽! 这是TMD什么? 。 只有两个示例。what should I do? ,无奈, 只有强行乱写一下啦! 心疼~~~~

/* ***********************************************
Author     :   Cao Tan Xiao Ke
Language :   C++
project  :   The windmills
************************************************ */

// caoTanXiaoKe.cpp : Define the application‘s entry point。
//

#include "stdafx.h"
#include "caoTanXiaoKe.h"
#include <windows.h>
#include <cstdlib>
#include <cstring>
#include <cmath>
/*************************************************************************************
                            some constants 

**************************************************************************************/
#define Pi 3.1415626
const int cir = 81;
const double angle = 0.2;
int T = 0;
POINT nodes[105], nodes2[105], nodes3[105];              // define the coordinates of the stiangle                                                

/***************************************************************************************
                            make a window

****************************************************************************************/
long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR IpCmdLine, int nCmdShow)
{
    MSG Message;
    HWND hWnd;
    WNDCLASS WndClass;
    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH));   //white background
    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WndClass.hIcon = LoadIcon(NULL,"END");
    WndClass.hInstance = hInstance;
    WndClass.lpfnWndProc = WndProc;
    WndClass.lpszClassName="SPin";
    WndClass.lpszMenuName = NULL;
    WndClass.style = 0;
    if(!RegisterClass(&WndClass))
    {
        MessageBeep(0);
        return FALSE;
    }
    hWnd = CreateWindow(("SPin"),                        //create a window
                         ("旋转的风车"),
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT,
                          0,
                          CW_USEDEFAULT,
                          0,
                          NULL,
                          NULL,
                          hInstance,
                          NULL);
    ShowWindow(hWnd, nCmdShow);                            // show in window
    UpdateWindow(hWnd);                                    // Update and map the user area

    /***************************************************************************
                        the points of the pictures
    ***************************************************************************/

        nodes[0].x = 0;
        nodes[0].y = 0;
        nodes[1].x = 140;
        nodes[1].y = 75;
        nodes[2].x = 250;
        nodes[2].y = 80;

        for(int i=3; i<=100; i++)
        {
            nodes[i].x = (long)(nodes[i-3].x*cos(2.0*Pi/3)+nodes[i-3].y*sin(2.0*Pi/3));
            nodes[i].y = (long)(nodes[i-3].y*cos(2.0*Pi/3)-nodes[i-3].x*sin(2.0*Pi/3));
        }

        for(int i=0; i<=8; i++)
        {
            nodes2[i].x = (long)(nodes[i].x*cos(angle)+nodes[i].y*sin(angle));
            nodes2[i].y = (long)(nodes[i].y*cos(angle)-nodes[i].x*sin(angle));
            nodes3[i].x = (long)(nodes[i].x*cos(angle)+nodes[i].y*sin(angle))+550;
            nodes3[i].y = (long)(nodes[i].y*cos(angle)-nodes[i].x*sin(angle));
        }

        for(int j=9; j<=100; j+=9)
        {
            for(int i=0; i<=8; i++)
            {
                nodes[i].x = (long)(nodes[i].x*cos(angle)+nodes[i].y*sin(angle)*(1.25));
                nodes[i].y = (long)(nodes[i].y*cos(angle)-nodes[i].x*sin(angle)*(1.25));
                nodes2[j+i].x = nodes[i].x;
                nodes2[j+i].y = nodes[i].y;
                nodes3[j+i].x = nodes[i].x+550;
                nodes3[j+i].y = nodes[i].y;
            }
        }

    /**************************************************************************
                                a part of window
    ***************************************************************************/

    while(GetMessage(&Message, 0, 0, 0))                 //消息循环
    {
        TranslateMessage(&Message);
        DispatchMessage(&Message);
    }

    return Message.wParam;
}

long WINAPI WndProc(HWND hWnd, UINT iMessage, UINT wParam, LONG lParam)        //消息处理函数
{
    HDC hDC;                                // 定义指向设备描述表的句柄
    HBRUSH hBrush;                            // 定义指向画刷的句柄
    HPEN hPen;                                // 定义指向画笔的句柄
    PAINTSTRUCT PtStr;                        // 定义指向包含绘图信息的结构体变量
    switch(iMessage)                        // 处理变量
    {
        case WM_PAINT:                        // 处理绘图消息
        hDC = BeginPaint(hWnd, &PtStr);        // 获得设备环境指针
        SetWindowOrgEx(hDC, -300, -250, NULL);    //设置原点坐标为(-300, -250)
        hPen=CreatePen(PS_INSIDEFRAME, 1, RGB(0, 0, 0));
        SelectObject(hDC, hPen);            // 选择画笔
        /*********************************************************************
                              draw your pictures
        ***********************************************************************/
        Rectangle(hDC, -5, -25, 5, 500);
        Ellipse(hDC, -10, -10, 10, 10);

        Rectangle(hDC, 545, -25, 555, 500);
        Ellipse(hDC, 540, -10, 560, 10);

            hPen=CreatePen(PS_INSIDEFRAME, 1, RGB(255, 0, 0)); // 创建红色画笔
            hBrush=CreateSolidBrush(RGB(225, 0, 0)); //创建红色画刷
            SelectObject(hDC, hBrush);    // 选入画刷
            SelectObject(hDC, hPen);    // 选入画笔
            Polygon(hDC, nodes2+T*3%cir, 3);    //
            hBrush=CreateSolidBrush(RGB(0, 0, 0)); //
            SelectObject(hDC, hBrush);    // 选入画刷
            Polygon(hDC, nodes3+18+T*3%cir, 3);

            hPen=CreatePen(PS_INSIDEFRAME, 1, RGB(0, 0, 255)); // 创建绿色画笔
            hBrush=CreateSolidBrush(RGB(0, 255, 0)); //创建绿色画刷
            SelectObject(hDC, hBrush);    // 选入画刷
            SelectObject(hDC, hPen);    // 选入画笔
            Polygon(hDC, nodes2+3+T*3%cir, 3);    //
            hBrush=CreateSolidBrush(RGB(255, 255, 33));
            SelectObject(hDC, hBrush);    // 选入画刷
            Polygon(hDC, nodes3+3+18+T*3%cir, 3);

            hPen=CreatePen(PS_INSIDEFRAME, 1, RGB(0, 0, 255)); // 创建蓝色画笔
            hBrush=CreateSolidBrush(RGB(0, 0, 255)); //创建蓝色画刷
            SelectObject(hDC, hBrush);    // 选入画刷
            SelectObject(hDC, hPen);    // 选入画笔
            Polygon(hDC, nodes2+6+T*3%cir, 3);
            hBrush=CreateSolidBrush(RGB(255, 99, 255)); //创建红色画刷
            SelectObject(hDC, hBrush);    // 选入画刷
            Polygon(hDC, nodes3+6+18+T*3%cir, 3);

        T++;
        DeleteObject(hPen);            // 删除画笔
        DeleteObject(hBrush);        // 删除画刷
        EndPaint(hWnd, &PtStr);        // 删除设备环境指针
        if(T<5)
        Sleep(100);                    // ----------------> 延时函数
        else if(T<80)
            Sleep(100-T);
        else if(T<850)
            Sleep(10);
        else if(T<=1000)
            Sleep(T-840);
        if(T<=1000) InvalidateRect(hWnd, NULL, 1);
        return 0;
case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
default:
        return(DefWindowProc(hWnd, iMessage, wParam, lParam));
    }
}
时间: 2024-08-04 07:15:39

windows(API)绘图《旋转的风车》的相关文章

Windows API 大全

常用Windows API1. API之网络函数WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接WNetCancelConnection2 结束一个网络连接WNetCloseEnum 结束一次枚举操作WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDis

Windows API参考大全新编

书名:新编Windows API参考大全 作者:本书编写组 页数:981页 开数:16开 字数:2392千字 出版日期:2000年4月第二次印刷 出版社:电子工业出版社 书号:ISBN 7-5053-5777-8 定价:98.00元 内容简介 作为Microsoft 32位平台的应用程序编程接口,Win32 API是从事Windows应用程序开发所必备的.本书首先对Win32 API函数做完整的概述:然后收录五大类函数:窗口管理.图形设备接口.系统服务.国际特性以及网络服务:在附录部分,讲解如何

WINDOWS API函数说明

Windows API函数大全,从事软件开发的朋友可以参考下 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个

Windows API 编程学习记录&lt;三&gt;

恩,开始写API编程的第三节,其实马上要考试了,但是不把这节写完,心里总感觉不舒服啊.写完赶紧去复习啊       在前两节中,我们介绍了Windows API 编程的一些基本概念和一个最基本API函数 MessageBox的使用,在这节中,我们就来正式编写一个Windows的窗口程序. 在具体编写代码之前,我们必须先要了解一下API 编写窗口程序具体的三个基本步骤:             1. 注册窗口类:             2.创建窗口:             3.显示窗口: 恩,

Essential Diagram for Windows Forms绘图控件图解及下载地址

Essential Diagram for Windows Forms是一款可扩展的.高性能的.NET平台下的绘图控件,可用于开发像Microsoft Visio一样的交互式地绘图和图解应用程序,在节点存储图形对象,支持矢量和光栅图形. 具体功能: 支持多种导出格式:如位图.增强的元文件.SVG文件格式 控件采用清晰的MVC设计,把数据层.表现层和用户层分离 子节点属性可以从父节点继承,开发人员可以应用属性值到一个节点或所有子节点 支持在运行时添加自定义属性 多种线条节点和连接器,支持多种连接线

在VBA中使用Windows API

VBA是一种强大的编程语言,可用于自定义Microsoft Office解决方案.通过使用VBA处理一个或多个Office应用程序对象模型,可以容易地修改Office应用程序的功能或者能够使两个或多个Office应用程序协同工作以完成单个应用程序无法完成的任务.然而,使用VBA仅能控制操作系统的一小部分.Windows API提供了控制操作系统绝大多数方面的功能.下面,介绍在VBA中使用Windows API的一些知识. 理解APIs API只是一组函数,可用于处理组件.应用程序或操作系统.通常

C#调用Windows API详解(上)

以前我写过通过WMI来获取有关系统信息的系列文章,确实通过WMI能够恨轻易地实现很多我们想实现的功能,不过有些情况下我们很难利用WMI来实现一些 复杂的功能,比如最近我做的一个项目,其中有一个功能就是要更改系统当前时间,利用WMI就很难实现(我没有找到相关的方法),还有一些其它方面的功能, 也比较难以通过WMI来实现,也许是WMI需要较高的权限才能执行的原因吧.所以,尽管我们不愿意,但是又不得不通过调用Windows 的API来实现.本文的目的就是讲述如何在C#中调用Windows的系统API.

windows API中CreateWindow()函数详解

CreateWindow函数详解 在注册完窗口类后就需要进行窗口的创建,用到的函数理所当然就是CreateWindow(), 而这个函数是基于窗口类的,所以还需要指定几个参数来制定特定的窗口.而且像一些不带边框的窗口是怎么创建的也是具有相当的技巧的,就是创建的是不带标题和边框的窗口,然后自己在客户区绘制程序的内容,能够制作个性化的应用程序. API解释 该函数创建一个重叠式窗口.弹出式窗口或子窗口.它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小(可选的).函数也指该窗口的父窗口或所属

C、C++控制台程序、Windows API程序、MFC程序理解与比较

在编程语言中,函数是一个很重要的概念,其身影无处不在.在面向过程的编程方式中,函数更是程序的基本构建模块,在面向对象的编程方式中,函数演变为类或对象的成员(当然也可以使用与类无关的函数).函数由函数头和函数体组成.函数头包括域属性(如external.static或类域).返回值类型.函数名.及参数.域属性包括其在多文件编程中的可见范围,是否是属于某一个类的成员?返回值类型是指函数返回的值的具体数据类型(可以理解为函数输出的一部分).函数名是函数保存在内存代码区的首地址,用于函数的调用及函数指针