在控制台(console)打印彩色字
2007-02-09 13:00
483 查看
你是不是觉得你写的控制台程序的字太单调了,你是不是有时候需提醒用户注意你的某行输出。呵呵感觉这两句像广告,好了言归正传,这两天写了一个可以打印红绿蓝三种颜色的printf函数并做成了动态连接库。代码说明一切。
#define DllAPI __declspec(dllexport)
//#else
//这个两句将在隐式的使用dll的时候导致不能连接
//#define DllAPI __declspec(dllimport)
extern "C" //原样编译
{
DllAPI int __stdcall ErrPrintf(TCHAR *format, ...) ; //__stdcall使非C/C++语言内能够调用API
DllAPI int __stdcall GreenPrintf(TCHAR *format, ...) ;
DllAPI int __stdcall BluePrintf(TCHAR *format, ...) ;
DllAPI int __stdcall RedPrintf(TCHAR *format, ...);
}
#endif
//
#include "stdafx.h"
#include "PrintfColorDll.h"
#include "stdafx.h"
#include "stdio.h"
#include "tchar.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
//错误
DllAPI int __stdcall ErrPrintf(TCHAR *format, ...)
{
HANDLE hStdout = NULL ;
TCHAR szBuffer[1024] ;
va_list arg_list ;
int nBuf = 0 ;
va_start(arg_list,format);
nBuf = _vsntprintf(szBuffer,1024,format,arg_list) ;
va_end(arg_list) ;
//get console ouput handle
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if(!hStdout)
{
return 0;
}
//set red colour
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_RED | FOREGROUND_INTENSITY))
{
return 0;
}
//print
nBuf = _tprintf(_T("%s"),szBuffer) ;
//restore to white.
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN))
{
return 0;
}
return nBuf ;
}
//红色
DllAPI int __stdcall RedPrintf(TCHAR *format, ...)
{
HANDLE hStdout = NULL ;
TCHAR szBuffer[1024] ;
va_list arg_list ;
int nBuf = 0 ;
va_start(arg_list,format);
nBuf = _vsntprintf(szBuffer,1024,format,arg_list) ;
va_end(arg_list) ;
//get console ouput handle
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if(!hStdout) {
return 0;
}
//set red colour
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_RED |
FOREGROUND_INTENSITY)) {
return 0;
}
//print
nBuf = _tprintf(_T("%s"),szBuffer) ;
//restore to white.
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_RED |
FOREGROUND_BLUE |
FOREGROUND_GREEN)) {
return 0;
}
return nBuf ;
}
//绿色
DllAPI int __stdcall GreenPrintf(TCHAR *format, ...)
{
HANDLE hStdout = NULL ;
TCHAR szBuffer[1024] ;
va_list arg_list ;
int nBuf = 0 ;
va_start(arg_list,format);
nBuf = _vsntprintf(szBuffer,1024,format,arg_list) ;
va_end(arg_list) ;
//get console ouput handle
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if(!hStdout) {
return 0;
}
//set Green colour
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_GREEN |
FOREGROUND_INTENSITY)) {
return 0;
}
//print
nBuf = _tprintf(_T("%s"),szBuffer) ;
//restore to white.
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_RED |
FOREGROUND_BLUE |
FOREGROUND_GREEN)) {
return 0;
}
return nBuf ;
}
//蓝色
DllAPI int __stdcall BluePrintf(TCHAR *format, ...)
{
HANDLE hStdout = NULL ;
TCHAR szBuffer[1024] ;
va_list arg_list ;
int nBuf = 0 ;
va_start(arg_list,format);
nBuf = _vsntprintf(szBuffer,1024,format,arg_list) ;
va_end(arg_list) ;
//get console ouput handle
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if(!hStdout) {
return 0;
}
//set Blue colour
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_BLUE |
FOREGROUND_INTENSITY)) {
return 0;
}
//print
nBuf = _tprintf(_T("%s"),szBuffer) ;
//restore to white.
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_RED |
FOREGROUND_BLUE |
FOREGROUND_GREEN)) {
return 0;
}
return nBuf ;
}
#include <tchar.h>
#pragma comment(lib,"PrintfColorDll.lib") //在编辑器link时,链接到.lib文件
extern "C"
{
__declspec(dllimport) int __stdcall ErrPrintf(TCHAR *format,...);
__declspec(dllimport) int RedPrintf(TCHAR *format,...);
__declspec(dllimport) int GreenPrintf(TCHAR *format,...);
__declspec(dllimport) int BluePrintf(TCHAR *format,...);
}
//#include "iostream"
//using namespace std;
int main()
{
int inta=1;
float floata=5.0f;
char chara='a';
ErrPrintf("this is error test!/n");
GreenPrintf("this is a green test!/n");
BluePrintf("this is a blue test!/n");
RedPrintf("this is a red test!/n");
//GreenPrintf("%d, %f, %c",inta,floata,chara);
GreenPrintf("%d/t%c/n",inta,chara);
// GreenPrintf("%f",floata); //function can not work when printing float type?
printf("%f",floata);
//_tprintf("%f",1.0);
getchar();
return 0;
}
做成动态连接库后不能打印浮点型数据了不知道why,哪位大侠知道留个言不胜感激!
编译环境:WinXP sp2 VC++6.0 sp6
head file code :
#ifndef DllDemo_EXPORTS#define DllAPI __declspec(dllexport)
//#else
//这个两句将在隐式的使用dll的时候导致不能连接
//#define DllAPI __declspec(dllimport)
extern "C" //原样编译
{
DllAPI int __stdcall ErrPrintf(TCHAR *format, ...) ; //__stdcall使非C/C++语言内能够调用API
DllAPI int __stdcall GreenPrintf(TCHAR *format, ...) ;
DllAPI int __stdcall BluePrintf(TCHAR *format, ...) ;
DllAPI int __stdcall RedPrintf(TCHAR *format, ...);
}
#endif
CPP file code:
// PrintfColorDll.cpp : Defines the entry point for the DLL application.//
#include "stdafx.h"
#include "PrintfColorDll.h"
#include "stdafx.h"
#include "stdio.h"
#include "tchar.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
//错误
DllAPI int __stdcall ErrPrintf(TCHAR *format, ...)
{
HANDLE hStdout = NULL ;
TCHAR szBuffer[1024] ;
va_list arg_list ;
int nBuf = 0 ;
va_start(arg_list,format);
nBuf = _vsntprintf(szBuffer,1024,format,arg_list) ;
va_end(arg_list) ;
//get console ouput handle
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if(!hStdout)
{
return 0;
}
//set red colour
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_RED | FOREGROUND_INTENSITY))
{
return 0;
}
nBuf = _tprintf(_T("%s"),szBuffer) ;
//restore to white.
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN))
{
return 0;
}
return nBuf ;
}
//红色
DllAPI int __stdcall RedPrintf(TCHAR *format, ...)
{
HANDLE hStdout = NULL ;
TCHAR szBuffer[1024] ;
va_list arg_list ;
int nBuf = 0 ;
va_start(arg_list,format);
nBuf = _vsntprintf(szBuffer,1024,format,arg_list) ;
va_end(arg_list) ;
//get console ouput handle
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if(!hStdout) {
return 0;
}
//set red colour
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_RED |
FOREGROUND_INTENSITY)) {
return 0;
}
nBuf = _tprintf(_T("%s"),szBuffer) ;
//restore to white.
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_RED |
FOREGROUND_BLUE |
FOREGROUND_GREEN)) {
return 0;
}
return nBuf ;
}
//绿色
DllAPI int __stdcall GreenPrintf(TCHAR *format, ...)
{
HANDLE hStdout = NULL ;
TCHAR szBuffer[1024] ;
va_list arg_list ;
int nBuf = 0 ;
va_start(arg_list,format);
nBuf = _vsntprintf(szBuffer,1024,format,arg_list) ;
va_end(arg_list) ;
//get console ouput handle
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if(!hStdout) {
return 0;
}
//set Green colour
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_GREEN |
FOREGROUND_INTENSITY)) {
return 0;
}
nBuf = _tprintf(_T("%s"),szBuffer) ;
//restore to white.
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_RED |
FOREGROUND_BLUE |
FOREGROUND_GREEN)) {
return 0;
}
return nBuf ;
}
//蓝色
DllAPI int __stdcall BluePrintf(TCHAR *format, ...)
{
HANDLE hStdout = NULL ;
TCHAR szBuffer[1024] ;
va_list arg_list ;
int nBuf = 0 ;
va_start(arg_list,format);
nBuf = _vsntprintf(szBuffer,1024,format,arg_list) ;
va_end(arg_list) ;
//get console ouput handle
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if(!hStdout) {
return 0;
}
//set Blue colour
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_BLUE |
FOREGROUND_INTENSITY)) {
return 0;
}
nBuf = _tprintf(_T("%s"),szBuffer) ;
//restore to white.
if (! SetConsoleTextAttribute(hStdout, FOREGROUND_RED |
FOREGROUND_BLUE |
FOREGROUND_GREEN)) {
return 0;
}
return nBuf ;
}
example code:
#include "stdio.h"#include <tchar.h>
#pragma comment(lib,"PrintfColorDll.lib") //在编辑器link时,链接到.lib文件
extern "C"
{
__declspec(dllimport) int __stdcall ErrPrintf(TCHAR *format,...);
__declspec(dllimport) int RedPrintf(TCHAR *format,...);
__declspec(dllimport) int GreenPrintf(TCHAR *format,...);
__declspec(dllimport) int BluePrintf(TCHAR *format,...);
}
//#include "iostream"
//using namespace std;
int main()
{
int inta=1;
float floata=5.0f;
char chara='a';
ErrPrintf("this is error test!/n");
GreenPrintf("this is a green test!/n");
BluePrintf("this is a blue test!/n");
RedPrintf("this is a red test!/n");
//GreenPrintf("%d, %f, %c",inta,floata,chara);
GreenPrintf("%d/t%c/n",inta,chara);
// GreenPrintf("%f",floata); //function can not work when printing float type?
printf("%f",floata);
//_tprintf("%f",1.0);
getchar();
return 0;
}
做成动态连接库后不能打印浮点型数据了不知道why,哪位大侠知道留个言不胜感激!
编译环境:WinXP sp2 VC++6.0 sp6
相关文章推荐
- 利用console对象,在控制台打印调试
- Js的console对象,在控制台打印
- console.log(jQuery(this).find("i").css("visibility"));google的console控制台打印日志
- C# WPF 使用Console.Write打印信息到控制台窗口中
- Js也有console对象,在控制台打印调试再好不过
- 如何在浏览器控制台(console)里输出彩色样式调试信息
- 如何在浏览器控制台(console)里输出彩色样式调试信息
- console.log()在火狐控制台可以打印输出进行测试
- 如何在浏览器控制台(console)里输出彩色样式调试信息
- js控制台/console输出/打印图片
- windows控制台程序下打印彩色字和获取系统时间的函数
- Xcode插件: 控制台打印插件 KZLinkedConsole
- 利用Js的console对象,在控制台打印调式信息测试Js
- chrome浏览器控制台 console不打印信息问题解决办法。
- 在 控制台(console)打印 Stack Trace
- Js也有console对象,在控制台打印调试再好不过
- Js也有console对象,在控制台打印调试再好不过
- C# 输出Console控制台打印的内容到文件
- javascript中浏览器控制台console.log 输出图片,彩色字体,文字
- 浏览器控制台 打印彩色文字