Windows系统功能模拟 C++(EasyX插件)—— 8th 窗口(二)

来源:互联网 发布:windows共享文件夹 编辑:程序博客网 时间:2024/05/21 11:01

这次要做的就是窗口主体。


窗口主体就是有白色填充造成,周围有蓝色线。
其实跟上一篇差不多,需要的就是跟根据窗口坐标和窗口宽度、高度来进行绘画。

直接放代码。

#pragma warning(disable: 4996)#include <windows.h>   //系统相关#include <stdio.h>#include <graphics.h>      //图形库#include <ctime>#include <iostream>#include <stdlib.h>#include <conio.h>#include <fstream>     //文件读写#include <time.h>      //随机数#include <iomanip>     //输出格式#include <direct.h>    //创建文件夹用 不推荐using namespace std;   //使用后可以省略名字空间MOUSEMSG m; // 定义鼠标消息HANDLE hEvent;// 获取标准输入输出设备句柄  HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);DWORD           dwRes, dwState = 0;INPUT_RECORD    keyRec;COORD           crHome = { 0, 0 }, crPos;bool            bCaps, bNum, bScroll;char            ch;CONSOLE_SCREEN_BUFFER_INFO bInfo;int i, j;int 窗口i, 窗口j;int 开始按钮状态 = 0;int 开始菜单状态 = 0;int 窗口x=100;int 窗口y=100;int 窗口宽 = 200;int 窗口高 = 100;DWORD WINAPI DXC1(LPVOID lpParam){    IMAGE 壁纸;   // 定义 IMAGE 对象    loadimage(&壁纸, "G:\\程序制作\\Windows系统模拟\\素材\\壁纸.jpg");    IMAGE 开始菜单; // 定义 IMAGE 对象    loadimage(&开始菜单, "G:\\程序制作\\Windows系统模拟\\素材\\开始菜单.jpg");    IMAGE 开始按钮0;    // 定义 IMAGE 对象    loadimage(&开始按钮0, "G:\\程序制作\\Windows系统模拟\\素材\\开始按钮0.jpg");    IMAGE 开始按钮1;    // 定义 IMAGE 对象    loadimage(&开始按钮1, "G:\\程序制作\\Windows系统模拟\\素材\\开始按钮1.jpg");    IMAGE 开始按钮2;    // 定义 IMAGE 对象    loadimage(&开始按钮2, "G:\\程序制作\\Windows系统模拟\\素材\\开始按钮2.jpg");    IMAGE 最小化按钮;    // 定义 IMAGE 对象    loadimage(&最小化按钮, "G:\\程序制作\\Windows系统模拟\\素材\\最小化按钮.jpg");    IMAGE 关闭按钮0;    // 定义 IMAGE 对象    loadimage(&关闭按钮0, "G:\\程序制作\\Windows系统模拟\\素材\\关闭按钮0.jpg");    Sleep(100);    while (true)    {        // 获取一条鼠标消息        m = GetMouseMsg();        switch (m.uMsg)        {        case WM_LBUTTONDOWN:            //开始按钮              if (m.x > -1 && m.x < 61 && m.y>669 && m.y < 721)            {                开始按钮状态 = 1;                if (开始菜单状态 == 0)                {                    开始菜单状态 = 1;                }                else if (开始菜单状态 == 1)                {                    开始菜单状态 = 0;                    for (i = 181; i < 670; i++)                    {                        setcolor(WHITE);                        line(0, i, 926, i);                    }                    putimage(0, 0, &壁纸, SRCAND);//防止壁纸被覆盖后无法再出现                }            }            if (开始菜单状态 == 1)            {                if (m.x > 926 || m.y>670 || m.y < 182)                {                    if (m.x > 60)                    {                        开始菜单状态 = 0;                        for (i = 181; i < 670; i++)                        {                            setcolor(WHITE);                            line(0, i, 926, i);                        }                        putimage(0, 0, &壁纸, SRCAND);//防止壁纸被覆盖后无法再出现                    }                }            }        }        //窗口        setcolor(RGB(15, 162, 195));        line(窗口x, 窗口y, 窗口x + 窗口宽, 窗口y);        setcolor(RGB(0, 152, 189));        setfillcolor(RGB(0, 152, 189));        fillrectangle(窗口x, 窗口y, 窗口x + 窗口宽, 窗口y + 37);        setcolor(WHITE);        setfillcolor(WHITE);        fillrectangle(窗口x + 窗口宽 - 76, 窗口y, 窗口x + 窗口宽 - 38, 窗口y + 37);        setcolor(WHITE);        setfillcolor(WHITE);        fillrectangle(窗口x + 窗口宽 - 38, 窗口y, 窗口x + 窗口宽 - 1, 窗口y + 37);        putimage(窗口x + 窗口宽 - 76, 窗口y, &最小化按钮, SRCAND);        putimage(窗口x + 窗口宽 - 38, 窗口y, &关闭按钮0, SRCAND);        setcolor(RGB(24, 160, 191));        line(窗口x, 窗口y + 38, 窗口x, 窗口y + 38 + 窗口高);        setcolor(RGB(24, 160, 191));        line(窗口x + 窗口宽, 窗口y + 38, 窗口x + 窗口宽, 窗口y + 38 + 窗口高);        setcolor(RGB(24, 160, 191));        line(窗口x, 窗口y + 38 + 窗口高, 窗口x + 窗口宽, 窗口y + 38 + 窗口高);        setcolor(WHITE);        setfillcolor(WHITE);        fillrectangle(窗口x + 1, 窗口y + 38, 窗口x + 窗口宽 - 1, 窗口y + 38 + 窗口高-1);        //开始按钮        if (m.x > -1 && m.x < 61 && m.y>669 && m.y < 721)        {            setcolor(WHITE);            setfillcolor(WHITE);            fillrectangle(0, 670, 59, 719);            putimage(0, 670, &开始按钮1, SRCAND);        }        if (m.x > 60 || m.y < 670)        {            setcolor(WHITE);            setfillcolor(WHITE);            fillrectangle(0, 670, 59, 719);            putimage(0, 670, &开始按钮0, SRCAND);        }        if (开始菜单状态 == 1)        {            setcolor(WHITE);            setfillcolor(WHITE);            fillrectangle(0, 181, 925, 669);            putimage(0, 181, &开始菜单, SRCAND);        }        switch (m.uMsg)        {        case WM_LBUTTONDOWN:            //开始按钮              if (m.x > -1 && m.x < 61 && m.y>669 && m.y < 721)            {                setcolor(WHITE);                setfillcolor(WHITE);                fillrectangle(0, 670, 59, 719);                putimage(0, 670, &开始按钮2, SRCAND);//点击开始按钮后改变图片为开始菜单2(点击时)            }        }        FlushBatchDraw();    }}DWORD WINAPI DXC2(LPVOID lpParam){    for (;;)    {        IMAGE 开始按钮1;    // 定义 IMAGE 对象        loadimage(&开始按钮1, "G:\\程序制作\\Windows系统模拟\\素材\\开始按钮1.jpg");        if (开始按钮状态 == 1)//点击开始按钮后图片改变后返回        {            Sleep(500);            putimage(0, 670, &开始按钮1, SRCAND);            FlushBatchDraw();            开始按钮状态 = 0;        }    }}DWORD WINAPI DXC3(LPVOID lpParam){    for (;;)    {    }}void main(){    IMAGE 壁纸;   // 定义 IMAGE 对象    loadimage(&壁纸, "G:\\程序制作\\Windows系统模拟\\素材\\壁纸.jpg");    IMAGE 开始按钮0;    // 定义 IMAGE 对象    loadimage(&开始按钮0, "G:\\程序制作\\Windows系统模拟\\素材\\开始按钮0.jpg");    IMAGE 开始按钮1;    // 定义 IMAGE 对象    loadimage(&开始按钮1, "G:\\程序制作\\Windows系统模拟\\素材\\开始按钮1.jpg");    HANDLE hThread1, hThread2, hThread3;    SetEvent(hEvent);    hThread1 = CreateThread(NULL, 0, DXC1, NULL, 0, NULL);    hThread2 = CreateThread(NULL, 0, DXC2, NULL, 0, NULL);    hThread3 = CreateThread(NULL, 0, DXC3, NULL, 0, NULL);    initgraph(1280, 720);    BeginBatchDraw();    setcolor(WHITE);    setfillcolor(WHITE);    fillrectangle(0, 0, 1280, 720);    putimage(0, 0, &壁纸, SRCAND);    putimage(0, 670, &开始按钮0, SRCAND);    FlushBatchDraw();    for (;;);}

这就是现在的代码,总的来说,改善了一些代码,把循环画线变成了填充,并且增加了窗口主体的绘制。

大家可以自己研究研究,虽然我写的注释不多,但是看着还是简单明了的。


话说,我以后就会开辟一个新的系列哦~~~
编程能力训练系列!!!!!!!!!!!!

0 0