常用代碼。
UI程序的std::cout重定向輸出到Visual Studio的debug輸出窗口
#include <iostream>
#include <streambuf>
#include <vector>
#include <string>
#include <afxwin.h> //MFC// 自定義 streambuf 類,用于重定向輸出到 Visual Studio 的輸出窗口
class OutputDebugStreamBuf : public std::streambuf {
public:OutputDebugStreamBuf() : buffer(256) {setp(buffer.data(), buffer.data() + buffer.size() - 1);}~OutputDebugStreamBuf() {sync();}protected:// 重寫 overflow 方法,處理緩沖區溢出int_type overflow(int_type c) override {if (c != traits_type::eof()) {*pptr() = c;pbump(1);if (sync() != 0) {return traits_type::eof();}}return c;}// 重寫 sync 方法,將緩沖區內容輸出到 Visual Studio 的輸出窗口int sync() override {if (pbase() != pptr()) {std::string output(pbase(), pptr() - pbase());OutputDebugStringA(output.c_str()); // 使用 OutputDebugStringA 輸出setp(buffer.data(), buffer.data() + buffer.size() - 1); // 重置緩沖區}return 0;}private:std::vector<char> buffer; // 緩沖區
};// 管理 std::cout 重定向的類
class CoutRedirector {
public:CoutRedirector() {// 保存原始的 std::cout 緩沖區original_cout_buffer = std::cout.rdbuf();// 重定向 std::cout 到自定義的 streambufstd::cout.rdbuf(&debugStreamBuf);}~CoutRedirector() {// 恢復原始的 std::cout 緩沖區if (original_cout_buffer) {std::cout.rdbuf(original_cout_buffer);}}private:OutputDebugStreamBuf debugStreamBuf; // 自定義的 streambufstd::streambuf* original_cout_buffer = nullptr; // 保存原始的 std::cout 緩沖區
};// 全局變量,用于管理 std::cout 的重定向
CoutRedirector g_CoutRedirector;