• 控制台画图程序(可更换笔刷版本)


    你以为是第一版,其实这是2.0哒,就是加了一个换笔刷的功能。

    绘制:左键绘图,右键擦除

    画布大小:程序运行开始会有1秒左右的等待时间,请在此时完成窗口大小调整。

    更换笔刷:右键左上角的方块,输入一个字符,回车,即可完成。

    (由于这个回车还引出了另一篇随笔,就是那个scanf吞回车的。)

    出于优化考虑,我尽量写得好一点。

    (程序效果演示)

    下面是代码,算是控制台程序的内涵基本都沾一点吧:

    #include <stdio.h>
    #include <windows.h> 
    #include <wchar.h>
    #include <locale.h>
    
    int main(void){
        HWND hwnd=GetConsoleWindow();
        HANDLE hInput=GetStdHandle(STD_INPUT_HANDLE);
        HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
        DWORD numRead;    
        INPUT_RECORD inRec;    
        COORD xy={0,0};
        COORD xy2={0,0};
        wchar_t brush=L'x2588';
        
        Sleep(1000); 
        
        //控制台模式 
        DWORD mode;  
        GetConsoleMode(hInput,&mode);  
        mode-=ENABLE_QUICK_EDIT_MODE;
        mode-=ENABLE_INSERT_MODE;
        //mode-=ENABLE_MOUSE_INPUT;
        SetConsoleMode(hInput,mode);
        //隐藏光标 
        CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
        SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
        //切换编码环境 
        setlocale(LC_CTYPE,"");
        while(1){
            Sleep(16);
            ReadConsoleInput(hInput,&inRec,1,&numRead);
            if(inRec.EventType==MOUSE_EVENT){
                xy2.X=inRec.Event.MouseEvent.dwMousePosition.X/2;
                xy2.Y=inRec.Event.MouseEvent.dwMousePosition.Y;
                SetConsoleCursorPosition(hOutput,xy);
                wprintf(L"%3d,%3d %lc",xy2.X,xy2.Y,brush);
                if(inRec.Event.MouseEvent.dwButtonState==1){
                    xy2.X*=2;
                    SetConsoleCursorPosition(hOutput,xy2);
                    wprintf(L"%lc",brush);
                    
                }
                else if(inRec.Event.MouseEvent.dwButtonState==2){
                    xy2.X*=2;
                    SetConsoleCursorPosition(hOutput,xy2);
                    
                    if(xy2.X==8&&xy2.Y==0){
                        xy2.X=8;
                        xy2.Y=0;
                        SetConsoleCursorPosition(hOutput,xy2);
                        SetConsoleTextAttribute(hOutput,0x70);
                        printf("x20x20");
                        SetConsoleCursorPosition(hOutput,xy2);
                        //rewind(stdin);
                        wscanf(L"%lc",&brush);
                        fflush(stdin);
                        SetConsoleTextAttribute(hOutput,0x07);
                        SetConsoleCursorPosition(hOutput,xy2);
                        
                    }
                    printf("x20x20");
                }
                
            }
        }
    }

    感谢阅读(qq:2762171125  群:789209269)

  • 相关阅读:
    jquery、js调用iframe父窗口与子窗口元素的方法整理
    js中的各种宽高以及位置总结
    javascript call与apply关键字的作用
    javascript之window对象
    CSS3 3D立方体效果
    CSS3 3D transform变换
    JS查找字符串中出现次数最多的字符
    写一个函数将传入的字符串转换成驼峰表示法
    数组去重方法
    内核升级得一个模范
  • 原文地址:https://www.cnblogs.com/pta00/p/13259306.html
Copyright © 2020-2023  润新知