标题:发布个《懒人学C语言》--速成版 此贴有效
取消只看楼主
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
#include <stdio.h>

// 全局变量
// 为啥要在这儿说呢,因为在这儿说最有效果

int a = 4;

void fun1()
{
    printf("全局变量 a=%d\n", a);
}
void fun2()
{
    a += 2; // 等价于a = a+2
}

void fun3()
{
    int a=5;
    printf("局部变量 fun3(){a=%d}\n", a);
}
void main()
{
    printf("全局变量 a=%d\n", a);
    {
        int a=0;
        printf("局部变量 {a=%d}\n", a);
    }
    fun1();
    fun2();
    fun1();
    fun3();
    fun1();
}
全局变量 a=4
局部变量 {a=0}
全局变量 a=4
全局变量 a=6
局部变量 fun3(){a=5}
全局变量 a=6
Press any key to continue


[ 本帖最后由 闲出屁 于 2012-2-4 21:54 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:42
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

// 结构体 伟大的无法形容
// 传说中的,一听都起耳茧子的,学生管理系统

//////////////////////////////////////////////////////////////////////////
// 如何描述一个学生
int id=0;
char szName[20] = "名字";
int nSex;    // 性别,0为女 1为男,当然用bool也行,但是在一些需求下还有其他,也就是未指定
int nShuXue = 70;    // 数学成绩
int nYuWen = 70;    // 语文成绩 (应该不是大学)
int nYingYu = 100;    // 英语成绩

// 这个一看就知道很不爽
// 如果你中war3这类游戏里,描述一个英雄,不痛苦死了
// 最要命的 你如何描述多个学生
//////////////////////////////////////////////////////////////////////////

// 正题:
struct Student
{
    int id;
    char szName[20];
    int nSex;
    int nShuXue;
    int nYuWen;
    int nYingYu;
};

// 输出一个学生的信息
void OutStudentInfo(Student stu)    // 在cpp文件里,编译器按C++语法解析,所以不用在定义Student这个数据类型变量时前加struct
{
    printf("学生信息:\n");
    printf(" ---学号:%d\n", stu.id);
    printf(" ---姓名:%s\n", stu.szName);
    printf(" ---性别:");
    if (stu.nSex == 0)
        printf("");
    else if (stu.nSex == 1)
        printf("");
    else
        printf("未指定");
    printf("\n");
    printf("学生成绩:\n");
    printf(" ---数学:%d\n", stu.nShuXue);
    printf(" ---语文:%d\n", stu.nYuWen);
    printf(" ---英语:%d\n", stu.nYingYu);
}

// 随机初始化一个学生序列
void RandInitStudentInof(Student* pStu, int nLen)
{
    for (int i=0; i<nLen; i++)
    {
        pStu[i].id = i+100;
        strcpy(pStu[i].szName, "学生00");
        pStu[i].szName[strlen("学生00")-2] = (i/10)%10+'0';
        pStu[i].szName[strlen("学生00")-1] = i%10+'0';
        pStu[i].nSex = (rand()%10)/4;    // 0-3为0 4-7为1 8为2 (40%男,40%女,20%未指定)
        pStu[i].nYingYu = rand()%100;
        pStu[i].nYuWen = rand()%100;
        pStu[i].nShuXue = rand()%100;
    }
}

// 输出一个学生信息序列
void OutStudentList(Student* pStu, int nLen)
{
    for (int i=0; i<nLen; i++)
    {
        OutStudentInfo(pStu[i]);
        printf("\n");
    }
}
void main()
{
    struct Student stu1 = {1, "某某某", 1, 20, 20, 10};
    Student stus[3];
    Student* pStus = (Student*)malloc(5*sizeof(Student));

    OutStudentInfo(stu1);
   
    srand(time(0));
    printf("数组:\n");
    RandInitStudentInof(stus, 3);
    OutStudentList(stus, 3);

    printf("\n指针:\n");
    RandInitStudentInof(pStus, 5);
    OutStudentList(pStus, 5);
   
    printf("这里想想,如果一个非常庞大的学生信息,对这个序列插入、删除一个或多个学生怎么办?\n");
    printf("方法当然就是传说中的链表!\n");
    printf("理解这个,去看链表就不难了,资料自己查吧\n");

    free(pStus);
    pStus = NULL;
}
学生信息:
 ---学号:1
 ---姓名:某某某
 ---性别:男
学生成绩:
 ---数学:20
 ---语文:20
 ---英语:10
数组:
学生信息:
 ---学号:100
 ---姓名:学生00
 ---性别:女
学生成绩:
 ---数学:2
 ---语文:1
 ---英语:30

学生信息:
 ---学号:101
 ---姓名:学生01
 ---性别:女
学生成绩:
 ---数学:9
 ---语文:80
 ---英语:26

学生信息:
 ---学号:102
 ---姓名:学生02
 ---性别:女
学生成绩:
 ---数学:37
 ---语文:10
 ---英语:58


指针:
学生信息:
 ---学号:100
 ---姓名:学生00
 ---性别:男
学生成绩:
 ---数学:30
 ---语文:20
 ---英语:40

学生信息:
 ---学号:101
 ---姓名:学生01
 ---性别:男
学生成绩:
 ---数学:27
 ---语文:38
 ---英语:57

学生信息:
 ---学号:102
 ---姓名:学生02
 ---性别:女
学生成绩:
 ---数学:88
 ---语文:40
 ---英语:78

学生信息:
 ---学号:103
 ---姓名:学生03
 ---性别:未指定
学生成绩:
 ---数学:6
 ---语文:89
 ---英语:85

学生信息:
 ---学号:104
 ---姓名:学生04
 ---性别:女
学生成绩:
 ---数学:77
 ---语文:59
 ---英语:16

这里想想,如果一个非常庞大的学生信息,对这个序列插入、删除一个或多个学生怎么办?

方法当然就是传说中的链表!
理解这个,去看链表就不难了,资料自己查吧
Press any key to continue


[ 本帖最后由 闲出屁 于 2012-2-4 21:55 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:42
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
// 来对那个学生管理系统发挥下
// 千万不要小看学生管理系统哦!!
// 同时感受下结构体或者说数据结构的重要性

/************************************************************************/
/* 开发一套学生管理系统                                                        
    需求:    老师可以添删改管理学生的个人信息、每次考试的成绩
            每次考试的科目不一定相同(大学模式) 这一句话就改变了很多事情!!
*/
/************************************************************************/

// 下面给出了我设计的一套简单的数据结构,大家可以思考下
// 为什么这么设计
// 这么设计的话要实现哪些功能
// 如何实现需求的要求
// 都有哪些细节值得去实现
// 有没有更好的设计方法

// 思考下就行了,不建议去动手写,毕竟对于C语言控制台来说,实现这个东西意义不大

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define SORCENUM 20

// 时间
struct Time
{
    int nYear;       
    int nMonth;
    int nDay;
    int nHour;
    int nMinute;
    int nSecond;
};

// 成绩名称列表
struct SorceName
{
    int id;                    // 索引id (一般索引id是不可重复的)
    char szName[50];        // 科目名称

    SorceName* pNext;        // 链表
    SorceName* pFront;
};

// 一科成绩
struct Sorce
{
    int nNameId;            // 科目信息索引,成绩的数据量大,把科目放在一起让成绩索引到科目方便管理
                            // 如果为-1 则说明此科目不存在
    int nSorce;                // 成绩
};

// 所有学生所有成绩的信息
struct SorceList
{
    int id;                    // 索引id
    int nExamId;            // 考试id
    int nStudentId;            // 学生id
    Sorce aSorce[SORCENUM];    // 成绩清单,用Sorce结构的nNameId科目id为-1的特性来解决不定数量的科目问题
                            // 在特定需求下也可以用链表的形式来存储

    SorceList* pNext;        // 链表
    SorceList* pFront;
};

// 考试记录
struct ExamList
{
    int id;                    // 索引id
    Time tm;                // 考试时间
    char szRemark[1024];    // 备注

    ExamList* pNext;        // 链表
    ExamList* pFront;
};
// 学生信息
struct StudentInfo
{
    int id;                    // 索引id
    char szName[20];        // 姓名
    int nSex;                // 性别
    int nAge;                // 年龄
    char szCall[20];        // 电话
    char szEMall[20];        // email
    Time tEnter;            // 入学时间

    StudentInfo* pNext;        // 链表
    StudentInfo* pFront;
};

//----至少你要写这些函数

// 建立学生链表
// 按照指定信息查找学生链表
// 删除一个学生
// 添加一个学生
// 修改一个学生的执行信息

// 建立成绩单链表
// 按照指定信息查找成绩单
// 删除一个成绩单
// 添加一个成绩单
// 修改一个成绩单

// 添加一个科目
// 删除一个科目
// 修改一个科目

// 建立考试链表
// 按照指定信息查找考试链表
// 删除一个考试记录
// 添加一个考试记录
// 修改一个考试记录

 

[ 本帖最后由 闲出屁 于 2012-2-4 21:56 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:43
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
#include <stdio.h>

// C语言的语法部分已经完成了,没有介绍的部分例如goto之类的可以自己查资料看书
// 尤其#include 的使用和要注意的问题,因为用单一页代码的形式不好描述,所以暂不介绍
// 下面要学的是C语言编译器提供的一些库函数
// 在此之前我们已经学过了一些库函数 例如printf getch strlen strcpy等等

// 这些都只是函数,只是代表着一些功能
// main也是一个函数 只不过它比较特别,它是程序运行的起点

// 现在先学如何操作硬盘里的文件 

void main()
{
    FILE* fp = fopen("out.txt", "wt");
    if (fp == NULL)
    {
        printf("文件打开失败!\n");
        return;
    }
    for (int i=0; i<10; i++)
    {
        fprintf(fp, "学生id%d\n", i);
    }   
    fclose(fp);    // 打开的文件一定要关闭,要不有可能会造成文件数据的丢失

    printf("成功保存文件!\n");
}
out.txt文件内容:
学生id0
学生id1
学生id2
学生id3
学生id4
学生id5
学生id6
学生id7
学生id8
学生id9

下面是一个经典的文档,对C/C++具体开发过程中对编程习惯风格有比较好的阐述,非常值得一看:
高质量C++C编程指南.rar (106.67 KB)



[ 本帖最后由 闲出屁 于 2012-2-6 22:02 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:43
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

// 读文件

void main()
{
    FILE* fp = fopen("out.txt", "rt");
    if (fp == NULL)
    {
        printf("文件打开失败!\n");
        return;
    }
    char sz[1024] = "";
    char szBuf[100] = "";
    while (fgets(szBuf, 100, fp) != NULL)
    {
        strcat(sz, szBuf);
    }
    printf("%s\n", sz);

    fclose(fp);   
}
学生id0
学生id1
学生id2
学生id3
学生id4
学生id5
学生id6
学生id7
学生id8
学生id9

Press any key to continue


[ 本帖最后由 闲出屁 于 2012-2-4 21:58 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:43
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
// 能读写文件了,就能做很多事儿了,
// 还记得在讲while那儿写的小游戏吧?里面的排行榜还没有实现,那现在就来实现它
#include <stdio.h>
#include <stdlib.h>    // srand rand system
#include <time.h>    // time
#include <conio.h>

// 读取排行榜
void ReadList(int num[], int nLen)
{
    FILE* fp = fopen("record.txt", "rt");
    if (fp == NULL)
    {
        printf("文件打开错误!\n");
        return;
    }
    char szBuf[100] = "";
    int nCount = 0;
    while (fgets(szBuf, 100, fp) != NULL)
    {
        num[nCount] = atoi(szBuf);    // atoi将字符串转换为整形数字
        nCount ++;
        if (nCount >= nLen)
            break;
    }
    fclose(fp);
}
// 保存排行榜
void SaveList(int num[], int nLen)
{
    FILE* fp = fopen("record.txt", "wt");
    if (fp == NULL)
    {
        printf("文件打开错误!\n");
        return;
    }
   
    for (int i=0; i<nLen; i++)
    {
        fprintf(fp, "%d\n", num[i]);
    }
    fclose(fp);
}
// 对整形数组从小到大排序
void SortInt(int num[], int nLen)
{
    for (int i=0; i<nLen; i++)
    {
        if (num[i] == 0)
            return;
        for (int j=i; j<nLen; j++)
        {
            if (num[j] == 0)
                return;
            if (num[i] > num[j])
            {
                int t = num[i];
                num[i] = num[j];
                num[j] = t;
            }
        }
    }
}
// 在数组的指定位置开始,把这个位置上和后面的所有数组向后移动一个位置
void MoveIntArr(int num[], int nLen, int nStart)
{
    for (int i=nLen-2; i>=nStart; i--)
    {
        num[i+1] = num[i];
    }
}
// 输出排行榜
void ShowList(int num[], int nLen)
{
    printf("排行榜:\n");
    for (int i=0; i<nLen; i++)
    {
        printf(" %2d, %d 次\n", i+1, num[i]);
    }
}
// 将一个成绩插入排行榜中
void InsertList(int num[], int nLen, int nInsert)
{
    SortInt(num, nLen);
    for (int i=0; i<nLen; i++)
    {
        if (num[i] > nInsert || num[i] == 0)
        {
            MoveIntArr(num, nLen, i);
            num[i] = nInsert;
            break;
        }
    }
}
// 主菜单
void MainMenu()
{
    printf("\t我的游戏\n");
    printf("1.开始游戏\n");
    printf("2.排行榜\n");
    printf("3.游戏设置\n");
    printf("4.退出\n");
}

// 游戏过程
void Game()
{
    int nCount = 0;    // 统计猜测次数

    printf("按q退出游戏\n");
    for (int i=0; i<3; i++)    // 猜三次
    {
        printf("开始%d/3论猜测:\n", i+1);
        int r = rand()%10+'0';        // 产生一个0-9的随机字符
        while (1)
        {           
            char input = getch();
            if (input == 'q')   
            {// 输入q 退出游戏
                return;
            }
            else if (input > '9' || input < '0')
            {// 输入错误
                printf("输入错误,重新输入!\n");
            }
            else
            {// 输入0-9 输入正确。
                nCount++;
                printf("您输入的是:%c,", input);
                if (input > r)
                    printf("大于正确结果!\n");
                else if (input < r)
                    printf("小于正确结果!\n");
                else
                {
                    printf("恭喜你猜对了!\n");
                    break;        // 跳出while循环
                }
            }
        }
    }
    printf("您猜了%d次!\n", nCount);

    // 保存至排行榜
    int num[10] = {0};
    ReadList(num, 10);
    InsertList(num, 10, nCount);
    SaveList(num, 10);
}

// 开始游戏
void Start()
{
    printf("系统产生一个0-9的数,请您对其猜测!\n");
    printf("按任意键开始游戏!\n");
    getch();
    Game();   
    printf("游戏结束\n");
    getch();
}

// 继续游戏
void Goon()
{
    int num[10] = {0};
    ReadList(num, 10);
    ShowList(num, 10);
    getch();
}

// 游戏设置
void Set()
{
    printf("游戏设置\n");
    printf("\t游戏声音\n");
    printf("\t游戏画面\n");
    printf("\t游戏难度\n");
    getch();
    printf("保存设置\n");
}

// 退出
bool Quit()
{
    printf("您确定要退出程序么?\n输入y/Y确定退出程序,其他键取消退出操作!:\n");
    char input = getch();
    if (input == 'y' || input == 'Y')
    {
        printf("您退出了游戏!\n");
        getch();
        return true;
    }
    return false;
}

// 初始化
void Init()
{
    srand(time(0));
}

// 开始
void Enter()
{
    while (1)
    {
        system("cls");
        MainMenu();

        char input = getch();    // 在VC/VS的cpp文件里,可以把变量声明放到程序过程中
        system("cls");
        switch (input)
        {
        case '1':
            {
                Start();
                break;
            }
        case '2':
            {
                Goon();
                break;
            }
        case '3':
            {
                Set();
                break;
            }
        case '4':
            {
                if (Quit())
                    return;
                else
                    break;
            }
        default:
            {
                printf("\a");
                break;
            }
        }
    }
}
void main()
{
    Init();
    Enter();
}
排行榜:
  1, 10 次
  2, 12 次
  3, 12 次
  4, 12 次
  5, 18 次
  6, 0 次
  7, 0 次
  8, 0 次
  9, 0 次
 10, 0 次


[ 本帖最后由 闲出屁 于 2012-2-13 12:37 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:43
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
// 将内容显示在网页上

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <windows.h>

void main()
{
    int num[20][15] = {0};
    int x = 0;
    int y = 0;
   
    srand(time(0));    // 初始化随机种子
   
    // 初始化棋盘
    for (x=0; x<20; x++)
    {
        for (y=0; y<15; y++)
        {
            int r = rand()%8;    // 0-5为空 6为● 7为○ 这么设计是为了增加为空的概率
            num[x][y] = r;
        }
    }
   
    // 输出这个棋盘
    for (x=0; x<20; x++)
    {
        for (y=0; y<15; y++)
        {
            if (num[x][y] == 6)
                printf("");
            else if (num[x][y] == 7)
                printf("");
            else
                printf(" ");
        }
        printf("\n");
    }

    // 都是棋盘程序部分
    //////////////////////////////////////////////////////////////////////////
    // 将棋盘内容输出到网页中
    FILE* fp = fopen("qipan.html", "wt");
    if (fp == NULL)
    {
        printf("文件打开错误!\n");
        return;
    }
   
    fprintf(fp, "<html>\n<head>\n<title>懒人学C语言-棋盘输出</title>\n</head>\n<body>\n");
    fprintf(fp, "<table width=\"%d\" border=0 cellspacing=0 cellpadding=0>", 15*20);
    // 输出这个棋盘
    for (x=0; x<20; x++)
    {
        fprintf(fp, "<tr height=20>");
        for (y=0; y<15; y++)
        {
            fprintf(fp, "<td width=20>");
            if (num[x][y] == 6)
                fprintf(fp, "");
            else if (num[x][y] == 7)
                fprintf(fp, "");
            else
                fprintf(fp, " ");
            fprintf(fp,"</td>");
        }
        fprintf(fp,"</tr>");
    }
    fprintf(fp, "</table>\n</body>\n</html>");
    fclose(fp);

    // 打开网页
    char szPath[1024] = "";
    GetCurrentDirectory(1024, szPath);
    strcat(szPath, "\\qipan.html");
    ShellExecute(NULL, "open", "iexplore.exe", szPath, NULL, SW_SHOWNORMAL);
}





[ 本帖最后由 闲出屁 于 2012-2-4 23:40 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:43
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
// 用win api(就是windows提供的函数)创建一个简单的窗口
// 这个窗口暂时还什么都干不了
#include <windows.h>

void main()
{
    HWND hWnd = NULL;
    // 创建窗口
    hWnd = CreateWindow("STATIC", "XX", WS_OVERLAPPEDWINDOW, 100, 100, 400, 300, NULL, NULL, NULL, NULL);
    if (hWnd == NULL)
    {
        // 弹出失败消息
        MessageBox(NULL, "创建窗口失败", "信息", MB_OK);
    }
    else
    {
        ShowWindow(hWnd, SW_SHOW);
        MessageBox(NULL, "创建窗口成功", "信息", MB_OK);
    }
}



[ 本帖最后由 闲出屁 于 2012-2-4 23:51 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:43
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
// 窗口在创建前要在系统中对其注册才能正常的处理窗口消息 这回窗口啥都能干了
#include <windows.h>

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    return DefWindowProc(hWnd, message, wParam, lParam);
}

// 注册窗口信息
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;
   
    wcex.cbSize = sizeof(WNDCLASSEX);                // WNDCLASSEX 的大小。
   
    wcex.style            = CS_HREDRAW | CS_VREDRAW;    // 从这个窗口类派生的窗口具有的风格。
    wcex.lpfnWndProc    = (WNDPROC)WndProc;            // 窗口处理函数的指针
    wcex.cbClsExtra        = 0;                        // 指定紧跟在窗口类结构后的附加字节数。
    wcex.cbWndExtra        = 0;                        // 指定紧跟在窗口事例后的附加字节数。
    wcex.hInstance        = hInstance;                // 本模块的事例句柄。
    wcex.hIcon            = NULL;                        // 图标的句柄。
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);    // 光标的句柄。
    wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW);        // 背景画刷的句柄。
    wcex.lpszMenuName    = NULL;                            // 指向菜单的指针。
    wcex.lpszClassName    = "STATIC";                        // 指向类名称的指针。
    wcex.hIconSm        = NULL;                            // 和窗口类关联的小图标。
   
    return RegisterClassEx(&wcex);        // 注册窗口
}

void main()
{
    MyRegisterClass(GetModuleHandle(NULL));

    // 创建窗口
    HWND hWnd = CreateWindow("STATIC", "XX", WS_OVERLAPPEDWINDOW, 100, 100, 400, 300, NULL, NULL, NULL, NULL);
    if (hWnd == NULL)
        return;
    ShowWindow(hWnd, SW_SHOW);

    // 建立windows消息处理循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}


ProName.rar (10.65 KB)



[ 本帖最后由 闲出屁 于 2012-2-5 00:05 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:43
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
// 窗口在创建前要在系统中对其注册才能正常的处理窗口消息
#include <windows.h>
#include <math.h>

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_PAINT:
        {
            // 根据窗口大小改变形状
            HDC hDC = GetDC(hWnd);    // 获得窗口绘图DC
           
            RECT rect;
            GetWindowRect(hWnd, &rect);
            int nWidth = rect.right-rect.left;
            int nHieght = rect.bottom-rect.top;

            HPEN hPen;
            HPEN hOldPen;
            HBRUSH hBrush;
            HBRUSH hOldBrush;
            for (int i=1; i<6; i++)
            {
                hPen = CreatePen(PS_SOLID, 1, RGB(100, 200, 100));        // 创建一个画笔
                hOldPen = (HPEN)SelectObject(hDC, hPen);                // 让DC选择此画笔
                hBrush = CreateSolidBrush(RGB(100, 100, 250));
                hOldBrush = (HBRUSH)SelectObject(hDC, hBrush);
               
                int oldX = 0;
                int oldY = 0;
                int x = 0;
                int y = 0;
                for (int j=10; j<181; j+=1)
                {
                   
                    x += 4*sin(j/2.0-i/20.0)+2;
                    y += 4*cos(j/2.0+i/20.0)+2;               
                       
                    double dsw = nWidth/20.0;
                    double dsh = nHieght/20.0;

                    MoveToEx(hDC, nWidth/2-oldX-j*sin((j-1)/dsw), nHieght/2-oldY-j*cos((j-1)/dsh), NULL);
                    LineTo(hDC, nWidth/2-x-j*sin(j/dsw), nHieght/2-y-j*cos(j/dsh));
                   
                    Ellipse(hDC, nWidth/2+j*cos(j/dsw)-6, nHieght/2+j*cos(j/dsh)-6
                        , nWidth/2+j*cos(j/dsw)+6, nHieght/2+j*cos(j/dsh)+6);

                    oldX = x;
                    oldY = y;
                }               
               
                SelectObject(hDC, hOldBrush);   
                SelectObject(hDC, hOldPen);   
            }
           
            ReleaseDC(hWnd, hDC);    // 释放DC

            break;
        }
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}

// 注册窗口信息
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;
   
    wcex.cbSize = sizeof(WNDCLASSEX);                // WNDCLASSEX 的大小。
   
    wcex.style            = CS_HREDRAW | CS_VREDRAW;    // 从这个窗口类派生的窗口具有的风格。
    wcex.lpfnWndProc    = (WNDPROC)WndProc;            // 窗口处理函数的指针
    wcex.cbClsExtra        = 0;                        // 指定紧跟在窗口类结构后的附加字节数。
    wcex.cbWndExtra        = 0;                        // 指定紧跟在窗口事例后的附加字节数。
    wcex.hInstance        = hInstance;                // 本模块的事例句柄。
    wcex.hIcon            = NULL;                        // 图标的句柄。
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);    // 光标的句柄。
    wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW);        // 背景画刷的句柄。
    wcex.lpszMenuName    = NULL;                            // 指向菜单的指针。
    wcex.lpszClassName    = "STATIC";                        // 指向类名称的指针。
    wcex.hIconSm        = NULL;                            // 和窗口类关联的小图标。
   
    return RegisterClassEx(&wcex);        // 注册窗口
}

void main()
{
    MyRegisterClass(GetModuleHandle(NULL));

    // 创建窗口
    HWND hWnd = CreateWindow("STATIC", "XX", WS_OVERLAPPEDWINDOW, 100, 100, 400, 300, NULL, NULL, NULL, NULL);
    if (hWnd == NULL)
        return;
    ShowWindow(hWnd, SW_SHOW);

    // 建立windows消息处理循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}





[ 本帖最后由 闲出屁 于 2012-2-5 01:10 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-360404-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.441767 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved