MFC调用DOS窗口输出数据或字符串

新建一个MFC窗口程序,双击界面上的OK键。

先介绍要用到的函数:

AllocConsole()函数会为主调进程分配一个新的控制台。
函数原型:
BOOL WINAPI AllocConsole(void);
参数:   无
返回值 :如果函数成功,返回值是非零值;如果函数失败,返回值是零值。
备注: 一个进程仅能关联一个控制台,所以该函数在主调进程已经具有控制台时将会失败。


FreeConsole()

调用AllocConsole()函数关联DOS窗口后需要用此函数释放关联的DOS窗口,如果直接按下窗口程序上的×键关闭程序会报错。所以可以把此函数写到“取消”按钮的回调函数里。

WriteConsole()

函数原型:

BOOLWINAPIWriteConsole(
__in HANDLEhConsoleOutput,
__in const VOID *lpBuffer,
__in DWORDnNumberOfCharsToWrite,
__out LPDWORDlpNumberOfCharsWritten,
__reserved LPVOIDlpReserved
); 

参数:

hConsoleOutput
控制台屏幕缓冲区的句柄。该句柄必须具有的GENERIC_WRITE的访问权限。

lpBuffer
包含要写入控制台屏幕缓冲区字符的缓冲区的指针。
如果缓冲区的从进程的64kb堆里分配.缓冲区的最大大小将取决于堆的使用。

nNumberOfCharsToWrite
要写入的字符数。如果指定的字符数的总大小超过可用的堆,该函数会ERROR_NOT_ENOUGH_MEMORY失败。

lpNumberOfCharsWritten
指向一个变量的指针,该变量接收实际写入的字符数。

lpReserved
保留; 必须为NULL。


然后是获取字符串宽度的函数:

strlen()及wcslen()是标准C++定义的函数,它们分别获取ASCII字符串及宽字符串的长度。

新版本的VS一般默认工程都是Unicode宽字符集,所以一般用wcslen()函数算出字符串宽度。如果是纯英文字符串还可以用C提供的函数sizeof()来计算字符串宽度。

--------------------------------------------

1.首先调用AllocConsole();函数。

void CDOS_MDlg::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	//CDialogEx::OnOK();


	CString terribly;
	AllocConsole();//关联一个控制台


	HANDLE hdlWrite = GetStdHandle(STD_OUTPUT_HANDLE); //取得控制台的句柄


	terribly=L"春哥纯爷们!"; //准备输出的字符串

	WriteConsole(hdlWrite, terribly, wcslen(terribly), NULL, NULL); //向DOS窗口里输出字符串

}

 


2.调用完之后需要释放DOS窗口,在取消键的回调函数中调用FreeConsole()函数释放资源

void CDOS_MDlg::OnBnClickedCancel()
{
	// TODO: 在此添加控件通知处理程序代码

	FreeConsole();//释放关联的控制台,不然会报错

	CDialogEx::OnCancel();
}

 

3.有时候操作的快了就容易点击右上角的×键关闭程序,造成程序出错,所以最好在重载一下OnSysCommand消息,在回调函数中加入释放控制台的命令

void ×××::OnSysCommand(UINT nID, LPARAM lParam)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值


	FreeConsole();//释放关联的控制台,不然会报错


	CDialogEx::OnSysCommand(nID, lParam);
}

4.如果觉得控制台内显示的信息过多还可以清屏

void ×××::OnBnClickedButton1()
{

	system("cls"); //清屏,把控制台内的信息全部清除

}

 

MFC调用DOS窗口输出信息算是一种调试程序的补充,因为有时候没办法用调试窗口查看输出信息。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将MFC结构体数据转换为JSON字符串,你可以使用JsonCpp库。以下是一个示例代码,展示了如何将MFC结构体数据转换为JSON字符串: ```cpp #include <iostream> #include <json/json.h> #include <afx.h> struct MyStruct { CString name; int age; bool isActive; }; int main() { // 初始化MFC结构体数据 MyStruct myStruct; myStruct.name = _T("John"); myStruct.age = 25; myStruct.isActive = true; // 创建Json::Value对象,并设置字段值 Json::Value root; root["name"] = CW2A(myStruct.name); root["age"] = myStruct.age; root["isActive"] = myStruct.isActive; // 将Json::Value对象转换为JSON字符串 Json::StreamWriterBuilder writer; std::string jsonString = Json::writeString(writer, root); // 输出JSON字符串 std::cout << jsonString << std::endl; return 0; } ``` 在上述示例中,我们首先定义了一个MFC结构体`MyStruct`,其中包含了一个CString类型的`name`字段、一个整数类型的`age`字段和一个布尔类型的`isActive`字段。 然后,我们创建了一个Json::Value对象`root`,并将MFC结构体中的字段值分别赋给对应的JSON字段。 接着,我们使用JsonCpp库的`Json::StreamWriterBuilder`和`Json::writeString()`函数将Json::Value对象转换为JSON字符串。 最后,我们将生成的JSON字符串输出到控制台。 运行以上代码,你会看到输出结果为: ``` {"name":"John","age":25,"isActive":true} ``` 希望这个示例能够帮助你将MFC结构体数据转换为JSON字符串。如果有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值