一个关于WriteProfileInt和win.ini的问题,大家来看一下

whmily 2004-03-30 12:52:36
近日小弟在网上闲逛时无意中下了一个程序的源代码
部分代码如下:

void CUserDlg::OnUdBadd()
{
UpdateData();
char * strq[] = { {"信息录入员"},{"系统管理员"} };
int purview = m_udcpv.GetCurSel();
if(m_udename.IsEmpty())
{
MessageBox("请指定用户名称。","输入错误",MB_OK);//|MB_ICONQUESION);
GetDlgItem(IDC_UD_ENAME)->SetFocus();
return;
}
if(purview == -1)
{
MessageBox("请指定用户权限。","输入错误",MB_OK);//|MB_ICONQUESION);
GetDlgItem(IDC_UD_CPURVIEW)->SetFocus();
return;
}
if(m_udepwd.Compare(m_udepwdr))
{
MessageBox("两次输入的密码不一致,请重新输入。","密码验证错",MB_OK);//|MB_ICONQUESTION);
m_udepwd.Empty();
m_udepwdr.Empty();
UpdateData(FALSE);
GetDlgItem(IDC_UD_ENP)->SetFocus();
return;
}
int LastID = AfxGetApp()->GetProfileInt("用户","LastID",0);
CString strID;
strID.Format("User%04u",LastID);
USERINFO user;
ZeroMemory(&user,sizeof(user));
strcpy(user.name,m_udename);
user.oper = purview;
strcpy(user.password,m_udepwd);
if(AfxGetApp()->WriteProfileBinary("用户",strID,(LPBYTE)&user,sizeof(user)))
{
CString str = m_udename + " [" + strq[purview] + "]";
m_udlist.AddString(str);
LastID++;
AfxGetApp()->WriteProfileInt("用户","LastID",LastID);
}
else
{
MessageBox("数据写入出错。","错误",MB_OK|MB_ICONSTOP);
return;
}
m_udcpv.SetCurSel(0);
m_udename.Empty();
m_udepwd.Empty();
m_udepwdr.Empty();
UpdateData(FALSE);
}


[ 我的MSDN上居然查找不到WriteProfileBinary这个函数。
(我记得我安装MSDN时少了一个文件,不知这个函数是不是就在这个文件里)
大家看看你的MSDN上有没有? ]




这是一个添加用户的代码。
但是我在添加完几个用户后。把win.ini的内容和没添加之前的比较了一下。
发现二者居然一点都没变。!!!!
WriteProfileInt不是把文件写入win.ini吗?
这到底是怎么一回事,把我搞昏了。
大虾帮忙解释一下。
小弟谢了先!!
...全文
219 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
itmaster 2004-03-30
  • 打赏
  • 举报
回复
有的,是api

如何使用初始化文件来保存和恢复程序的运行状态信息

 

一个好的应用程序应该能够恢复上次运行时主窗口的状态,这样用户就不需要在每一次进入应用程序都重新设置窗口的大小和位置.请实现方法:
1.当应用程序关闭时,将框架窗口的状态:最小化,最大化或窗口的大小以及状态条的位置信息保存在注册表中.得用Class Wizard,为CMainFrame添加WM_CLOSE消息的处理函数.

void CMainFrame::OnClose()
{
// TODO: Add your message handler code here and/or call default
WINDOWPLACEMENT WndStatus;
WndStatus.length=sizeof(WINDOWPLACEMENT);
GetWindowPlacement(&WndStatus);
AfxGetApp()->WriteProfileInt("WNDSTATUS","FLAG",WndStatus.flags);
AfxGetApp()->WriteProfileInt("WNDSTATUS","SHOWCMD",WndStatus.showCmd);
AfxGetApp()->WriteProfileInt("WNDSTATUS","LEFT",WndStatus.rcNormalPosition.left);
AfxGetApp()->WriteProfileInt("WNDSTATUS","TOP",WndStatus.rcNormalPosition.top);
AfxGetApp()->WriteProfileInt("WNDSTATUS","RIGHT",WndStatus.rcNormalPosition.right);
AfxGetApp()->WriteProfileInt("WNDSTATUS","BOTTOM",WndStatus.rcNormalPosition.bottom);
SaveBarState(AfxGetApp()->m_pszProfileName);
CFrameWnd::OnClose();
}

2.当应用程序重启时,读取注册表信息.

给CMainFrame添加一个布尔型成员变量m_bFirst,并利用Class Wizard,为CMainFrame添加ActiveFrame消息的处理函数.

void CMainFrame::ActivateFrame(int nCmdShow)
{
// TODO: Add your specialized code here and/or call the base class
if(m_bFirst)
{
m_bFirst=FALSE;
WINDOWPLACEMENT WndStatus;
WndStatus.length=sizeof(WINDOWPLACEMENT);
CRect rect;
rect.left=AfxGetApp()->GetProfileInt("WNDSTATUS","LEFT",100);
rect.top=AfxGetApp()->GetProfileInt("WNDSTATUS","TOP",100);
rect.right=AfxGetApp()->GetProfileInt("WNDSTATUS","RIGHT",500);
rect.bottom=AfxGetApp()->GetProfileInt("WNDSTATUS","BOTTOM",400);
WndStatus.rcNormalPosition=rect;
WndStatus.flags=AfxGetApp()->GetProfileInt("WNDSTATUS","FLAG",0);
WndStatus.showCmd=AfxGetApp()->GetProfileInt("WNDSTATUS","SHOWCMD",SW_SHOW);
WndStatus.ptMinPosition=CPoint(0,0);
WndStatus.ptMaxPosition=CPoint(-::GetSystemMetrics(SM_CXBORDER),-::GetSystemMetrics(SM_CYBORDER));
LoadBarState(AfxGetApp()->m_pszProfileName);
SetWindowPlacement(&WndStatus);
}
CFrameWnd::ActivateFrame(nCmdShow);
}

 


whmily 2004-03-30
  • 打赏
  • 举报
回复
既然没有WriteProfileBinary这个函数
那为何这个程序仍能正常运行?
whmily 2004-03-30
  • 打赏
  • 举报
回复
请问写到注册表那里呢?
ymbymb 2004-03-30
  • 打赏
  • 举报
回复
数据写到注册表里去了
ymbymb 2004-03-30
  • 打赏
  • 举报
回复
没有WriteProfileBinary这个函数
In Windows NT, the value is stored to a registry key.
In Windows 3.x, the value is stored in the WIN.INI file.
In Windows 95, the value is stored in a cached version of WIN.INI.

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧