zoukankan      html  css  js  c++  java
  • C言语图形形式编程,赋性鼠标(2)

    else if(up[i][k]==0&&down[i][k]==1)
                 {
                     if(full) mouse_draw[i][k]=2;
                     else     mouse_draw[i][k]=1;
                 }
                 else if(up[i][k]==1&&down[i][k]==0) mouse_draw[i][k]=3;
                 else                                mouse_draw[i][k]=4;
             }
        }
        if(kind==1) mouse_draw[1][2]=0;/*希奇点*/
        else        mouse_draw[1][2]=0;
    }


    void MsOn(int x,int y)
    {   /* 鼠标光标施展剖析*/
        int  i,j;
        int  color[2];

        color[0]=Mskind>>2;
        color[1]=Mskind>>6;
        for(i=0;i<16;i )
        {
            for(j=0;j<16;j )
            {
                pixel_save[i][j]=getpixel(x j,y i);/* 生存原来的颜色*/
                if(mouse_draw[i][j]==1)
                   putpixel(x j,y i,color[0]);
                else if(mouse_draw[i][j]==2)       /* 画鼠标*/
                   putpixel(x j,y i,color[1]);
            }
        }
    }

    void MsOff(int x,int y)
    {   /* 沉没鼠标*/
        int  i,j,color;

        for(i=0;i<16;i )
        for(j=0;j<16;j )
        {
             if(mouse_draw[i][j]==3||mouse_draw[i][j]==4)  continue;
             color=getpixel(x j,y i);
             putpixel(x j,y i,color^color);     /* 原职位异或消去*/
             putpixel(x j,y i,pixel_save[i][j]);/* 回恢复后台*/
        }
    }

    int Msread(int *px,int *py,int *buttons)
    {  /* 读取鼠标及键盘形状*/
        int    but_old=*buttons;
        int    x_old=*px,y_old=*py;
        struct time t;
        struct date d;/* 今后时候信息*/

        do{
             if(kbhit()) return bioskey(0);
             regs.x.ax=3;
             int86(0x33,&regs,&regs);
             *px=regs.x.cx;
             *py=regs.x.dx;
             *buttons=regs.x.bx;
        }while(*px==x_old&&*py==y_old&&*buttons==but_old);

        MsOff(x_old,y_old);
        but_old=*buttons;
        x_old=*px;
        y_old=*py;
        MsOn(x_old,y_old);
        return -1;
    }
    int Msinbox(int x1,int y1,int x2,int y2,int x,int y)
    {
        return((x>=x1&&x<=x2&&y>=y1&&y<=y2)?1:0);  /* 若在预定区域就前去 1 */
    }

    /指导指导指导指导指导指导指导指导指导指导指导奸骗**
                                简易绘图板
        楼主写的引擎很不错哦!但是我而今也没找到符合的Mskind值描述鼠标,我感
    觉是你的次序顺序题目?!楼主光写个鼠标引擎不写实歧许会让很多人看不懂,我用
    你的引擎写了个简易绘画版。
                                                            批改人:cdmalcl
    指导指导指导指导指导指导指导指导指导指导指导奸骗**/


    /* -----  C言语图形形式编程,赋性鼠标。 -----*/

    #include <graphics.h>
    #include <dos.h>

    #define WL -3   /* 鼠标绘制的横向宽度 */
    #define HL 3    /* 鼠标绘制的纵向高度 */
    #define LEFT_C 15       /* 鼠标左键绘制图形的颜色 */
    #define RIGHT_C 0       /* 鼠标右键绘制图形的颜色 */
    #define EXIT_X 450      /* 加入菜单的横坐标职位 */
    #define EXIT_Y 350      /* 加入菜单的纵坐标职位 */
    #define E_WL 60         /* 加入菜单的横向长度 */
    #define E_HL 15         /* 加入菜单的纵向高度 */

    int Init();     /*次序顺序初始化*/
    int Run();      /*顺次序递主要进程*/
    int DrawRectangle(int OutType ,int x ,int y);       /*绘制一个矩形或线或点*/
    int Msinit();
    void MskindMath();
    void MsOn(int x,int y);
    void MsOff(int x,int y);
    int Msread(int *px,int *py,int *buttons);
    int Msinbox(int x1,int y1,int x2,int y2,int x,int y);
    int End();      /*完毕次序顺序*/

    int Mskind = 0xb;
    long up[2][16]={0} ,down[2][16]={0};
    long mouse_draw[16][16]={0} ,pixel_save[16][16]={0};
    union REGS regs;

    int main()
    {
        Init();
        Run();
        End();
    }

    int Init()
    {
        int gd = DETECT ,gm = 0;

        initgraph(&gd ,&gm ,"");

        rectangle(EXIT_X ,EXIT_Y ,EXIT_X E_WL ,EXIT_Y E_HL);
        settextstyle(1 ,0 ,4);
        outtextxy(EXIT_X E_WL/4 ,EXIT_Y E_HL/3 ,"EXIT");
        Msinit();
        MskindMath();
    }

    int Run()
    {
        int x ,y ,buttons = 0;

        x = getmaxx()/2;
        y = getmaxy()/2;
        MsOn(x,y);

        while(Msread(&x ,&y ,&buttons)!=283)    /* 加入键加入次序顺序 */
        {
            if(Msinbox(EXIT_X ,EXIT_Y ,EXIT_X E_WL ,EXIT_Y E_HL ,x ,y))  /* 点击加当选项加入次序顺序 */
            {
                if(buttons == 1)
                {
                    End();
                }
            }
            else
            {
                if(buttons == 1)
                {
                    DrawRectangle(0 ,x ,y);
                }
                if(buttons == 2)
                {
                    DrawRectangle(1 ,x ,y);
                }
            }
        }

        return 1;
    }

    #if WL < 0
    #define WL 0
    #endif
    #if HL < 0
    #define HL 0
    #endif

    int DrawRectangle(int OutType ,int x ,int y)
    {
        MsOff(x ,y);
        if(OutType)
        {
             #if HL > 1
                setcolor(RIGHT_C);
                rectangle(x ,y ,x WL ,y HL);




    版权声明: 原创作品,许愿转载,转载时请务必以超链接情势标明文章 原始情由 、作者信息和本声明。否则将清查功令责任。

  • 相关阅读:
    动态查询 母表和子表的 一种方法
    js的一些正则 整理 长期更新
    fmt 标签格式化 日期
    一些关于 checkbox的前台 jquery 操作 记录
    jQuery 追加元素的方法如append、prepend、before,after(转)
    (Oracle)DBMS_SYSTEM工具-01[20180510]
    MySQL->元数据[20180510]
    MySQL->复制表[20180509]
    MySQL->索引的维护[20180504]
    MySQL-ALTER TABLE命令学习[20180503]
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1975559.html
Copyright © 2011-2022 走看看