IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> MFC 打印日志 -> 正文阅读

[开发工具]MFC 打印日志

创建项目

新建一个 MFC项目,给它起名为 MfcConsole(这个名字可以随意)

  • Windows 桌面应用程序:纯 Win32 API 创建的项目
  • MFC 应用:MFC是对 Win32 API的封装简化
    在这里插入图片描述
    “应用程序类型” 改为 “单个文档”,同时取消 “高级功能” 页面的所有选项(这里为的是简化测试程序代码量,便于查看)
    在这里插入图片描述

打印日志

使用 Trace 打印

语法:TRACE( "待打印的字符串" ),它会在程序执行时,在调试输出窗口打印日志,同时还会打印输出日志的行号
在这里插入图片描述

editbin 生成事件

二进制文件编辑器 (EDITBIN.EXE) ,用于修改 32 位通用对象文件格式 (COFF) 二进制文件。可以使用 EDITBIN 修改对象文件、可执行文件和动态链接库 (DLL)

在 “解决方案资源管理器” 中右击,然后选择 “属性”。依次选择 “生成事件” —> “生成后事件” ,在命令行中输入 editbin /SUBSYSTEM:CONSOLE "$(OUTDIR)\$(ProjectName).exe"

注意:属性页的 “配置” 和 “平台”,这两个参数,必须与待会运行时所用参数一致
在这里插入图片描述
日志函数使用如下4个进行测试

  • printf
  • _cprintf
  • WriteConsole
  • std::cout

代码如下

printf("printf log\n");

//The POSIX name for this item is deprecated.Instead, use the ISO Cand C++ conformant name : _cprintf
//cprintf("cprintf log\n");

_cprintf("_cprintf log\n");

HANDLE hStdout;
DWORD dwChars;
TCHAR buf[] = _T("WriteConsole Log\n");
int len = lstrlen(buf);
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if (hStdout == INVALID_HANDLE_VALUE)
{
	return -1;
}
WriteConsole(hStdout, buf, len, &dwChars, NULL);

std::cout << "cout log" << std::endl;

注意:需要分别为 _cprintf 引入头文件 #include "conio.h"std::cout 引入头文件 #include "iostream"

//cprintf
#include "conio.h"
//cout
#include "iostream"

在这里插入图片描述

修改程序为console类型来打印

linker 表示链接器

第二个参数的前半部分是子系统

  • /subsystem:windows 表示窗口
  • /subsystem:console 表示控制台

在这里插入图片描述

程序入口

  • 连接器对控制台程序设置的入口函数是 mainCRTStartup,mainCRTStartup 再调用main 函数;
  • 对图形用户界面(GUI)程序设置的入口函数是 WinMainCRTStartup,WinMainCRTStartup 调用你自己写的 WinMain 函数
    具体设置哪个入口点是由连接器的“/subsystem:”选项确定的,它告诉操作系统如何运行编译生成的.EXE文件

pch.h 文件中添加最下面两行的任意一行即可

#pragma comment( linker, "/subsystem:windows /entry:WinMainCRTStartup" )
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )

#pragma comment( linker, "/subsystem:console /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:WinMainCRTStartup" )

在这里插入图片描述
在这里插入图片描述
如果要改变控制台的颜色,可以使用如下函数

HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon, FOREGROUND_RED | BACKGROUND_BLUE);

在这里插入图片描述

GetStdHandle(STD_OUTPUT_HANDLE)获得句柄。

  • FOREGROUND_INTENSITY 表示设置前景色为高亮显示。
  • FOREGROUND_RED 表示设置前景色为红色,即字体颜色为红色。
  • FOREGROUND_GREEN 表示设置前景色为绿色,即字体颜色为绿色。
  • FOREGROUND_BLUE 表示设置前景色为蓝色,即字体颜色为蓝色。
  • BACKGROUND_INTENSITY 表示设置背景色为高亮显示。
  • BACKGROUND_RED 表示设置背景色为红色。
  • BACKGROUND_GREEN 表示设置背景色为绿色。
  • BACKGROUND_BLUE 表示设置背景色为蓝色。
    在这里插入图片描述
//通过三基色RGB混合得出各种颜色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);//设置三色相加
std::cout << "白色(红色绿色蓝色相加)" << std::endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//设置红色
std::cout << "红色(设置的颜色为红色)" << std::endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);//设置绿色
std::cout << "绿色(设置的颜色为绿色)" << std::endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
std::cout << "蓝色(设置的颜色为蓝色)" << std::endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);//设置红色和绿色相加
std::cout << "黄色(红色和绿色相加色)" << std::endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);//设置红色和蓝色相加
std::cout << "粉色(红色和蓝色相加色)" << std::endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);//设置绿色和蓝色相加
std::cout << "青色(绿色和蓝色相加色)" << std::endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);//前景色高亮
std::cout << "灰色(前景色为高亮显示)" << std::endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_GREEN);
std::cout << "黑色(红色绿色蓝色相加)" << std::endl;
std::cout << std::endl;

在这里插入图片描述

动态分配控制台打印

在主程序的初始化的时候调用AllocConsole(),退出的时候调用FreeConsole(),用来动态显示和隐藏控制台

首先,切换到类视图,选择重写,选中 ExitInstance 方法进行重写 ( InitInstance 方法默认存在)
在这里插入图片描述
AllocConsole() 方法加到 InitInstance 函数中;将 FreeConsole 方法加到 ExitInstance 函数中

AllocConsole() 对于日志函数的支持如下

  • printf 不支持
  • _cprintf 支持
  • WriteConsole 支持
  • std::cout 不支持
    在这里插入图片描述
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-02-24 15:30:20  更:2022-02-24 15:30:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:30:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码