本人初学VC,有几个问题想向大家请教:1.不用数据库,如何保存输入的数据?
我想的是在Doc类中创建一个变量,同时创建一个函数change(),然后在调用我创建的用来输入数据的对话框类后,调用Change()函数,但编译时出错:
122\MainFrm.cpp(145) : error C2352: 'CMy122Doc::Change' : illegal call of non-static member functionvoid CMainFrame::OnRegist() //这是调用对话框的函数
{
CDIA_REGIST dlg;
if(dlg.DoModal() == IDOK)
{
::MessageBox(NULL,
"注册信息为\n用户名:"+dlg.m_sNAME+"\n密码:"+dlg.m_sPASSWORD,
"注册",
MB_OK);
CMy122Doc::Change(dlg.m_sNAME,dlg.m_sPASSWORD);
}
}
void CMy122Doc::Change(CString qa,CString aq)//这是Change()函数
{
m_sName=qa;
m_sPassword=aq;
}2.再有就是如何把几个单选设为一组?我用Ctrl键把他们全部选中后,选择“属性”栏中的“Group”但是运行后还是不对·····3.要是我想输出我所选择的单选项,(用 ::MessageBox() )应该怎么写?
我想的是在Doc类中创建一个变量,同时创建一个函数change(),然后在调用我创建的用来输入数据的对话框类后,调用Change()函数,但编译时出错:
122\MainFrm.cpp(145) : error C2352: 'CMy122Doc::Change' : illegal call of non-static member functionvoid CMainFrame::OnRegist() //这是调用对话框的函数
{
CDIA_REGIST dlg;
if(dlg.DoModal() == IDOK)
{
::MessageBox(NULL,
"注册信息为\n用户名:"+dlg.m_sNAME+"\n密码:"+dlg.m_sPASSWORD,
"注册",
MB_OK);
CMy122Doc::Change(dlg.m_sNAME,dlg.m_sPASSWORD);
}
}
void CMy122Doc::Change(CString qa,CString aq)//这是Change()函数
{
m_sName=qa;
m_sPassword=aq;
}2.再有就是如何把几个单选设为一组?我用Ctrl键把他们全部选中后,选择“属性”栏中的“Group”但是运行后还是不对·····3.要是我想输出我所选择的单选项,(用 ::MessageBox() )应该怎么写?
2,你的OnChang是静态成员吗?不是的话找到DOC类的指针
你的Change是CMy122Doc的静态成员函数吗?你需要先得到doc类的指针,再调用该类的Change()函数。
void CMainFrame::OnRegist() //这是调用对话框的函数
{
CDIA_REGIST dlg;
if(dlg.DoModal() == IDOK)
{
::MessageBox(NULL,"注册信息为\n用户名:"+dlg.m_sNAME+"\n密码:"+dlg.m_sPASSWORD, "注册",MB_OK);
((CMy122Doc*)GetActiveDocument())->Change(dlg.m_sNAME,dlg.m_sPASSWORD);
}
}
方法很多了,关联变量或者控件是最简单的
或者使用这个函数,但是Radio的ID好保证连续,返回值是选中的Radio的ID值。
int GetCheckedRadioButton(
int nIDFirstButton,
int nIDLastButton
);
如你的Radio的ID为IDC_RADIO_1到IDC_RADIO_N
void CXXX::OnButton()
{
int nIndex = GetCheckedRadioButton(IDC_RADIO_1, IDC_RADIO_N) - IDC_RADIO_1;
CString strText(_T(""));
strText.Format(_T("Your select radio index is: %d"), nIndex + 1);
AfxMessageBox(strText);
}
更正
[code=C/C++] 是在这里粘贴 [/code]
用fwrite 函数?
例如: FILE *fp;
fp=fopen("aa","r");
fwrite(·····);
我创建了一个SDI工程,然后用第一个对话框写文件,第二个读文件,同时与用户当前输入的字符串比较,不相同的话就退出····
就是把第二个当作程序的登陆对话框(含密码与用户名),用第一个来进行注册并把注册信息存储在文件中···
程序编译运行时没有报错,但是运行后怎么都进不去,一直说我输入的用户名密码错误···
不知道怎么回事··下面是我的代码:
//登陆对话框
int tag=0;
char name[30], password[30];
FILE *pFile;
pFile = fopen("name.txt", "r");
fread(name, 30,1, pFile);
fclose(pFile);
pFile = fopen("password.txt", "r");
fread(password,30,1, pFile);
fclose(pFile);//将我预先在文件中写好的数据读出来
while(tag<3)//控制登陆次数
{
LOGIN dlg;
if(dlg.DoModal()==IDOK)
{
if(strcmp(dlg.m_name,name)||
strcmp(dlg.m_password,password))//与我输入的字符串进行比较
{
::MessageBox(NULL, "用户名或密码错误!!\n请重新输入!!",
"警告",MB_OK);
tag++;
}
else break;
}
else return FALSE;
}if(tag>=3)
{
::MessageBox(NULL,
"三次输入错误!!\n禁止登陆!!",
"警告",MB_OK);
return FALSE;
}//注册对话框
void CMainFrame::OnMenuReg()
{
// TODO: Add your command handler code here
while(1)
{
REGIST dlg;
if(dlg.DoModal()==IDOK)
{
if(strcmp(dlg.m_againe,dlg.m_password))
::MessageBox(NULL,
"两次输入的密码不相同!!!\n请重新输入!!!",
"警告!!",MB_OK);
else
{
FILE *pFile;
pFile = fopen("name.txt", "w");
fwrite(dlg.m_name, 1, sizeof(dlg.m_name), pFile);
fclose(pFile);
pFile = fopen("password.txt", "w");
fwrite(dlg.m_password, 1,
sizeof(dlg.m_password), pFile);
fclose(pFile);
//将我输入的注册信息写进文件中
::MessageBox(NULL,"注册成功!!","完成!!",MB_OK);
}
}
}
}