博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pcc32源文件
阅读量:3533 次
发布时间:2019-05-20

本文共 9698 字,大约阅读时间需要 32 分钟。

pcc32.c

/********************************************************* Author:  RedOC                                        ** Email:   RedOC@foxmail.com                            ** Notes:   Some functions about Win32 Console Control.  ** License: Copyleft. Enjoy it Just for fun.             ** Date:    2008-12-17 00:28:39                          *********************************************************/#include "pcc32.h"void delayMS(uint32 d){   Sleep(d);   return ;}void clearText(void){   system("cls");   return ;}int setTextColor(uint8 fColor){   HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);   CONSOLE_SCREEN_BUFFER_INFO csbInfo;   GetConsoleScreenBufferInfo(hd, &csbInfo);   return SetConsoleTextAttribute(hd, fColor | (csbInfo.wAttributes&~0x0F));}PCCOLOR getTextColor(void){   CONSOLE_SCREEN_BUFFER_INFO csbInfo;   GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbInfo);   return (PCCOLOR)(csbInfo.wAttributes&0x0F);}int setBackColor(uint8 bColor){   HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);   CONSOLE_SCREEN_BUFFER_INFO csbInfo;   GetConsoleScreenBufferInfo(hd, &csbInfo);   return SetConsoleTextAttribute(hd, (bColor << 4) | (csbInfo.wAttributes&~0xF0));}PCCOLOR getBackColor(void){   CONSOLE_SCREEN_BUFFER_INFO csbInfo;   GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbInfo);   return (PCCOLOR)((csbInfo.wAttributes&0xF0) >> 4);}int setColors(uint8 fColor, uint8 bColor){   HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);   CONSOLE_SCREEN_BUFFER_INFO csbInfo;   GetConsoleScreenBufferInfo(hd, &csbInfo);   return SetConsoleTextAttribute(hd, fColor | (bColor << 4) | (csbInfo.wAttributes&~0xFF));}int setSwapColors(int b){   HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);   CONSOLE_SCREEN_BUFFER_INFO csbInfo;   GetConsoleScreenBufferInfo(hd, &csbInfo);   if (!!b)      return SetConsoleTextAttribute(hd, csbInfo.wAttributes | 0x4000);   else      return SetConsoleTextAttribute(hd, csbInfo.wAttributes & ~0x4000);}int setUnderLine(int b){   HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);   CONSOLE_SCREEN_BUFFER_INFO csbInfo;   GetConsoleScreenBufferInfo(hd, &csbInfo);   if (!!b)      return SetConsoleTextAttribute(hd, csbInfo.wAttributes | 0x8000);   else      return SetConsoleTextAttribute(hd, csbInfo.wAttributes & ~0x8000);}uint8 getLineWidth(void){   CONSOLE_SCREEN_BUFFER_INFO csbInfo;   GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbInfo);   return csbInfo.dwSize.X;}uint8 getLineNum(void){   CONSOLE_SCREEN_BUFFER_INFO csbInfo;   GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbInfo);   return csbInfo.dwSize.Y;}uint8 getCursorX(void){   CONSOLE_SCREEN_BUFFER_INFO csbInfo;   GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbInfo);   return csbInfo.dwCursorPosition.X;}uint8 getCursorY(void){   CONSOLE_SCREEN_BUFFER_INFO csbInfo;   GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbInfo);   return csbInfo.dwCursorPosition.Y;}int gotoTextPos(uint8 x, uint8 y){   COORD cd;   cd.X = x;   cd.Y = y;   return SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cd);}int setCursorVisible(int b){   HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);   CONSOLE_CURSOR_INFO ccInfo;   GetConsoleCursorInfo(hd, &ccInfo);   ccInfo.bVisible = !!b;   return SetConsoleCursorInfo(hd, &ccInfo);}int setCursorSize(uint8 s){   HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);   CONSOLE_CURSOR_INFO ccInfo;   GetConsoleCursorInfo(hd, &ccInfo);   ccInfo.dwSize = s;   return SetConsoleCursorInfo(hd, &ccInfo);}int getConsoleTitle(char *title, uint8 len){   return GetConsoleTitle(title, len);}int setConsoleTitle(char *title){   return SetConsoleTitle(title);}int fixConsoleSize(uint16 width, uint16 height){   int ret = 0;   int fixX = 0, fixY = 0;   COORD cd;   SMALL_RECT srctWindow;   CONSOLE_SCREEN_BUFFER_INFO csbiInfo;   HANDLE hWin = GetStdHandle(STD_OUTPUT_HANDLE);   if (!hWin)      return 0;   // 调整最小范围   fixX = (width < MIN_CONSOLE_WIDTH) ? MIN_CONSOLE_WIDTH : width;   fixY = (height < MIN_CONSOLE_HEIGHT) ? MIN_CONSOLE_HEIGHT : height;   // 先将BUF尺寸扩大到最大   cd.X = 512;   cd.Y = 512;   ret = SetConsoleScreenBufferSize(hWin, cd);   if (!ret)      return ret;   //puts("Set Max Buf Error.");   // 测试屏幕允许的最大尺寸   GetConsoleScreenBufferInfo(hWin, &csbiInfo);   cd = csbiInfo.dwMaximumWindowSize;   //printf("Max Win Size[%d, %d].\n", cd.X, cd.Y);   fixX = (fixX > cd.X) ? cd.X : fixX;   fixY = (fixY > cd.Y) ? cd.Y : fixY;   //printf("Fix Win Size[%d, %d].\n", fixX, fixY);   // 确定适当的窗口尺寸   srctWindow.Left = 0;   srctWindow.Right = fixX - 1;   srctWindow.Top = 0;   srctWindow.Bottom = fixY - 1;   ret = SetConsoleWindowInfo(hWin, 1, &srctWindow);   if (!ret)      return ret;   //puts("Set Size Error.");   // 确定适当的BUF尺寸   cd.X = fixX;   cd.Y = fixY;   ret = SetConsoleScreenBufferSize(hWin, cd);   if (!ret)      return ret;   //printf("Fix Win Size[%d, %d]: %d.\n", fixX, fixY, ret);   Sleep(100);   return ret;}int showConsoleInfo(){   int ret;   HANDLE hWin = GetStdHandle(STD_OUTPUT_HANDLE);   CONSOLE_SCREEN_BUFFER_INFO csbiInfo;   ret = GetConsoleScreenBufferInfo(hWin, &csbiInfo);   if (ret)   {      printf("Buffer Size: [X]%d - [Y]%d\n", csbiInfo.dwSize.X, csbiInfo.dwSize.Y);      printf("Cursor Pos : [X]%d - [Y]%d\n", csbiInfo.dwCursorPosition.X, csbiInfo.dwCursorPosition.Y);      printf("Attributes : %d\n", csbiInfo.wAttributes);      printf("Current Win: [L]%d - [R]%d - [T]%d - [B]%d\n", \             csbiInfo.srWindow.Left, csbiInfo.srWindow.Right, csbiInfo.srWindow.Top, csbiInfo.srWindow.Bottom);      printf("Maximum Win: [X]%d - [Y]%d\n", csbiInfo.dwMaximumWindowSize.X, csbiInfo.dwMaximumWindowSize.Y);      puts("Over.");   }   return ret;}int simpleRing(uint16 freq, uint16 len){   return Beep(freq, len);}uint16 jkGetKey(void){   uint16 rk = 0;   uint8 k = getch();   if (k == JK_FUNC_KEY)   {      k = getch();      rk = 0xFF00 | k;      return rk;   }   if (k == JK_CTRL_KEY)   {      k = getch();      rk = 0xE000 | k;      return rk;   }   rk = 0x0000 | k;   return rk;}int jkHasKey(void){   return (kbhit());}//End of pcc32.c

pcc32.h

/********************************************************* Author:  RedOC                                        ** Email:   RedOC@foxmail.com                            ** Notes:   Some functions about Win32 Console Control.  ** License: Copyleft. Enjoy it Just for fun.             ** Date:    2008-12-17 00:28:39                          *********************************************************/#ifndef PCC32_H_INCLUDED#define PCC32_H_INCLUDED#include 
#include
#include
#include
#ifndef REDOC_COMMEN_TYPE#define REDOC_COMMEN_TYPEtypedef unsigned char uint8;typedef unsigned short uint16;typedef unsigned long uint32;#endif // REDOC_COMMEN_TYPE/* 按键定义 */#define JK_FUNC_KEY 0x00#define JK_CTRL_KEY 0xE0#define JK_ESC 0x001B#define JK_ENTER 0x000D#define JK_SPACE 0x0020#define JK_BKSPACE 0x0008#define JK_TAB 0x0009#define JK_CTRL_Z 0x001A#define JK_CTRL_X 0x0018#define JK_CTRL_C 0x0003#define JK_CTRL_A 0x0001#define JK_CTRL_S 0x0013#define JK_CTRL_D 0x0004#define JK_LEFT 0xE04B#define JK_RIGHT 0xE04D#define JK_UP 0xE048#define JK_DOWN 0xE050#define JK_INSERT 0xE052#define JK_HOME 0xE047#define JK_PGUP 0xE049#define JK_DELETE 0xE053#define JK_END 0xE04F#define JK_PGDW 0xE051#define JK_F1 0xFF3B#define JK_F2 0xFF3C#define JK_F3 0xFF3D#define JK_F4 0xFF3E#define JK_F5 0xFF3F#define JK_F6 0xFF40#define JK_F7 0xFF41#define JK_F8 0xFF42#define JK_F9 0xFF43#define JK_F10 0xFF44#define JK_F11 0xE085#define JK_F12 0xE086/* 控制台尺寸定义 */#define MIN_CONSOLE_WIDTH 14#define MIN_CONSOLE_HEIGHT 1/* 颜色定义 */typedef enum _PCCOLOR{ BLACK = 0, // 黑色 BLUE = 1, // 蓝色 GREEN = 2, // 绿色 CYAN = 3, // 青色 RED = 4, // 红色 MAGENTA = 5, // 紫色 BROWN = 6, // 褐色 LIGHT_GRAY = 7, // 浅灰 DARK_GRAY = 8, // 深灰 LIGHT_BLUE = 9, // 亮蓝 LIGHT_GREEN = 10, // 亮绿 LIGHT_CYAN = 11, // 浅蓝 LIGHT_RED = 12, // 亮红 LIGHT_MAGENTA = 13, // 亮紫 YELLOW = 14, // 黄色 WHITE = 15 // 白色}PCCOLOR;#ifdef __cplusplusextern "C"{#endif /* 延时,以毫秒计 */ void delayMS(uint32 d); /* 清除文字 */ void clearText(void); /* 暂停,等待用户按键 */ void pauseHere(void); /* 发出简单的响铃声(阻塞,慎用) */ int simpleRing(uint16 freq, uint16 len); /* 设置文本颜色,0~15 */ int setTextColor(uint8 fColor); /* 获取文本颜色,0~15 */ PCCOLOR getTextColor(void); /* 设置文本背景颜色,0~15 */ int setBackColor(uint8 bColor); /* 获取文本背景颜色,0~15 */ PCCOLOR getBackColor(void); /* 设置文本及其背景颜色,0~15 */ int setColors(uint8 fColor, uint8 bColor); /* 设置/取消前/背景颜色的交换解析 */ int setSwapColors(int b); /* 设定/取消文字的下划线 */ int setUnderLine(int b); /* 获取控制台文本行的最大长度[默认为80] */ uint8 getLineWidth(void); /* 获取控制台文本行的最大行数 */ uint8 getLineNum(void); /* 获取光标的横坐标[列数] */ uint8 getCursorX(void); /* 获取光标的纵坐标[行数] */ uint8 getCursorY(void); /* 屏幕光标定位,x为列(横),y为行(纵) */ int gotoTextPos(uint8 x, uint8 y); /* 设置光标的可见性 */ int setCursorVisible(int b); /* 设置光标的(厚度)尺寸,1-100 */ int setCursorSize(uint8 s); /* 获取控制台的标题字符串 */ int getConsoleTitle(char *title, uint8 len); /* 设置控制台的标题字符串 */ int setConsoleTitle(char *title); /* 设置一个没有滚动条的控制台窗口尺寸 */ int fixConsoleSize(uint16 width, uint16 height); /* 输出控制台的相关信息(仅作调试用) */ int showConsoleInfo(); /* 获取控制台的键输入 */ uint16 jkGetKey(void); /* 判断控制台是否有键按下 */ int jkHasKey(void);#ifdef __cplusplus}#endif#endif // PCC32_H_INCLUDED

转载地址:http://otyhj.baihongyu.com/

你可能感兴趣的文章
Git与远程仓库关联以及关联错误解决方法
查看>>
[HDU] 平方和与立方和
查看>>
[HDU 2096] 小明A+B
查看>>
[HDU 2520] 我是菜鸟,我怕谁(不一样的for循环)
查看>>
[HDU 1215] 七夕节(求因子,不超时)
查看>>
[POJ 1915] Knight Moves
查看>>
Memcache技术精华
查看>>
Redis详解入门篇
查看>>
php开启redis扩展包与redis安装
查看>>
php使用openssl来实现非对称加密
查看>>
pdo如何防止 sql注入
查看>>
myisam和innodb的区别
查看>>
MySQL建表规范与注意事项(个人精华)
查看>>
JDK8接口的新特性
查看>>
synchronized的局限性与lock的好处
查看>>
redis和memcached有什么区别?
查看>>
Spring中的设计模式
查看>>
如何设计一个秒杀系统 -- 架构原则
查看>>
如何设计一个秒杀系统 -- 动静分离方案
查看>>
JWT 快速了解
查看>>