应用程序重新启动 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 访问编辑控件的文本 - 这包括首先以某种方式获取控件的窗口句柄,然后使用 ::SendMessage
将 WM_GETTEXT
和 WM_SETTEXT
消息发送到控件。
祝你好运。
【讨论】:
以上是关于应用程序重新启动 C++ Visual Studio 时保存编辑控件用户输入和恢复的有效方法的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual C++ 中切换子进程窗口可见性而不重新启动子进程
如何在visual studio2015 中配置编写C,C++程序