mfc 编辑框控件中值修改后,关闭程序。再度启动程序,编辑框显示修改后的值

mfc 编辑框控件中值修改后,关闭程序。再次启动程序,编辑框显示修改后的值
mfc 编辑框控件中值修改后,关闭程序。再次启动程序,编辑框显示修改后的值。这个怎么样才能达到这个效果?
比如编辑框控件有初始值6,把它改成10后。关闭程序。再次启动程序,编辑框控件显示的是10.


------解决思路----------------------
本帖最后由 VisualEleven 于 2014-10-10 11:09:47 编辑
要保存到注册表:

// my own get using "LOCAL_MACHINE"
CString MyGetProfileString(LPCTSTR Section,LPCTSTR Entry)
{
HKEY    hkey;
DWORD   dwErrorCode;
DWORD   dwType=REG_SZ;
char    searchKey[MAX_PATH];
BYTE    retValue[MAX_PATH];
DWORD   size=MAX_PATH;

sprintf(searchKey,"SOFTWARE\\Siemens\\802 HMI Manager\\%s",Section);

dwErrorCode=RegOpenKeyEx(HKEY_LOCAL_MACHINE,searchKey,0,KEY_READ,&hkey);
if (dwErrorCode == ERROR_SUCCESS)
{ //"HKEY_LOCAL_MACHINE\\SOFTWARE\\Siemens\\802 HMI Manager" OK

dwErrorCode=RegQueryValueEx(hkey,Entry,0,&dwType,retValue,&size); 
RegCloseKey(hkey);
if (dwErrorCode == ERROR_SUCCESS) return CString(retValue);
}
return CString("");
}
// my own write using "LOCAL_MACHINE"
BOOL MyWriteProfileString(LPCTSTR Section,LPCTSTR Entry,LPCTSTR Value)
{
HKEY    hkey;
DWORD   dwErrorCode;
char    searchKey[255];

sprintf(searchKey,"SOFTWARE\\Siemens\\802 HMI Manager\\%s",Section);
dwErrorCode=RegCreateKeyEx(HKEY_LOCAL_MACHINE,searchKey,0,0,REG_OPTION_NON_VOLATILE,
                                                            KEY_WRITE,0,&hkey,0);
if (dwErrorCode == ERROR_SUCCESS)
{ //"HKEY_LOCAL_MACHINE\\SOFTWARE\\Siemens\\802 HMI Manager" OK
dwErrorCode=RegSetValueEx(hkey,Entry,0,REG_SZ,(BYTE *)Value,strlen(Value)+1);
if (dwErrorCode == ERROR_SUCCESS)
{ // set OK
RegCloseKey(hkey);
return TRUE;
}
}
return FALSE;
}

------解决思路----------------------
不管保存在什么地方反正要保存,再打开
常用的比如注册表,ini文件一类的都可以。
------解决思路----------------------
程序 开始 : MyGetProfileString
程序 结束 :  MyWriteProfileString

注册表 就是 系统的 , run  regedit 可以 查看。
------解决思路----------------------
保存文件配置信息啊,在关闭应用程序的时候,取出值写入你自定义的配置文件当中(name——value)
程序启动的时候,读取配置文件内容显示即可
GetPrivateProfileInt/WritePrivateProfileInt
GetPrivateProfileString/WritePrivateProfileString


------解决思路----------------------
引用:
mfc 编辑框控件中值修改后,关闭程序。再次启动程序,编辑框显示修改后的值。这个怎么样才能达到这个效果?
比如编辑框控件有初始值6,把它改成10后。关闭程序。再次启动程序,编辑框控件显示的是10.

最简单的实现方法就是将数据保存到注册表中。程序初始化时从注册表读入初值,初值不存在则使用默认值,数据被修改后马上改写注册表中的值,比如:

CString str=theApp.GetProfileStringW(_T(WORKER_PARAM),_T(THE_ONDUTY_MAN),_T(""));

MFC提供了6个注册表操作函数,可以完成读写,更高级的应用可使用API函数。
------解决思路----------------------
建议用6楼方法,保存到ini中,函数调用也简单
------解决思路----------------------
需求很广, 自己写了几个这样通用的函数


BOOL NDlg::DlgEdtInitText(CHAR *pSaveName, HWND hDlgWnd, int nEdtId, CHAR *pDefault)
{
CHAR szBuffer[4096];
CHAR szModulePath[MAXPATH];
CHAR szRegPath[MAXPATH];
CHAR szSavePath[MAXPATH];
BOOL bRetVal;
CHAR *pEdtText;

GetModuleFileNameA(NSys::GetModuleFromAddress(), szModulePath, sizeof(szModulePath));
NFile::SpliteFilePath(szModulePath, NULL, szSavePath);
sprintf(szRegPath, "YofooSave\\DlgEdt\\%s", szSavePath);

szBuffer[0] = 0;
bRetVal = NReg::GetReg(HKEY_CURRENT_USER, szRegPath, pSaveName, szBuffer, sizeof(szBuffer));
if(bRetVal == FALSE)
pEdtText = pDefault;
else
pEdtText = szBuffer;

SetDlgItemTextA(hDlgWnd, nEdtId, pEdtText);
return TRUE;
}

BOOL NDlg::DlgEdtGetText(CHAR *pSaveName, HWND hDlgWnd, int nEdtId, CHAR *pBuffer, int nBufSize)
{
CHAR szBuffer[4096];
CHAR szModulePath[MAXPATH];
CHAR szRegPath[MAXPATH];
CHAR szSavePath[MAXPATH];

GetDlgItemTextA(hDlgWnd, nEdtId, szBuffer, sizeof(szBuffer));

GetModuleFileNameA(NSys::GetModuleFromAddress(), szModulePath, sizeof(szModulePath));
NFile::SpliteFilePath(szModulePath, NULL, szSavePath);
sprintf(szRegPath, "YofooSave\\DlgEdt\\%s", szSavePath);

NReg::SetReg(HKEY_CURRENT_USER, szRegPath, pSaveName, szBuffer);

NStr::StrCopy(pBuffer, szBuffer, nBufSize);
return TRUE;
}

int NDlg::DlgEdtGetInt(CHAR *pSaveName, HWND hDlgWnd, int nEdtId)
{
CHAR szBuffer[4096];
CHAR szModulePath[MAXPATH];
CHAR szRegPath[MAXPATH];
CHAR szSavePath[MAXPATH];