MFC中调用std::cout

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

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

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

#include 
#include 
#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,有的编译器不用你再去写using namespace std;这句了,直接调用cout,iostream是iosteam.h 的改进版本。

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

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

编译

MFC中调用std::cout_第1张图片

还有其他做法

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

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

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

#include 
// 必须要进行前导声明
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

右键添加资源,菜单项


MFC中调用std::cout_第2张图片

为菜单项添加选中指示

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

MFC中调用std::cout_第3张图片

你可能感兴趣的:(MFC)