Windows系统功能模拟 C++(EasyX插件)—— 4th 界面绘制(二)

来源:互联网 发布:高邮2016秋季网络培训 编辑:程序博客网 时间:2024/05/21 11:07

呵呵,中小学电脑制作活动竟然要5月才开始评选(我3月参加的···),说好的4月公投也没有出现···


好了,废话不多说,既然已经有了按钮,就为它添加一个事件响应,例如放上去的时候改变为鼠标悬浮状态
之前我们调用了MOUSEMSG和HANDLE,现在该用到它们了。
直接上代码吧,这个不好一步步说:

#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;DWORD WINAPI DXC1(LPVOID lpParam){    IMAGE 开始按钮0;    // 定义 IMAGE 对象    loadimage(&开始按钮0, "G:\\程序制作\\Windows系统模拟\\素材\\开始按钮0.jpg");    IMAGE 开始按钮1;    // 定义 IMAGE 对象    loadimage(&开始按钮1, "G:\\程序制作\\Windows系统模拟\\素材\\开始按钮1.jpg");    Sleep(100);//防止出现清屏未完成的黑白条状况    while (true)    {        // 获取一条鼠标消息        m = GetMouseMsg();        //如果鼠标在开始图片的区域里        if (m.x > -1 && m.x < 61 && m.y>669 && m.y < 721)        {            for (i = 670; i < 720; i++)            {                setcolor(WHITE);                line(0, i, 60, i);            }            putimage(0, 670, &开始按钮1, SRCAND);            FlushBatchDraw();        }        //如果鼠标不在开始图片的区域里        if (m.x > 60 || m.y < 670)        {            for (i = 670; i < 720; i++)            {                setcolor(WHITE);                line(0, i, 60, i);            }            putimage(0, 670, &开始按钮0, SRCAND);            FlushBatchDraw();        }        FlushBatchDraw();        switch (m.uMsg)        {        case WM_LBUTTONDOWN:;        }    }}DWORD WINAPI DXC2(LPVOID lpParam){    for (;;)    {    }}DWORD WINAPI DXC3(LPVOID lpParam){    for (;;)    {    }}void main(){    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();    for (i = 0; i < 720; i++)    {        setcolor(WHITE);        line(0, i, 1280, i);    }    putimage(0, 670, &开始按钮0, SRCAND);    FlushBatchDraw();    for (;;);}

这样就实现了鼠标在按钮上就变成鼠标悬浮状态,不在就恢复原样。
这里使用了批量绘图语句。


注意:批量绘图的所有语句必须在创建了图形界面后调用,否则会内存冲突直接中断


好了,按钮的悬浮显示完毕,等5th吧。

这一节好像没讲什么啊···
(这个···实在是不好讲啊,再说都是if和循环,很容易看懂)

0 0
原创粉丝点击