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

你以为是第一版,其实这是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)

原文地址:https://www.cnblogs.com/pta00/p/13259306.html