在mfc中打开console窗口

转载 2012年03月30日 10:46:11

在mfc中打开console窗口,备忘。

1 console.h

#ifndef __Console_H__ #define __Console_H__ #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <io.h> #include <Windows.h> class Console : public Singleton<ARCConsole> { public: Console() { if (!m_hConsoleOutput) { AllocConsole(); m_hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); char str[512] = "start Console Log...\n"; WriteConsole(m_hConsoleOutput, str, strlen(str),NULL, NULL); } } void printf(const char* format, ...) { va_list args; int len = 0; char str[512] = {0}; va_start(args, format); len = vsprintf(str, format, args) + 1; WriteConsole(m_hConsoleOutput, str, len,NULL, NULL); va_end(args); return; } ~Console() { if (m_hConsoleOutput) { char str[512] = "destroy console...\n"; WriteConsole(m_hConsoleOutput, str, strlen(str),NULL, NULL); CloseHandle(m_hConsoleOutput); FreeConsole(); } } static ARCConsole& getSingleton( void ) { assert( ms_Singleton ); return ( *ms_Singleton ); } static ARCConsole* getSingletonPtr( void ) { return ms_Singleton; } protected: static HANDLE m_hConsoleOutput; }; template<> Console* Ogre::Singleton<Console>::ms_Singleton = 0; HANDLE Console::m_hConsoleOutput = 0; extern Console _G_Console; Console _G_Console;
 
偷懒继承了ogre里的singleton类。若不同的lib分别创建了实例,子类记得覆盖父类的getSingleton()和getSingletonPtr()2个函数。

2 singleton.h

template <typename T> class Singleton { private: /** \brief Explicit private copy constructor. This is a forbidden operation.*/ Singleton(const Singleton<T> &); /** \brief Private operator= . This is a forbidden operation. */ Singleton& operator=(const Singleton<T> &); protected: static T* ms_Singleton; public: Singleton( void ) { assert( !ms_Singleton ); #if defined( _MSC_VER ) && _MSC_VER < 1200 int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1; ms_Singleton = (T*)((int)this + offset); #else ms_Singleton = static_cast< T* >( this ); #endif } ~Singleton( void ) { assert( ms_Singleton ); ms_Singleton = 0; } static T& getSingleton( void ) { assert( ms_Singleton ); return ( *ms_Singleton ); } static T* getSingletonPtr( void ) { return ms_Singleton; } };
 
 

相关文章推荐

窗口应用中或MFC中输出console

AllocConsole();  stdout = freopen("CONOUT$", "w" stdout);  printf("hello, world.\n");

Win32和mfc下弹出console窗口的方法

在C**App InitInstance()中 调出console窗口BOOL CWinApp::InitInstance()    AllocConsole();    SetConsoleTitl...

MFC 利用控制台输出调试信息(转)

转载的,出处不知道了。sorry 方法一: WINDOWS为你提供了一系列的API来完成这个功能,例如:ReadConsole,WriteConsole等,具体参见MSDN。 1。...

MFC 多文档 自定义浏览器新打开窗口解决办法

一般情况下我们点击链接,如果是新建窗口,会调用其他浏览器打开。我的view类是集成于 CFormView,下面是解决这种问题的一种办法: 一、在YourView类中新建自定义消息 1.在YourVie...

如何让console程序以全屏窗口运行

有看到人问vc6,0编译生成的exe文件怎么样能让他全屏运行.
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)