include <windows.h>
#include <stdio.h>
void ConPrint(char *CharBuffer, int len);
void ConPrintAt(int x, int y, char *CharBuffer, int len);
void gotoXY(int x, int y);
void ClearConsole(void);
void ClearConsoleToColors(int ForgC, int BackC);
void SetColorAndBackground(int ForgC, int BackC);
void SetColor(int ForgC);
void HideTheCursor(void);
void ShowTheCursor(void);
int main(int argc, char* argv[])
{
HideTheCursor();
ClearConsoleToColors(15, 1);
ClearConsole();
gotoXY(1, 1);
SetColor(14);
printf("This is a test...\n");
Sleep(500);
ShowTheCursor();
SetColorAndBackgr
ound(15, 12);
ConPrint("This is also a test...\n", 23);
SetColorAndBackground(1, 7);
ConPrintAt(22, 15, "This is also a test...\n", 23);
gotoXY(0, 24);
SetColorAndBackground(7, 1);
return 0;
}
//This will clear the console while setting the forground and
//background colors.
void ClearConsoleToColors(int ForgC, int BackC)
{
WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
//Get the handle to the current output buffer...
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
//This is used to reset the carat/cursor to the top left.
COORD coord = {0, 0};
//A return value... indicating how many chars were written
//not used but we need to capture this since it will be
//written anyway (passing NULL causes an access violation).
DWORD count;
//This is a structure containing all of the console info
// it is used here to find the size of the console.
CONSOLE_SCREEN_BUFFER_INFO csbi;
//Here we will set the current color
SetConsoleTextAttribute(hStdOut, wColor);
if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
{
//This fills the buffer with a given character (in this case 32=space).
FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
//This will set our cursor position for the next print statement.
SetConsoleCursorPosition(hStdOut, coord);
}
}
//This will clear the console.
void ClearConsole()
{
//Get the handle to the current output buffer...
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
//This is used to reset the carat/cursor to the top left.
COORD coord = {0, 0};
//A return value... indicating how many chars were written
// not used but we need to capture this since it will be
// written anyway (passing NULL causes an access violation).
DWORD count;
//This is a structure containing all of the console info
// it is used here to find the size of the console.
CONSOLE_SCREEN_BUFFER_INFO csbi;
//Here we will set the current color
if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
{
//This fills the buffer with a given character (in this case 32=space).
FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
//This will set our cursor position for the next print statement.
SetConsoleCursorPosition(hStdOut, coord);
}
}
//This will set the position of the cursor
void gotoXY(int x, int y)
{
//Initialize the coordinates
COORD coord = {x, y};
//Set the position
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
//This will set the forground color for printing in a console window.
void SetColor(int ForgC)
{
WORD wColor;
//We will need this handle to get the current background attribute
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
//We use csbi for the wAttributes word.
if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
{
//Mask out all but the background attribute, and add in the forgournd color
wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
SetConsoleTextAttribute(hStdOut, wColor);
}
}
//This will set the forground and background color for printing in a console window.
void SetColorAndBackground(int ForgC, int BackC)
{
WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);
}
//Direct console output
void ConPrint(char *CharBuffer, int len)
{
DWORD count;
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), CharBuffer, len, &count, NULL);
}
//Direct Console output at a particular coordinate.
void ConPrintAt(int x, int y, char *CharBuffer, int len)
{
DWORD count;
COORD coord = {x, y};
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hStdOut, coord);
WriteConsole(hStdOut, CharBuffer, len, &count, NULL);
}
//Hides the console cursor
void HideTheCursor()
{
CONSOLE_CURSOR_INFO cciCursor;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if(GetConsoleCursorInfo(hStdOut, &cciCursor))
{
cciCursor.bVisible = FALSE;
}
}
//Shows the console cursor
void ShowTheCursor()
{
CONSOLE_CURSOR_INFO cciCursor;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if(GetConsoleCursorInfo(hStdOut, &cciCursor))
{
cciCursor.bVisible = TRUE;
}
}
分享到:
相关推荐
这个“struts2完整例子”压缩包提供了学习和理解Struts2核心概念的实际示例。让我们深入探讨一下Struts2的关键知识点。 1. **MVC架构**:Struts2遵循MVC设计模式,它将业务逻辑(模型)、用户界面(视图)和应用...
这个压缩包"SpringCloud 15个完整例子"是学习和理解SpringCloud功能的绝佳资源,包含了从基础到高级的多种应用场景。 首先,让我们逐一解析这15个示例: 1. **Eureka Server**:这是SpringCloud中的服务注册中心,...
"jQuery实例完整例子"提供了丰富的示例,帮助初学者和有经验的开发者更好地理解和应用jQuery库,尤其在创建高级特效方面。 在jQuery中,特效是其魅力之一,它们使网页更具吸引力和互动性。例如,`slideUp()`和`...
在这个"vba写的完整例子加用户窗口操作选择文件读取文件等"的案例中,我们将深入探讨VBA在实际应用中的几个关键知识点。 首先,**用户窗口操作**是指通过VBA创建的用户界面,通常使用UserForm来实现。UserForm可以...
ExtJs完整例子ext+dwr,希望能给需要地兄弟提供帮助
综上所述,这个“Web service 完整例子”涵盖了从设计、开发到部署和使用的整个Web服务生命周期,是学习和理解Web服务工作原理的宝贵资源。通过深入研究和实践这个例子,开发者可以更好地掌握Web服务技术,并将其...
我们将详细介绍这个"Jquery 整合 struts2 完整例子",以及如何在myEclipse环境中进行操作。 jQuery是一个轻量级、高性能的JavaScript库,它极大地简化了DOM操作、事件处理、动画设计以及Ajax交互。它的API设计易学...
【标题】"kettle oracle循环分页迁移数据的完整例子,生成txt后FTP上传到远程服务器"揭示了几个关键的IT知识点,主要包括: 1. **Kettle(Pentaho Data Integration,PDI)**:Kettle是一款开源的数据集成工具,...
在“jQuery Mobile 设计完整例子”中,我们将深入探讨这个框架的各个方面,包括登录页面的设计、菜单的实现以及菜单间的切换。 1. **登录页面设计** jQuery Mobile 提供了预定义的样式和布局结构,用于创建美观的...
WPF摄影系统完整例子[按钮、浏览、菜单、样式] 源码打包奉上,需要的童鞋快来下载哈!
在这个例子中,"全局鼠标HOOK完整例子" 提供了一个使用C#语言实现的DLL(动态链接库)和一个DEMO程序,它们共同展示了如何设置和使用鼠标HOOK。 首先,我们需要理解什么是HOOK。在Windows操作系统中,HOOK是一种...
在"TCP通讯的完整例子"中,我们通常会看到以下几个关键步骤和概念: 1. **建立连接**:TCP通信始于三次握手(Three-Way Handshake)。客户端发送一个SYN(同步序列编号)包给服务器,服务器回应一个SYN+ACK(同步+...
"JAVAWEB照相带完整例子"是一个实际项目案例,它展示了如何在JavaWeb环境中集成摄像头功能,让用户能够通过网页进行拍照并进行相关处理。这个例子包含了前端用户界面以及后端服务器的交互逻辑。 首先,`webcam.jsp`...
在这个“springmvc简单完整例子”中,我们将深入探讨Spring MVC的核心概念和技术细节。 1. **配置**: - **web.xml**: 这是Web应用程序的部署描述符,用于配置前端控制器`DispatcherServlet`。它将所有HTTP请求...
"Ext 完整例子(含Excel导出)"这个资源显然是一个包含完整的Ext应用程序示例,特别强调了支持Excel数据导出的功能。这通常涉及到在Web应用中集成数据处理和文件生成的能力。 首先,我们要理解Ext的核心概念。它基于...
在这个“ssh2整合完整例子”中,我们很可能会找到一个关于如何在不同的开发环境中集成SSH2协议的详细示例。SSH2通常用于在服务器之间建立安全的连接,例如进行远程命令执行、文件传输、隧道ing等操作。下面,我们将...
jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程 jxl导出excel 完整例子工程jxl导出excel 完整例子工程jxl导出excel 完整例子工程
在"springMVC+dwr完整例子"中,我们主要会探讨以下几个关键知识点: 1. **SpringMVC基本概念**:SpringMVC提供了一个灵活的请求处理结构,包括DispatcherServlet、Controller、Model、View等组件。...
这个“ESP8266云端传感器网络完整例子”提供了使用ESP8266构建云端数据采集平台的详细教程。下面我们将深入探讨其中涉及的关键知识点。 1. **ESP8266无线芯片**:ESP8266由乐鑫科技开发,集成了Wi-Fi功能和强大的32...
在本示例中,"kettle实现数据转换的完整例子"展示了如何利用Kettle进行数据处理操作。这个压缩包可能包含了Kettle的工作流文件(ktr)和相关的数据库脚本,以便于用户理解并学习Kettle的数据转换过程。 1. **Kettle...