`
Fangrn
  • 浏览: 822601 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

VC++ 中用来调试和输出 console 信息的工具

    博客分类:
  • vc++
 
阅读更多

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编程可视化初学输出文本

    在VC++环境中进行Windows编程,主要是利用Microsoft的Visual Studio开发工具,它提供了强大的集成开发环境(IDE)来创建Windows应用程序。对于初学者来说,学习如何在Windows上进行可视化编程是理解计算机图形用户...

    C语言上机软件VC++6.0中文版安装,学习VisualC++6.0编程环境的使用.pdf

    2. **启动IDE**:通过双击图标启动VC++6.0,进入一个包含菜单栏、工具栏、编辑窗口和输出窗口的工作界面。 3. **创建工程**:在“文件”菜单中选择“新建”,然后选择“工程”。在向导中选择“Win32 Console ...

    VC版Windows错误信息查看器源代码

    为了帮助开发者和系统管理员更好地诊断和解决Windows系统中的问题,出现了“VC版Windows错误信息查看器”这样的工具。这款程序能够解析并解释Windows错误代码,提供清晰的错误信息描述,便于我们理解系统状况。本文...

    win32控制台

    这些文件可以帮助学习者深入理解如何在VC++环境中创建和管理Win32控制台程序,包括如何处理输入输出、使用特定的API函数,以及如何调试和优化代码。 总的来说,掌握Win32控制台编程对于理解Windows操作系统的工作...

    ConsoleToPipeTest.rar_系统编程_Visual_C++_

    在这个特定的例子中,管道被用来将DOS命令的输出从子进程传递到父进程,即VC++编写的主程序。这种技术在很多场景下都很有用,例如当需要捕获外部命令的输出进行进一步处理时。 Visual C++是Microsoft提供的一个集成...

    简易计算器(vc6.0实现)

    在`main()`函数中,通过`std::cin`和`std::cout`处理用户的输入和输出。用户可以输入数字和运算符,然后程序会根据运算符执行相应的计算。 3. **基本运算符处理**:计算器通常支持加法、减法、乘法和除法。在C++中...

    VC2008创建控制台程序方法

    在中间的模板列表中,你会看到"Win32 Console Application"。这个模板就是用来创建控制台程序的。双击它或者直接选择后,在右侧的"项目名称"框中输入你的项目名字,例如 "ConsoleApp"。然后,选择你希望保存项目的...

Global site tag (gtag.js) - Google Analytics