401上位机VC MFC实现参数的保存与加载
实现参数的保存与加载
功能展示
上位机程序参数的读取保存是必不可少的功能,程序初始运行会加载参数,用户修改参数得保存参数。参数保存的位置,保存的方法有多种。例程演示操作文件进行参数的保存与加载,效果如图。设置完参数后点击<应用>参数多保存到例程根目录文件系统参数文件.par中,文件位置,名称,后缀都可自定义。点击<加载>可从文件加载参数,当前实际项目会在程序初始运行时调用<加载>按钮
要点提示
当前例程使用CStdioFile类实现文件的创建,写数据,读数据操作,类从Cfile派生,类中有两个成员函数ReadString()WriteString()非常方便逐行的写入与读取数据;
ReadString(CString &rString);
参数:rString;//CString类的字符串
返回值: 如果文件有多行,则当文件没有读完时,返回TRUE,读到文件尾,返回FALSE。
说明:读取一行文本到rString中,遇到回车换行符停止读取,回车和换行符均不读到rString中,尾部也不添加”0x00”。
WriteString( LPCTSTR lpsz );
将一个缓冲区中的数据写入与CStdioFile 对象关联的文件中。结束的空字符(“\0”)不被写入该文件。lpsz 中的所有换行符都被以一个硬回车换行符对写入该文件,即“\n”被转化成“\r\n”写入到文件里。
例程中传入的参数是Cstring 类型,所以换行符\r\n手动添加;
实现功能
1.新建基于对话框的应用程序
2.添加 保存参数的编辑框及复选框等,如例程添加了六个编辑框IDC_EDIT1---IDC_EDIT6及一个复选框作为参数保存与加载演示。添加两个按钮<加载><应用>关联按钮的点击函数,用于加载 与保存参数功能的实现
void CGkbc8Dlg::OnSave()
{
char cPath[_MAX_PATH];
GetModuleFileName(NULL,cPath,_MAX_PATH);
CString sFilePath(cPath);
sFilePath = sFilePath.Left(sFilePath.ReverseFind('\\')+1);
sFilePath += "系统参数文件.par";
//<>
CString sTemp;
CStdioFile File;
if(!File.Open(sFilePath,CFile::modeCreate|CFile::modeWrite) )
{
MessageBox("参数文件保存失败");
return;
}
int nData;
nData = GetDlgItemInt(IDC_EDIT1);
sTemp.Format("%d\r\n",nData);
File.WriteString(sTemp);
nData = GetDlgItemInt(IDC_EDIT2);
sTemp.Format("%d\r\n",nData);
File.WriteString(sTemp);
nData = GetDlgItemInt(IDC_EDIT3);
sTemp.Format("%d\r\n",nData);
File.WriteString(sTemp);
nData = GetDlgItemInt(IDC_EDIT4);
sTemp.Format("%d\r\n",nData);
File.WriteString(sTemp);
nData = GetDlgItemInt(IDC_EDIT5);
sTemp.Format("%d\r\n",nData);
File.WriteString(sTemp);
nData = GetDlgItemInt(IDC_EDIT6);
sTemp.Format("%d\r\n",nData);
File.WriteString(sTemp);
nData = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();
sTemp.Format("%d\r\n",nData);
File.WriteString(sTemp);
File.Close();
MessageBox("已保存参数");
}
void CGkbc8Dlg::OnLoad()
{
char cPath[_MAX_PATH];
GetModuleFileName(NULL,cPath,_MAX_PATH);
CString sFilePath(cPath);
sFilePath = sFilePath.Left(sFilePath.ReverseFind('\\')+1);
sFilePath += "系统参数文件.par";
//<>
CStdioFile File;
if(!File.Open(sFilePath,CFile::modeRead) )
{
MessageBox("参数文件读取失败");
return;
}
UINT nData,nIndex=0;
CString sTemp;
while(File.ReadString(sTemp) )
{
nData=atoi(sTemp);
if(nIndex==0)
SetDlgItemInt(IDC_EDIT1,nData);
if(nIndex==1)
SetDlgItemInt(IDC_EDIT2,nData);
if(nIndex==2)
SetDlgItemInt(IDC_EDIT3,nData);
if(nIndex==3)
SetDlgItemInt(IDC_EDIT4,nData);
if(nIndex==4)
SetDlgItemInt(IDC_EDIT5,nData);
if(nIndex==5)
SetDlgItemInt(IDC_EDIT6,nData);
if(nIndex==6)
((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(nData);
nIndex++;
}
if(nIndex<7)
MessageBox("参数文件读取失败");
}
可以选择可程序初始化函数OnInitDialog()里调用 OnLoad()实现参数的加载
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|