// October 27, 2006 #include /* originally defined in wincon.h */ #define FG_BLUE 1 #define FG_GREEN 2 #define FG_RED 4 #define FG_INTENSITY 8 #define BG_BLUE 16 #define BG_GREEN 32 #define BG_RED 64 #define BG_INTENSITY 128 #define BG_WHITE BG_RED | BG_GREEN | BG_BLUE #define FG_WHITE FG_RED | FG_GREEN | FG_BLUE /* 1.游標前往指定的座標 */ void gotoxy(int x, int y){ COORD point;point.X = x;point.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),point); } /* 2.設定游標的顯示比例 */ // _bVisible:TRUE顯示游標;FALSE隱藏游標 // CCI.dwSize:游標的大小(佔字元的百分之幾,一般是25%。) void SetCursorVisible(BOOL _bVisible,DWORD _dwSize){ CONSOLE_CURSOR_INFO CCI; CCI.bVisible = _bVisible; CCI.dwSize = _dwSize; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&CCI); } /* 3.取得目前座標值 getxy(&cx,&cy);*/ void getxy(int *x,int *y){ CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); *x = csbi.dwCursorPosition.X; *y = csbi.dwCursorPosition.Y; } int whereX(){ int x,y; getxy(&x,&y); return x; } int whereY(){ int x,y; getxy(&x,&y); return y; } /* 4.清除螢幕 Clear Screen */ // 轉載至Win32 Console Application Tools void clrscr(){ COORD coordScreen = {0,0}; DWORD cCharsWritten; CONSOLE_SCREEN_BUFFER_INFO csbi; DWORD dwConSize; HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hConsole, &csbi); dwConSize = csbi.dwSize.X * csbi.dwSize.Y; FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten); GetConsoleScreenBufferInfo(hConsole, &csbi); FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten); SetConsoleCursorPosition(hConsole, coordScreen); } /* 5.設定文字顏色與背景顏色textcolor */ void setrgb(int color){ WORD attr; switch (color){ case 0: // White on Black attr=(FG_INTENSITY|FG_WHITE); break; case 1: // Red on Black attr=(FG_INTENSITY|FG_RED); break; case 2: // Green on Black attr=(FG_INTENSITY|FG_GREEN); break; case 3: // Yellow on Black attr=(FG_INTENSITY|FG_RED|FG_GREEN); break; case 4: // Blue on Black attr=(FG_INTENSITY|FG_BLUE); break; case 5: // Magenta on Black attr=(FG_INTENSITY|FG_RED|FG_BLUE); break; case 6: // Cyan on Black attr=(FG_INTENSITY|FG_GREEN|FG_BLUE); break; case 7: // Black on Gray attr=(BG_INTENSITY|FG_INTENSITY); break; case 8: // Black on White attr=(BG_INTENSITY|FG_INTENSITY|BG_WHITE ); break; case 9: // Red on White attr=(BG_INTENSITY|FG_INTENSITY|BG_WHITE|FG_RED); break; case 10: // Green on White attr=(BG_INTENSITY|FG_INTENSITY|BG_WHITE|FG_GREEN); break; case 11: // Yellow on White attr=(BG_INTENSITY|FG_INTENSITY|BG_WHITE|FG_RED|FG_GREEN); break; case 12: // Blue on White attr=(BG_INTENSITY|FG_INTENSITY|BG_WHITE|FG_BLUE); break; case 13: // Magenta on White attr=(BG_INTENSITY|FG_INTENSITY|BG_WHITE|FG_RED|FG_BLUE); break; case 14: // Cyan on White attr=(BG_INTENSITY|FG_INTENSITY|BG_WHITE|FG_GREEN|FG_BLUE); break; case 15: // White on White attr=(BG_INTENSITY|FG_INTENSITY|BG_WHITE|FG_WHITE); break; default: // White on Black attr=(FG_INTENSITY|FG_WHITE); break; } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),attr); } void setTextAttr(int attr){ if(attr>=0 && attr<256) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),attr); } /* 6.設定console視窗大小 */ void SetScrnSize(int W, int H){ SMALL_RECT SR; SR.Top = 0; SR.Left = 0; SR.Bottom = H-1; SR.Right = W-1; SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE),TRUE, &SR); COORD Sz; Sz.X = W; Sz.Y = H; SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),Sz); } /* 7.讓Console Window成全螢幕 */ void togglefullscreen(){ keybd_event(VK_MENU,0x38,0,0); keybd_event(VK_RETURN,0x1c,0,0); keybd_event(VK_RETURN,0x1c,KEYEVENTF_KEYUP,0); keybd_event(VK_MENU,0x38,KEYEVENTF_KEYUP,0); } /* 8.清除 Clear to End of Line */ void clreol(){ COORD coordScreen = {whereX(),whereY()}; DWORD cCharsWritten; CONSOLE_SCREEN_BUFFER_INFO csbi; DWORD dwConSize; HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hConsole, &csbi); dwConSize = csbi.dwSize.X-whereX(); FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten); GetConsoleScreenBufferInfo(hConsole, &csbi); FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten); SetConsoleCursorPosition(hConsole, coordScreen); }