VC++ 中用来调试和输出 console 信息的工具
/********************************************************************
创建日期: 2004/09/02
文件名称: DBWindow.h
作者: 袁桂芳(Fangrn)
版本: 2.0
邮箱: fangrn@163.com
创建目的:
用VC MFC/DLL编程时通常Debug版需要将测试信息通过控制台输出,而
编译成Release版时需要将这些输出调试信息的代码给注释掉,通
常这些代码较多操作比较麻烦。
这个程序的作用就是为了程序员在进行MFC/DLL软件开发时Debug版可以
在一个单独的控制台窗口进行调试程序的输出,而做成Release版时
不必手工将这些代码注释掉,由此程序自动完成。
注意:在一个进程之内只存在一个控制台窗口,对于多个可能同时调试的DLL
请用颜色识别。
版权声明:
您可以随意拷贝和使用这个程序的副本,但请保证所有文件的完整和
不被修改,如果您有修改意见,请与作者联系。
*********************************************************************/
#ifndef _DBWINDOW_
#define _DBWINDOW_
#include <windows.h>
//控制台输出时的文本颜色
#define WDS_T_RED FOREGROUND_RED
#define WDS_T_GREEN FOREGROUND_GREEN
#define WDS_T_BLUE FOREGROUND_BLUE
//控制台输出时的文本背景颜色
#define WDS_BG_RED BACKGROUND_RED
#define WDS_BG_GREEN BACKGROUND_GREEN
#define WDS_BG_BLUE BACKGROUND_BLUE
#ifdef COMDLL_EXPORTS
//设置控制台输出窗口标题
BOOL DBWindowTile(LPCTSTR tile);
//格式化文本输出
BOOL DBWindowWrite(LPCTSTR fmt,...);
//带颜色格式化文本输出
BOOL DBWindowWrite(WORD Attrs,LPCTSTR fmt,...);
#else
#define DBWindowTile
#define DBWindowWrite
#endif
#endif
/********************************************************************
创建日期: 2004/09/02
文件名称: DBWindow.cpp
作者: 袁桂芳(Fangrn)
版本: 2.0
邮箱: fangrn@163.com
创建目的:
用VC MFC/DLL编程时通常Debug版需要将测试信息通过控制台输出,而
编译成Release版时需要将这些输出调试信息的代码给注释掉,通
常这些代码较多操作比较麻烦。
这个程序的作用就是为了程序员在进行MFC/DLL软件开发时Debug版可以
在一个单独的控制台窗口进行调试程序的输出,而做成Release版时
不必手工将这些代码注释掉,由此程序自动完成。
注意:在一个进程之内只存在一个控制台窗口,对于多个可能同时调试的DLL
请用颜色识别。
版权声明:
您可以随意拷贝和使用这个程序的副本,但请保证所有文件的完整和
不被修改,如果您有修改意见,请与作者联系。
*********************************************************************/
#include "stdafx.h"
#include "DBWindow.h"
#ifdef COMDLL_EXPORTS
#include <tchar.h>
#include <stdio.h>
#include <stdarg.h>
#define CONSOLE_TILE _T("DBWindow Ver 2.0 by Fangrn")
class ConsoleWindow
{
public:
ConsoleWindow();
virtual ~ConsoleWindow();
BOOL SetTile(LPCTSTR lpTile);
BOOL WriteString(LPCTSTR lpString);
BOOL WriteString(WORD Attrs,LPCTSTR lpString);
private:
HANDLE m_hConsole;
BOOL m_bCreate;
BOOL m_bAttrs;
WORD m_OldColorAttrs;
};
ConsoleWindow::ConsoleWindow()
{
m_hConsole=NULL;
m_bCreate=FALSE;
if(AllocConsole())
{
m_hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTitle(CONSOLE_TILE);
SetConsoleMode(m_hConsole,ENABLE_PROCESSED_OUTPUT);
m_bCreate=TRUE;
}
else{
m_hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
if(m_hConsole==INVALID_HANDLE_VALUE)
m_hConsole=NULL;
}
if(m_hConsole)
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
if(GetConsoleScreenBufferInfo(m_hConsole, &csbiInfo))
{
m_bAttrs=TRUE;
m_OldColorAttrs = csbiInfo.wAttributes;
}
else{
m_bAttrs=FALSE;
m_OldColorAttrs = 0;
}
}
}
ConsoleWindow::~ConsoleWindow()
{
if(m_bCreate)
FreeConsole();
}
BOOL ConsoleWindow::SetTile(LPCTSTR lpTile)
{
return SetConsoleTitle(lpTile);
}
BOOL ConsoleWindow::WriteString(LPCTSTR lpString)
{
BOOL ret=FALSE;
if(m_hConsole)
{
ret=WriteConsole(m_hConsole,lpString,_tcslen(lpString),NULL,NULL);
}
return ret;
}
BOOL ConsoleWindow::WriteString(WORD Attrs,LPCTSTR lpString)
{
BOOL ret=FALSE;
if(m_hConsole)
{
if(m_bAttrs)SetConsoleTextAttribute(m_hConsole,Attrs);
ret=WriteConsole(m_hConsole,lpString,_tcslen(lpString),NULL,NULL);
if(m_bAttrs)SetConsoleTextAttribute(m_hConsole,m_OldColorAttrs);
}
return ret;
}
ConsoleWindow ConWindow;
#define MAX_BUF_LEN 4096
BOOL DBWindowTile(LPCTSTR tile)
{
return ConWindow.SetTile(tile);
}
BOOL DBWindowWrite(LPCTSTR fmt,...)
{
TCHAR message[MAX_BUF_LEN];
va_list cur_arg;
va_start(cur_arg,fmt);
_vsntprintf(message,MAX_BUF_LEN,fmt,cur_arg);
va_end(cur_arg);
return ConWindow.WriteString(message);
}
BOOL DBWindowWrite(WORD Attrs,LPCTSTR fmt,...)
{
TCHAR message[MAX_BUF_LEN];
va_list cur_arg;
va_start(cur_arg,fmt);
_vsntprintf(message,MAX_BUF_LEN,fmt,cur_arg);
va_end(cur_arg);
return ConWindow.WriteString(Attrs,message);
}
#endif
分享到:
相关推荐
在VC++环境中进行Windows编程,主要是利用Microsoft的Visual Studio开发工具,它提供了强大的集成开发环境(IDE)来创建Windows应用程序。对于初学者来说,学习如何在Windows上进行可视化编程是理解计算机图形用户...
2. **启动IDE**:通过双击图标启动VC++6.0,进入一个包含菜单栏、工具栏、编辑窗口和输出窗口的工作界面。 3. **创建工程**:在“文件”菜单中选择“新建”,然后选择“工程”。在向导中选择“Win32 Console ...
为了帮助开发者和系统管理员更好地诊断和解决Windows系统中的问题,出现了“VC版Windows错误信息查看器”这样的工具。这款程序能够解析并解释Windows错误代码,提供清晰的错误信息描述,便于我们理解系统状况。本文...
这些文件可以帮助学习者深入理解如何在VC++环境中创建和管理Win32控制台程序,包括如何处理输入输出、使用特定的API函数,以及如何调试和优化代码。 总的来说,掌握Win32控制台编程对于理解Windows操作系统的工作...
在这个特定的例子中,管道被用来将DOS命令的输出从子进程传递到父进程,即VC++编写的主程序。这种技术在很多场景下都很有用,例如当需要捕获外部命令的输出进行进一步处理时。 Visual C++是Microsoft提供的一个集成...
在`main()`函数中,通过`std::cin`和`std::cout`处理用户的输入和输出。用户可以输入数字和运算符,然后程序会根据运算符执行相应的计算。 3. **基本运算符处理**:计算器通常支持加法、减法、乘法和除法。在C++中...
在中间的模板列表中,你会看到"Win32 Console Application"。这个模板就是用来创建控制台程序的。双击它或者直接选择后,在右侧的"项目名称"框中输入你的项目名字,例如 "ConsoleApp"。然后,选择你希望保存项目的...