应用程序重新启动 C++ Visual Studio 时保存编辑控件用户输入和恢复的有效方法

Posted

技术标签:

【中文标题】应用程序重新启动 C++ Visual Studio 时保存编辑控件用户输入和恢复的有效方法【英文标题】:Efficient way to save Edit Control user input and restore when application restarts C++ Visual Studio 【发布时间】:2016-09-01 23:18:43 【问题描述】:

我刚刚被一个在 VS 上用 C++ 编写的项目折腾了。我有一个带有编辑控件的对话框,用户在其中输入 MAC 地址。我想在发生“点击事件”时保存此信息。这样当应用程序退出时,它会被保存并可以再次加载。我自然会将其保存到文件并使用基本文件 I/O。

问题是,“最有效的方法是什么?”。我的研究最终出现在“DialogResult”属性中,但我在 VS 2015 中找不到该属性

https://msdn.microsoft.com/en-us/library/65ad5907(v=vs.100).aspx

非常感谢所有帮助,

-SDEV

【问题讨论】:

欢迎来到***,这是一个编程问题的问答网站——你的问题看起来不像help section中定义的编程问题 【参考方案1】:

这通常使用应用程序的“配置文件”存储来完成,该存储空间以前位于 .INI 文件中,但现在位于注册表中,位于应用程序的 Software 键下。

在 MFC 应用程序的 InitInstance() 中,通常会自动生成对 SetRegistryKey 的调用。这需要一个标识字符串并设置应用程序的配置文件存储。因此,如果您的应用缺少此功能,您需要添加类似 SetRegistryKey(_T("MyCompanyGroupOrAppName")); 的内容。

还有一个用于存储和检索信息的 API。对于编辑控件文本,您可能希望使用CWinApp::WriteProfileString 保存它。因此,在您的处理程序中,您会将编辑控件中的文本放入CString,然后使用

保存它
AfxGetApp()->WriteProfileString(_T("SectionName"), _T("MacAddress"), MyMacAddressString);

要稍后取回字符串,请使用以下内容:

CString MyMacBeforeTheCrash = pApp->GetProfileString(_T("SectionName"), _T("MacAddress"));

以下是文档的一些链接:

CWinApp::SetRegistryKey CWinApp::WriteProfileString CWinApp::GetProfileString

您似乎不确定如何从编辑控件访问文本。有几种方法可以做到这一点,但这取决于您的对话框是如何设置的。

如果你的编辑控件有一个与之关联的CString变量,带有DDX(对话数据交换),那么你调用你的对话类的成员函数:UpdatData(TRUE);,之后,它的CString变量将包含当前文本。要保存值,请将新文本值分配给变量,然后调用 UpdateData(FALSE);

如果您有权访问编辑控件的类变量(CEdit 对象),则可以将编辑控件的文本复制到带有MyEditControl.GetWindowText(MyString);CString。要将字符串的文本复制到编辑控件中,请执行以下操作:MyEditControl.SetWindowText(MyString);

如果您的编辑控件没有任何类型的变量,您可能希望通过进入对话框的资源编辑器来添加一个,右键单击编辑控件,然后从菜单中选择“添加变量”。您将可以选择是否要添加控制对象(CEdit),或者类似CString

您还可以使用非 MFC Win32 API 访问编辑控件的文本 - 这包括首先以某种方式获取控件的窗口句柄,然后使用 ::SendMessageWM_GETTEXTWM_SETTEXT 消息发送到控件。

祝你好运。

【讨论】:

以上是关于应用程序重新启动 C++ Visual Studio 时保存编辑控件用户输入和恢复的有效方法的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual C++ 中切换子进程窗口可见性而不重新启动子进程

visual studio 2010问题修复

如何在visual studio2015 中配置编写C,C++程序

求帮助,电脑玩游戏会弹microsoft visual c++ runtime library是啥原因呢?

Visual C++ 项目系统包

是否可以在不重新启动 Visual Studio 的情况下同时编译 32 位和 64 位配置?