zoukankan      html  css  js  c++  java
  • 控制台画图程序(可更换笔刷版本)

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

  • 相关阅读:
    Anltr 规格严格
    非结构文本分析 规格严格
    获取32R的图像的直方图的一个算法
    NetBeans 6.5 开发计划
    Java中国象棋博弈程序探秘[6]——游戏与界面
    NetBeans 时事通讯(刊号 # 14 Jul 01, 2008 )
    Download NetBeans IDE 6.5 Milestone 1!
    Java中国象棋博弈程序探秘[5]——搜索算法
    100本顶尖软件开发书籍
    Java中国象棋博弈程序探秘[4]——生成有效着法
  • 原文地址:https://www.cnblogs.com/pta00/p/13259306.html
Copyright © 2011-2022 走看看