"MFC界面控件上的内容或状态保存配置文件与恢复" 在MFC (Microsoft Foundation Classes) 应用程序开发中,通常需要在退出应用时保存用户界面(UI)控件的状态,以便下次启动时能恢复这些状态。VS2015 提供了一种简便的方法来实现这一功能,即通过自定义函数 `SaveConfigFile` 和 `RestoreConfigFile` 来保存和恢复界面控件的内容和状态。 `CMainDlg` 是一个继承自 `CDialog` 的类,它是对话框的主要窗口。在 `CMainDlg.h` 文件中,定义了两个静态成员函数:`SaveConfigFile` 和 `RestoreConfigFile`。这两个函数分别用于保存和恢复界面控件的状态。 `SaveConfigFile` 函数接收两个参数,一个是 `CWnd` 指针,代表对话框对象;另一个是控件 ID 数组 `Contrlid[]` 和它的大小 `nCount`。函数遍历对话框中的所有子窗口(控件),对于每个控件,首先检查它是否在不保存列表中,如果不在,就根据控件类型(如 "Edit")和控件 ID 保存其内容。内容可能包括文本、位置、大小等状态信息,这些信息通常会被写入到配置文件(如 `.ini` 文件)中。 `RestoreConfigFile` 函数只接收一个 `CWnd` 指针,它会读取配置文件,然后根据文件中的信息恢复对话框中各个控件的状态。这通常涉及读取每个控件的 ID,然后使用 `GetDlgItem` 函数获取对应的控件,最后设置控件的内容或属性。 在 `CMainDlg.cpp` 文件中,可以看到具体的实现细节,比如两个按钮事件处理函数 `OnBnClickBtnRestorefile()`,它们分别用于触发保存和恢复操作。在实际的项目中,你可以将这些函数绑定到相应的用户界面元素,例如按钮的点击事件,这样用户就可以方便地保存和恢复界面状态。 这种实现方式的优点在于,它可以灵活地处理多个控件,同时允许开发者指定某些控件不参与保存和恢复,只需在 `Contrlid[]` 数组中排除这些控件的 ID 即可。这种方法简化了代码,提高了代码复用性,并且易于维护。 MFC 提供的这种机制使得开发者能够更轻松地管理应用程序的配置,从而提高用户体验,尤其是在需要保留用户个性化设置的场景下。在实际开发中,可以依据具体需求调整保存和恢复的逻辑,以及配置文件的格式和存储位置,以满足不同项目的特定要求。
这个 CMainDlg类 界面类是举例...的
//-----------------------CMainDlg.h--函数定义---------------------------------
class CMainDlg : public CDialog
{
...
static void SaveConfigFile(CWnd* pWnd, UINT Contrlid[], int nCount);
static void RestoreConfigFile(CWnd* pWnd);
//使用方法
void OnBnClickBtnRestorefile();//保存配置的调用举例
void OnBnClickBtnRestorefile();//恢复配置的调用举例
......
}
//-----------------------CMainDlg.cpp--函数实现---------------------------------
参数UINT Contrlid[]==>是不要保存的控件id号,在resource.h可以找到id号
参数int nCount ==>个数
void CMainDlg::SaveConfigFile(CWnd* pWnd, UINT Contrlid[], int nCount)
{
CString strTmp;
CString strContrlType;
CString strContrlId;
CWnd* pChildwnd = pWnd->GetWindow(GW_CHILD);
while (pChildwnd != NULL)
{
for (int i = 0; i < nCount; ++i)
{
CWnd* pWndremove = pWnd->GetDlgItem(Contrlid[i]);
if (pWndremove == pChildwnd)
{
goto MyNextHwnd;
}
}
char szClzzName[64] = { 0 };
::GetClassNameA(pChildwnd->GetSafeHwnd(), szClzzName, 64);
if (_tcsicmp(szClzzName, "Edit") == 0)
{
strContrlType = "Edit";
int nId = pChildwnd->GetDlgCtrlID();
strContrlId.Format("%d", nId);
pChildwnd->GetWindowText(strContrlText);
strTmp += strContrlType + "|" + strContrlId + "|" + strContrlText + "\n";
}
if (_tcsicmp(szClzzName, "ComboBox") == 0) // 这个同Edit
{
strContrlType = "ComboBox";
int nId = pChildwnd->GetDlgCtrlID();
strContrlId.Format("%d", nId);
pChildwnd->GetWindowText(strContrlText);
剩余7页未读,继续阅读
- 粉丝: 0
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ASP.NET数据库高级操作:SQLHelper与数据源控件
- Windows98/2000驱动程序开发指南
- FreeMarker入门到精通教程
- 1800mm冷轧机板形控制性能仿真分析
- 经验模式分解:非平稳信号处理的新突破
- Spring框架3.0官方参考文档:依赖注入与核心模块解析
- 电阻器与电位器详解:类型、命名与应用
- Office技巧大揭秘:Word、Excel、PPT高效操作
- TCS3200D: 可编程色彩光频转换器解析
- 基于TCS230的精准便携式调色仪系统设计详解
- WiMAX与LTE:谁将引领移动宽带互联网?
- SAS-2.1规范草案:串行连接SCSI技术标准
- C#编程学习:手机电子书TXT版
- SQL全效操作指南:数据、控制与程序化
- 单片机复位电路设计与电源干扰处理
- CS5460A单相功率电能芯片:原理、应用与精度分析