📄 gameconsole.cpp
字号:
//--------------------------------------------------
// Desc: 游戏控制台
// Author: artsylee/2007.3.22
//--------------------------------------------------
#include "GameConsole.h"
#include "Common.h"
CGameConsole::CGameConsole()
{
m_hConWnd = NULL;
m_bCreate = false;
m_bConActive = false;
}
CGameConsole::~CGameConsole()
{
m_hConWnd = NULL;
m_bCreate = false;
}
//--------------------------------------------------
// 创建一个控制台(是否即时激活)
//--------------------------------------------------
BOOL CGameConsole::CreateConsole(bool bActive /* = true */)
{
if(m_bCreate)
{
Close();
}
if(AllocConsole())
{
m_hConWnd = GetConsoleWindow();
SetConsoleTitle("ASE引擎控制台");
m_bCreate = true;
m_bConActive = bActive;
m_hMainWnd = GetMainApp()->GetWndHandle();
//--------------------------------------------------
// 后台需要继续运行, 以获取输入信息
//--------------------------------------------------
GetMainApp()->SetNotSuspend(true);
m_hInput = GetStdHandle(STD_INPUT_HANDLE);
m_hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
if(!bActive)
{
SetForegroundWindow(m_hMainWnd);
ShowWindow(m_hConWnd, SW_HIDE);
}
else
{
GetInput();
}
return TRUE;
}
return FALSE;
}
//--------------------------------------------------
// 显示控制台(后台显示, 用于查看输出, 不接受输入)
//--------------------------------------------------
void CGameConsole::ShowConsole(void)
{
if(m_bCreate)
{
ShowWindow(m_hConWnd, SW_SHOWNORMAL);
BringWindowToTop(m_hMainWnd);
SetForegroundWindow(m_hMainWnd);
m_bConActive = false;
}
}
//--------------------------------------------------
// 隐藏控制台
//--------------------------------------------------
void CGameConsole::HideConsole(void)
{
if(m_bCreate)
{
ShowWindow(m_hConWnd, SW_HIDE);
BringWindowToTop(m_hMainWnd);
SetForegroundWindow(m_hMainWnd);
m_bConActive = false;
}
}
//--------------------------------------------------
// 激活控制台(前台显示, 用于接受命令输入)
//--------------------------------------------------
void CGameConsole::ActiveConsole(void)
{
if(m_bCreate && !m_bConActive)
{
SetForegroundWindow(m_hConWnd);
ShowWindow(m_hConWnd, SW_SHOWNORMAL);
m_bConActive = true;
}
FlushConsoleInputBuffer(m_hInput);
GetInput();
}
//--------------------------------------------------
// 激活主窗口并自动隐藏控制台(用于返回游戏状态)
//--------------------------------------------------
void CGameConsole::ActiveMainWindow(void)
{
if(m_bCreate)
{
SetForegroundWindow(m_hMainWnd);
ShowWindow(m_hMainWnd, SW_SHOWNORMAL);
ShowWindow(m_hConWnd, SW_HIDE);
m_bConActive = false;
}
}
//--------------------------------------------------
// 在控制台输出一行信息
//--------------------------------------------------
void CGameConsole::Print(char *text, ...)
{
if(m_bCreate)
{
char buffer[1024];
va_list args;
va_start(args, text);
_vsnprintf(buffer, 1024, text, args);
va_end(args);
buffer[1023] = '\0';
if(buffer[0] == 0)
return;
char *szEnd = "\r\n";
strcat(buffer, szEnd);
DWORD nlen;
WriteConsole(m_hOutput, buffer, strlen(buffer), &nlen, NULL);
}
}
bool CGameConsole::IsInput(void)
{
return m_szInput[0] != 0;
}
void CGameConsole::GetInput(char *szInput)
{
strcpy(szInput, m_szInput);
}
void CGameConsole::ClearInput(void)
{
m_szInput[0] = 0;
}
//--------------------------------------------------
// 关闭控制台
//--------------------------------------------------
void CGameConsole::Close()
{
FreeConsole();
m_hConWnd = NULL;
m_bCreate = false;
m_bConActive = false;
GetMainApp()->SetNotSuspend(false);
}
//--------------------------------------------------
// 获取控制台输入字符串
//--------------------------------------------------
void CGameConsole::GetInput(void)
{
if(m_bCreate)
{
//--------------------------------------------------
// ReadConsole会阻塞当前进程运行, 只能输入字符串返回
//--------------------------------------------------
DWORD nlen;
memset(m_szInput, 0, sizeof(m_szInput));
ReadConsole(m_hInput, m_szInput, sizeof(m_szInput), &nlen, NULL);
for(int i=strlen(m_szInput)-1; i>=0; i--)
{
if(m_szInput[i]=='\r' && i!=0)
{
m_szInput[i] = 0;
break;
}
}
_strlwr(m_szInput);
m_szInput[255] = 0;
}
}
void CGameConsole::SaveToLogFile(char *file)
{
/*
char outname[256];
if(file==NULL)
{
strcpy(outname, "Console_log.html");
}
else
{
strcpy(outname, file);
strcat(outname, ".html");
}
ofstream f;
f.open(outname);
f<<"<HTML>"<<endl;
f<<"<HEAD>"<<endl;
f<<"<TITLE>Console Log </TITLE>"<<endl;
for(unsigned i=0; i<m_buffer.size(); i++)
{
f<<m_buffer[i].c_str();
f<<"<br>";
}
f<<"</HEAD>"<<endl;
f<<"</HTML>"<<endl;
f.close();
*/
}
void CGameConsole::Log(char *format, ...)
{
/*
char buffer[1024];
va_list args;
va_start(args, format);
_vsnprintf(buffer, 1024, format, args);
va_end(args);
buffer[1023] = '\0';
string s = buffer;
m_buffer.push_back(s);
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -