MFC中调用std::cout

2023-05-16

    std::cout很好用,但是在MFC中,一般的变量值输出MessageBox( )来显示,很不方便。下面就实战一下利用std::cout来输出。

1. 利用VC 6.0 MFC App Wizard新建一个基于对话框的单文档应用程序

2. 在工程中新建一个cpp文件,这里起名为MFCConsole.cpp, 代码内容如下

#include <stdio.h>
#include <windows.h>
#include "StdAfx.h"

extern "C"
{
	int PASCAL WinMain(HINSTANCE inst, HINSTANCE dumb, LPSTR param, int show);
};

int main(int argc, char** argv)
{
	char buf[256];
	int i;
	HINSTANCE inst;
	
	inst = (HINSTANCE)GetModuleHandle(NULL);
	buf[0] = 0;

	for(i = 1; i< argc; i++)
	{
		strcat(buf, argv[i]);
		strcat(buf, " ");
	}

	return WinMain(inst, NULL, buf, SW_SHOWNORMAL);
}

3. 在需要调用std::cout的cpp文件中加入头文件包含,也即加入#include <iostream.h> ,这里提一下,有时候包含的是iostream,并没有最后的.h,区别在于,如果你包含iostream.h,有的编译器不用你再去写using namespace std;这句了,直接调用cout,iostream是iosteam.h 的改进版本。

4. 在需要的地方尽情使用cout吧。

5. Last but not the least,修改工程属性,project ——>settings——>link——>project options下的subsystem:windows改为subsystem:console

编译


还有其他做法

http://blog.csdn.net/u013468168/article/details/73743510

========================WinMain========================

https://blog.csdn.net/tcjiaan/article/details/8497535

#include <Windows.h>
// 必须要进行前导声明
LRESULT CALLBACK WindowProc( _In_  HWND hwnd, _In_  UINT uMsg, _In_  WPARAM wParam, _In_  LPARAM lParam );


//#define CALLBACK    __stdcall  专门用来调用Win API而__cdecl是C语言的调用风格  
int CALLBACK WinMain(
	_In_  HINSTANCE hInstance, // 当前应用程序的实例句柄
	_In_  HINSTANCE hPrevInstance, // 
	_In_  LPSTR lpCmdLine,// 命令行参数
	_In_  int nCmdShow// 主窗口的显示方式
	)
{
	// 类名
	WCHAR* cls_Name = L"My Class";

	// 【1】设计窗口类
	// 有没有标题栏,背景什么颜色,有没有边框,可不可以调整大小等

	
	//==========================【1.1】完全赋值=====================
	//WNDCLASS wc;
	//wc.cbClsExtra = 0;
	//wc.cbWndExtra = 0;
	//wc.hCursor = LoadCursor(hInstance, IDC_ARROW);;
	//wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION);;
	//wc.lpszMenuName = NULL;
	//wc.style = CS_HREDRAW | CS_VREDRAW;
	//wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
	 我们是把WindowProc赋给了新注册的窗口类,并创建了主窗口,返回一个表示主窗口的句柄,所以,这里MSG中的hwnd指的就是我们的主窗口。
	//wc.lpfnWndProc = WindowProc;
	//wc.lpszClassName = cls_Name;
	//wc.hInstance = hInstance;

	//==========================【1.2】利用结构体默认参数赋值=======
	//WNDCLASS wc = { sizeof(WNDCLASS) };
	WNDCLASS wc = {};
	//wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 让窗口自动重绘
	wc.style = CS_HREDRAW | CS_VREDRAW;// 强制重新绘制整个客户区的内容
	wc.lpfnWndProc = WindowProc;// 这里传入消息处理Windowproc函数!!!!!!!!!!!!!!!!!!!!!!!!!!!
	wc.lpszClassName = cls_Name;
	wc.hInstance = hInstance;

	// 【2】注册窗口类
	if (!RegisterClass(&wc))
	{
		MessageBox(NULL, TEXT("RegisterClass failed, This program requires Windows NT!"), cls_Name, MB_ICONERROR);
		return 0;
	}

	// 【3】创建窗口
	HWND hwnd = CreateWindow(
		cls_Name,			//类名,要和刚才注册的一致
		L"我的应用程序",	//窗口标题文字
		WS_OVERLAPPEDWINDOW, //窗口外观样式
		38,					//窗口相对于父级的X坐标
		20,					//窗口相对于父级的Y坐标
		480,				//窗口的宽度
		250,				//窗口的高度
		NULL,				//没有父窗口,为NULL
		NULL,				//没有菜单,为NULL
		hInstance,			//当前应用程序的实例句柄
		NULL);				//没有附加数据,为NULL

	if (hwnd == NULL) //检查窗口是否创建成功
		return 0;

	// 【4】显示窗口
	ShowWindow(hwnd, SW_SHOW); // 第二个参数也可以设置为WinMain的最后一个参数nCmdShow

	// 【5】更新窗口
	UpdateWindow(hwnd);

	// 【6】消息循环
	MSG msg;
	// GetMessage我们会捕捉整个应用程序的消息(NULL),后两个过滤,指定哪个范围内的消息接收,不过滤都设为0
	while (GetMessage(&msg, NULL, 0, 0)) 
	{
		TranslateMessage(&msg);// 转换按键信息的,
		DispatchMessage(&msg);// 负责把消息传到WindowProc
	}
	return 0;
}

// 在WinMain后实现
// 消息循环是一个死循环
LRESULT CALLBACK WindowProc(
	_In_  HWND hwnd,
	_In_  UINT uMsg,
	_In_  WPARAM wParam,
	_In_  LPARAM lParam // lParam指示消息处理的返回值(结果)
	)
{
	switch (uMsg)
	{
		// 要退出程序,就要先跳出消息循环,和关闭哪个窗口无关
		// 窗口销毁会发出WM_Destroy的消息
		case WM_DESTROY:
		{ 
			PostQuitMessage(0);
			return 0;
		}
		case WM_PAINT:
		{
			PAINTSTRUCT ps;
			BeginPaint(hwnd, &ps);
			SetTextColor(ps.hdc, RGB(10, 0, 255));//设置文本颜色 
			//DrawText(ps.hdc, L"你好,WinMain", wcslen(L"你好,WinMain"), &(ps.rcPaint), DT_CENTER);
			DrawText(ps.hdc, L"你好,WinMain", -1, &(ps.rcPaint), DT_CENTER);			
			EndPaint(hwnd, &ps);			
			break;
		}
	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam); // 把我们不感兴趣或者没有处理的消息交回给操作系统来处理
}

============ 添加菜单=============

https://blog.csdn.net/tcjiaan/article/details/8510260

D:\VS2010_workspace\WinMain\WinMain\WinMain.cpp以及resource.h

右键添加资源,菜单项



为菜单项添加选中指示

https://blog.csdn.net/tcjiaan/article/details/8513297


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MFC中调用std::cout 的相关文章

  • c++ max_element 每n个元素

    有没有办法比较每 N 个元素来找到容器中的最大元素并返回索引 使用 STL BOOST 或 其他库 对于每个 N 我的意思是使用 std max element 但将 for 的增加从 first 更改为 first n based on
  • 如何最好地避免 C++/CLI 本机类型中的双重转换

    传统上 我一直使用 MFC 扩展 dll 并使用 dllimport dllexport 导入 导出 但是 当 dll 更改为使用 clr 时 此方法的成本会变得很高 因为调用可能会导致双重转换 我现在的性能受到了巨大的打击 需要停止双重重
  • 使用 CSplitterWnd 在 CChildFrame 中创建多个视图

    我正在使用 MFC MDI 我需要创建如下视图 我的 ChildWnd 分为两部分 它们是LeftView CView 和RightView CScrollView LeftView 分为两部分 TreeView 和 FormView 我怎
  • 从 boost::shared_ptr 转换为 std::shared_ptr?

    我有一个内部使用 Boost 版本的库shared ptr并且只暴露那些 对于我的应用程序 我想使用std shared ptr只要有可能 遗憾的是 这两种类型之间没有直接转换 因为引用计数的内容取决于实现 有什么办法可以同时拥有boost
  • MFC:如何捕获Web浏览器控件中的链接单击事件?

    我有一个带有 Web 控件的 MFC 应用程序 单击可单击链接时 它将使用 IE 打开 而不是默认浏览器 问题 有没有办法强制使用默认浏览器打开它 如果没有 我如何捕获链接单击事件 以便稍后可以操纵单击事件 谢谢 不 据我所知还没有 查看有
  • 如何将 std::variant 作为 VARIANT* 传递给 ExecWB?

    我看过这篇关于使用的文章std variant https en cppreference com w cpp utility variant 这是因为以下代码引发了代码分析警告 void CChristianLifeMinistryHtm
  • 如何在 MFC 中创建 GUI

    我需要能够即时创建指南 MFC中有没有办法做到这一点 我了解了如何在 net 中做到这一点 但我们还没有做到这一点 如果没有 您是否有一些我可以使用的代码的指针 don t forget to add Rpcrt4 lib to your
  • 为什么我不能在 C++ 中的 `std::map` 中存储引用?

    我知道引用不是指针 而是对象的别名 但是 我仍然不明白这对我作为程序员到底意味着什么 即幕后的引用是什么 我认为理解这一点的最好方法是理解为什么我无法在地图中存储参考 我知道我需要停止将引用视为指针的语法糖 只是不知道如何 按照我的理解 引
  • MFC中如何将BYTE数组转换为CString?

    如何在 MFC 中将 BYTE 数组转换为 CString 试试这个 例如 如果 x 是你的字节数组 那么 BYTE x 5 x 0 A x 1 0 x 2 B x 3 C x 4 0 CString str LPCSTR x sizeof
  • MFC:如何在一个函数中捕获对话框每个控件的设置焦点

    我有 n 个对话框 它们具有相同的基本对话框 每个对话框都有自己的控件 编辑框 组合框 列表控件 etc 在基本对话框中 如何设置每个控件的焦点消息 例如 给出一个消息框 text Hello I got focus my ID is d
  • 如何停止对辅助隐式加载 DLL 的 DLL 劫持

    例如 COMDLG32 DLL 隐式链接到以下系统 DLL 以及其他 xmllite dll dll srvcli dll wkscli dll 链接信息库 netutils dll 微星 dll 由于这些是由操作系统隐式加载的 而不是使用
  • 在Linux上运行MFC程序

    我有一个相当大的基于 MFC 的程序 我的任务是让它在 Linux 上运行 我已经解释过 这需要将程序重新编写为带有 STL 的直接 C 更多工作 或者重新编写为 Qt C 更少工作 现在我被告知 我需要编写包装器以使每个 MFC 类在 L
  • 如何将命名管道字符串从非托管代码空间发送到托管代码空间?

    我似乎遇到了命名管道 101 问题 我有一个非常简单的设置来连接从 C 非托管应用程序传输到 C 托管应用程序的单工命名管道 管道已连接 但我无法通过管道发送 消息 除非我关闭似乎刷新缓冲区并传递消息的句柄 就好像消息被屏蔽了一样 我尝试颠
  • 禁用/启用 MFC 功能包的功能区按钮

    我正在使用 MFC 功能包 并且功能区栏上有一些按钮 即 CMFCRibbonButton 的实例 问题是我想在某些条件下启用和禁用其中一些 但在运行时 我怎样才能做到这一点 因为没有具体的方法 我听说解决方案是在运行时附加 分离事件处理程
  • 将 uint64_t 转换为 std::string

    如何将 uint64 t 值传输到 std string 我需要构造包含该值的 std string 例如这样的事情 void genString uint64 t val std string str some code for str
  • _CrtDumpMemoryLeaks( ) == 1 在第一行代码上?

    我正在开发一个 MFC Visual C 项目 据我了解MSDN http msdn microsoft com en us library d41t22sb 28v VS 100 29 aspx CrtDumpMemoryLeaks 应该
  • MinGW支持MFC吗?

    我已经使用 MinGW 开发了 WinAPI 应用程序 没有出现任何问题 现在 我可以用 MFC 做同样的事情吗 我只是在这里猜测 但我认为您需要购买 Visual Studio 的副本才能获得使用 MFC 的许可证 MFC 也不因其对 C
  • 捕获由纯 C++ dll 中的 MFC 应用程序生成的 Windows 消息

    首先 这可能吗 我有一个与某些硬件接口的第三方 dll 它是用MFC编写的 我 从 dll 供应商处 收到了一个示例 Visual Studio 2010 解决方案 该解决方案只有一个项目 调用相关第三方 dll 的 MFC 应用程序 ex
  • cout 可以以某种方式改变变量吗?

    所以我有一个看起来像这样的函数 float function float x SomeValue return x SomeOtherValue 在某些时候 这个函数会溢出并返回一个非常大的负值 为了尝试准确追踪发生这种情况的位置 我添加了
  • C++ 检查 unicode 字符是否为全角

    如何检查unicode字符是否是全角 我使用Win32 MFC 例如 中是全宽 A不是全角 是全宽 F不是全宽 你需要的是检索东亚宽度 http www unicode org reports tr11 的角色 您可以通过解析来做到这一点东

随机推荐

  • Isaac Gym(一)在Ubuntu20.04.1中安装Isaac Gym

    在Ubuntu20 04 1中安装Isaac Gym 前提1 安装 Conda1 1 下载Anaconda3安装文件1 2 运行1 3 设置路径 2 安装 Isaac Gym2 1 下载Isaac Gym安装文件2 2 解压并删除安装包2
  • 在rviz中出现For frame [laser]: Fixed Frame [laser_link] does not exist

    参考 xff1a 链接 一 激光雷达在rviz中没有显示扫描数据 二 解决方法 topic报frame transform之类错误 xff0c 就有两个办法 xff1a 1 把global fixed frame设成topic自己所在的坐标
  • ubuntu安装nerd font字体

    步骤 1 下载nerd font字体文件到某个文件夹 在网址https www nerdfonts com font downloads xff0c 找到JetBrainsMono xff0c DroidSansMono xff0c Dej
  • OpenStack计费项目CloudKitty的强化及运用

    本文转自Openstack中国社区Openstack计费项目CloudKitty的强化及运用 本文作者 xff1a Li Xiangjun 在OpenStack开发社区向 Big Tent 模式全面转型之际 xff0c 一个新的项目 Clo
  • Winpcap数据包的抓取及还原

    winpcap技术手册 xff0c 除了安装文件里doc文件下有个帮助 xff0c 这里在给一个 xff1a http www ferrisxu com WinPcap html index html 这里我们用pcap next ex 函
  • 柱面坐标变换

    在图像拍摄点固定的情况下 xff0c 对图像做柱面投影变换 xff0c 再进行配准会得到较为理想的效果 如图所示 xff0c 点P在相机所处的坐标系下的坐标为 xff0c 在像素坐标系下表示为P xff08 x xff0c y xff09
  • 几行Python代码教你zip打包

    码农一方面是码代码 xff0c 另一方面是布署服务 xff0c 传到服务器时 xff0c 文件数据较多时 xff0c 直接通过文件传输概率性会丢失文件 xff0c 最好是先压成zip包 xff0c 再传输 但是 xff0c zip包中的文件
  • 推荐一款强大的OCR工具

    大家好 xff0c 我是 jonssonyan xff0c 今天我想向大家介绍一款强大的 OCR 工具 Umi OCR 以下是它的开源地址 Umi OCR GitHub xff1a https github com hiroi sora U
  • ArXiv简介以及论文提交

    arXiv网站简介 arXiv是一个收集物理学 数学 计算机科学 生物学与数理经济学的论文预印本的网站 其中arXiv发音同 archive xff0c 因为 X 代表希腊字母 xff0c 国际音标为 kai 它于1991年8月14日成立
  • Vue中axios请求报错

    问题 xff1a axios请求成功但是还是进入catch 在请求后端接口后 xff0c 发现请求成功了 xff0c 但是却报错了 在经过排查之后 xff0c 发现后端返回的数据结构更改了 xff0c 所以导致成功的代码块内部出现错误 xf
  • lsnrctl command not found

    在linux安装完oracle时 当你遇到lsnrctl command not found等问题都不能用时 会有几种情况 1 首先你先查看下环境变量里面有没有加入oracle的配置 执行 echo ORACLE HOME 没有的话 你执行
  • CNC加工中心程序代码大全,你还不收藏吗?

    数控程序中字母的含义 O xff1a 程序号 xff0c 设定程序号 N xff1a 程序段号 xff0c 设定程序顺序号 G xff1a 准备功能 X Y Z xff1a 尺寸字符 xff0c 轴移动指令 A B C U V W xff1
  • 413 Request Entity Too Large(请求实体太大)

    最近开发时遇到了上传失败的情况 xff0c 提示 xff1a 413 Request Entity Too Large xff08 请求实体太大 xff09 因为上传通过代理服务器Nginx xff0c 因此可以 修改代理服务器Nginx
  • Photos(PHFetchResultChangeDetails)

    Photos PHChange Photos PHObjectChangeDetails Photos PHFetchResultChangeDetails PHFetchResultChangeDetails主要用于记录PHFetchRe
  • 远程桌面连接的时候 屏幕一闪就没了 然后不能连接上

    重启本地两个远程服务组件Remote Desktop Services和Remote Desktop Services usermode Port Redirector 如果还不行 xff0c 按下面的试试 启动注册表编辑器 Regedt3
  • 关于codeforces比赛规则介绍(转载)

    Codeforces 简称 cf 所以谈论cf的时候经常被误会成TX的那款游戏 网址 codeforces com 这是一个俄国的算法竞赛网站 由来自萨拉托夫州立大学 由Mike Mirzayanov领导的一个团队创立和维护 是一个举办比赛
  • 自制书立

    店里卖的书立简直贵的离谱 xff0c 不就是一个直角的铁片吗 xff0c 要那么多钱 索性自己做一个 xff0c 就用最便宜的衣架 xff0c 不到一元钱搞定 xff01 把衣架弯成直角 换个角度 xff0c 再来一张 完事了 xff0c
  • 连载:面向对象葵花宝典:思想、技巧与实践(27) - 动态模型设计

    类模型 指导我们如何声明类 xff0c 动态模型 指导我们如何实现类 xff01 动态模型设计一般都是在类模型设计完成后才开始 xff0c 因为动态模型设计的时候一般都需要用到类模型中的类 相对类模型来说 xff0c 动态模型要相对简单一些
  • C语言经典100题——输出“魔方阵“

    lt 1 gt 题目描述 输出 魔方阵 xff0c 所谓魔方阵是指它的每一行 每一列和对角线之和均相等 例如 xff1a 8 1 6 3 5 7 4 9 2 要求输出1 n 2的自然数构成的魔方阵 lt 2 gt 思路分析 将1放在第1行中
  • MFC中调用std::cout

    std cout很好用 xff0c 但是在MFC中 xff0c 一般的变量值输出MessageBox 来显示 xff0c 很不方便 下面就实战一下利用std cout来输出 1 利用VC 6 0 MFC App Wizard新建一个基于对话