存储窗体位置

在许多管理系统中 INI 文件用来记录程序运行时所需要的数据。这是因为 INI 文件符合信息存储的最基本的格式“键名=键值”。并且在写入时还可以对数据进行分类，即“项”。如图 1 所示。

图 1 存储窗体位置

该实例使用 GetPrivateProfileStruct 函数向 INI 文件中写入窗体运行时的标题信息和大小信息。在程序初始化时读取 INI 文件中的信息，程序关闭时将数据存储到 INI 文件中。结构的定义如下：

typedef struct _Configinfo

{

int height;

int width;

int left;

int top;

}ConfigInfo;

实现过程：

一、程序创建的实现步骤

（1）新建基于对话框 MFC 工程。

（2）在对话框中添加一个静态文本控件，设置标题为“设置标题名称”；添加一个文本编辑框控件，用来输入窗体的新标题名称；添加二个按钮控件，分别设置其标题为“确定”和“取消”。

（3）程序初始化时读取 INI 文件中的信息，代码如下：

m_ConfigPath = GetAppPath() + "Config.ini";

CString Caption;

::GetPrivateProfileString("配置信息","标题","",Caption.GetBuffer(0),

255,m_ConfigPath);

if (Caption != "")

{

SetWindowText(Caption);

}

ConfigInfo configinfo;

if (GetPrivateProfileStruct("配置信息","位置",&configinfo,

sizeof(ConfigInfo),m_ConfigPath))

{

CRect rect;

rect.left = configinfo.left;

rect.top = configinfo.top;

rect.right = rect.left + configinfo.width;

rect.bottom = rect.top + configinfo.height;

this->MoveWindow(&rect,true);

}

（4）程序关闭时向 INI 文件中存储配置信息，代码如下：

void CConfigINIDlg::OnDestroy()

{

CString caption;

m_caption.GetWindowText(caption);

if (caption != "")

{

::WritePrivateProfileString("配置信息","标题",caption,m_ConfigPath);

}

ConfigInfo configinfo;

CRect rect;

this->GetWindowRect(&rect);

configinfo.height = rect.Height();

configinfo.width = rect.Width();

configinfo.left = rect.left;

configinfo.top = rect.top;

::WritePrivateProfileStruct("配置信息","位置",&configinfo,sizeof(ConfigInfo),

m_ConfigPath);

CDialog::OnDestroy();

}