#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窗口打印调试信息
最新推荐文章于 2024-02-03 16:52:45 发布
本文介绍了一个名为CMDOUT的C++类,用于创建控制台应用程序,提供标题定制、初始化内容写入、输出和输入功能。它通过`AllocConsole()`和相关函数实现自定义控制台操作和流管理。
7575

被折叠的 条评论
为什么被折叠?



