#include<stdio.h>
class CMDOUT
{
private:
HANDLE hConsole;
HANDLE hWrite;
HANDLE hRead;
public:
CMDOUT(const char* title, const char* initContent){
if (AllocConsole()){
if (title) SetConsoleTitle(title); //修改Console的标题.
if (initContent) {
hWrite = CreateConsoleScreenBuffer(
GENERIC_READ | GENERIC_WRITE, //权限
FILE_SHARE_READ | FILE_SHARE_WRITE, //console的共享方式
NULL,//安全性设置,NULL默认即可
CONSOLE_TEXTMODE_BUFFER,//唯一值
NULL//保留
);//创建console的屏幕内容缓存,一个进程可以有多个ScreenBuffer
SetConsoleActiveScreenBuffer(hWrite); //显示该buffer的内容
SetConsoleTextAttribute(hWrite, FOREGROUND_GREEN);//FOREGROUND_RED| BACKGROUND_GREEN
WriteConsole(hWrite, initContent, (DWORD)strlen(initContent), NULL, NULL); //在屏幕显示
}else {
hWrite = GetStdHandle(STD_OUTPUT_HANDLE); //这里也可以使用 STD_ERROR_HANDLE
}
hRead = GetStdHandle(STD_INPUT_HANDLE);
}
}
~CMDOUT() {
CloseHandle(hWrite);
CloseHandle(hRead);
CloseHandle(hConsole);
FreeConsole();
}
DWORD print(char* fmt,...) {
DWORD nLen;
va_list args;
va_start(args, fmt);
char data[1024];
int len = vsnprintf(data, 1024, fmt, args);
//int len = sprintf_s(data, 1024, fmt, args);
va_end(args);
WriteConsole(hWrite, data, len, &nLen, NULL);
return nLen;
}
DWORD input(char* Buffer, DWORD nBufferLen) {
DWORD dwCount;
ReadConsole(hRead, Buffer, nBufferLen, &dwCount, NULL);
return dwCount;
}
};
WIN32上GUI程序使用cmd窗口打印调试信息
最新推荐文章于 2023-06-21 11:25:42 发布