本人初学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() )应该怎么写?

解决方案 »

  1.   

    先选中MessageBox然后按F12,可以看到他的参数
      

  2.   

    1,不用数据库可以写文件,
    2,你的OnChang是静态成员吗?不是的话找到DOC类的指针
      

  3.   

    CMy122Doc::Change(dlg.m_sNAME,dlg.m_sPASSWORD);
    你的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);
     }
    }
      

  4.   

    2.再有就是如何把几个单选设为一组?我用Ctrl键把他们全部选中后,选择“属性”栏中的“Group”但是运行后还是不对·····选择第一个radio,勾上group属性,其它不勾。把Radio的ID号搞成连续的。3.要是我想输出我所选择的单选项,(用 ::MessageBox() )应该怎么写?
    方法很多了,关联变量或者控件是最简单的
    或者使用这个函数,但是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);
    }
      

  5.   


    更正
    [code=C/C++] 是在这里粘贴 [/code]
      

  6.   

    嗯,我的意思是怎么实现?
    用fwrite 函数?
    例如:  FILE *fp;
    fp=fopen("aa","r");
    fwrite(·····);
      

  7.   

    用文件,可以另外settext函数用变量,字符串变量
      

  8.   

    我又试了一下,发现用文件可以,但又出现了一个新的问题·····
    我创建了一个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);
    }
    }
    }
    }