//如果你想在调试窗口程序时有个控制台,方便调试,本文也许能解决你的烦恼。
//本程序调试通过。
//1.新建立个窗体程序,在画面上放3个按钮,button1,button2,button3.
//2.建立个类文件,将最下面的类文件粘贴过去。
//3.窗体的头文件里,添加这一行#include "Unit2.h"
//4.在窗体头文件里添加个TConsoleWindow类型的变量,比如TConsoleWindow console;
//5.button1程序里添加如下:
char str[200];
console.Open();
for (int i = 0; i < 1000; i++)
{
sprintf(str,"苹果%d\n",i);
console.printf(str);
}
//6.button2程序里添加如下:
console.ClrScr();
//7.button3程序里添加如下
console.Close();
//8.运行程序,点击button1,打开控制台,并刷屏。button2,清屏,button3,关闭控制台。
//----------------------------------------------------------------------------------------------------------
//9.下面是个类文件
//TConsoleWindow.h
//---------------------------------------------------------------------------
#ifndef TConsoleWindowH
#define TConsoleWindowH
//---------------------------------------------------------------------------
#include <vcl.h>
//---------------------------------------------------------------------------
class TConsoleWindow
{
public:
TConsoleWindow() { hCon=NULL; }
~TConsoleWindow() { Close(); }
void Open(void);
void Close(void);
void Show(void);
void Hide(void);
DWORD printf(const char *f,...);
void ClrScr(WORD c=FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
__property HANDLE Handle = { read = hCon };
private:
HANDLE hCon;
};
//---------------------------------------------------------------------------
#endif
#include "TConsoleWindow .h"
#include <Windows.h>
void CharToTchar (const char * _char, TCHAR * tchar)
{
int iLength ;
iLength = MultiByteToWideChar (CP_ACP, 0, _char, strlen (_char) + 1, NULL, 0) ;
MultiByteToWideChar (CP_ACP, 0, _char, strlen (_char) + 1, tchar, iLength) ;
}
void TConsoleWindow::Open(void)
{
if(!hCon)
{
AllocConsole();
hCon = GetStdHandle(STD_OUTPUT_HANDLE);
}
}
//---------------------------------------------------------------------------
void TConsoleWindow::Close(void)
{
if(hCon)
{
FreeConsole();
hCon = NULL;
}
}
//---------------------------------------------------------------------------
void TConsoleWindow::Show(void)
{
ShowWindow(GetConsoleWindow(),SW_SHOW);;
}
//---------------------------------------------------------------------------
void TConsoleWindow::Hide(void)
{
ShowWindow(GetConsoleWindow(),SW_HIDE);
}
//---------------------------------------------------------------------------
DWORD TConsoleWindow::printf(const char *f,...)
{
HANDLE hStdout;
DWORD dwChars;
static TCHAR buf[500];
CharToTchar (f, buf);
int len = lstrlen(buf);
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if (hStdout==INVALID_HANDLE_VALUE)
{
return -1;
}
WriteConsole(hStdout,buf,len,&dwChars,NULL);
return 0;
}
//---------------------------------------------------------------------------
void TConsoleWindow::ClrScr(WORD c)
{
DWORD nBytesWrite;
CONSOLE_SCREEN_BUFFER_INFO ConInfo;
GetConsoleScreenBufferInfo(hCon, &ConInfo);
COORD CurPos = { CurPos.X = ConInfo.srWindow.Left, CurPos.Y = ConInfo.srWindow.Top };
FillConsoleOutputAttribute(hCon, c, ConInfo.dwSize.X*ConInfo.dwSize.Y, CurPos, &nBytesWrite);
FillConsoleOutputCharacter(hCon, 0, ConInfo.dwSize.X*ConInfo.dwSize.Y, CurPos, &nBytesWrite);
}
//---------------------------------------------------------------------------
//好了,现在是不是方便了很多。
//---------------------------------------------------------------------------