控制台画图程序(可更换笔刷版本)
你以为是第一版,其实这是2.0哒,就是加了一个换笔刷的功能。
绘制:左键绘图,右键擦除
画布大小:程序运行开始会有1秒左右的等待时间,请在此时完成窗口大小调整。
更换笔刷:右键左上角的方块,输入一个字符,回车,即可完成。
(由于这个回车还引出了另一篇随笔,就是那个scanf吞回车的。)
出于优化考虑,我尽量写得好一点。
(程序效果演示)
下面是代码,算是控制台程序的内涵基本都沾一点吧:
#include#include #include #include 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("\x20\x20"); SetConsoleCursorPosition(hOutput,xy2); //rewind(stdin); wscanf(L"%lc",&brush); fflush(stdin); SetConsoleTextAttribute(hOutput,0x07); SetConsoleCursorPosition(hOutput,xy2); } printf("\x20\x20"); } } } }
感谢阅读(qq:2762171125 群:789209269)