把OnRadioRegister()所要实现的功能单独写个函数,让OnRadioRegister()调用你写的函数完成相应的功能,
这样一来你就可以任意调用自己的函数了,和调用OnRadioRegister()一样

解决方案 »

  1.   

    DoModal()之后调用dlg.OnRadioRegiser()当然不成,因为这时对话框已不存在了,
    应该在dlg的OnInitDialog()里用
    GetDlgItem(IDC_MYRADIO1)->SendMessage(BM_CLICK);
    自动按下这个radio按钮
      

  2.   

    qunta(旺财1860) ,我也不能在OnInitDialog中调用,因为我这是在DLL写的,根据不同函数执行不同功能的,请再指教!
      

  3.   

    给CFTSampleRegDlg加一个构造函数
    CFTSampleRegDlg::CFTSampleRegDlg dlg(BOOL bInitSel)
      :CDialog(CFTSampleRegDlg::IDD, NULL)
    {
      m_InitSel=bInitSel;
    }
    在dlg的OnInitDialog()里用
    if(m_InitSel)
      GetDlgItem(IDC_MYRADIO1)->SendMessage(BM_CLICK);
    自动按下这个radio按钮调用时;
        if (dlg.DoModal(TRUE) == -1)
            AfxMessageBox("指纹注册失败,请再试一次!");
      

  4.   

    qunta(旺财1860) 
    我已经有一个构造函数,原型是:
    CFTSampleRegDlg::CFTSampleRegDlg(CWnd* pParent /*=NULL*/): CDialog(CFTSampleRegDlg::IDD, pParent)
    我改成
    CFTSampleRegDlg::CFTSampleRegDlg(long al_sel)
    : CDialog(CFTSampleRegDlg::IDD,NULL)后,
    编译时提示没有适当的构造函数?
    怎么办?
      

  5.   

    所有的声明都改成 CFTSampleRegDlg dlg(longval) 了吗,
    也可能cpp里改的和头里改的不一致?
    如果不可能改,只好构造函数只好定义成
    CFTSampleRegDlg(CWnd* pParent=NULL,long al_sel=0): CDialog(CFTSampleRegDlg::IDD, pParent);
      

  6.   

    in .h file
    CFTSampleRegDlg(CWnd* pParent=NULL,long al_sel=0);
    in .cpp file
    CFTSampleRegDlg::CFTSampleRegDlg(CWnd* pParent,long al_sel): CDialog(CFTSampleRegDlg::IDD, pParent)
      

  7.   

    qunta(旺财1860),谢谢你提供的思路,我解决了
    但是系统提示DoModal没有参数,所以我用一个全局变量做了。
    我想再问您一个问题,如何能做一个关闭那个对话框的函数?
    我想了好久,但是想不出来:-(
    (明天结帐好吗?如果这问题也解决了,再加100分)
      

  8.   

    多谢给分,第二个问题大家可以研究一下先全局变量:
    CSubDlg* g_dlg=NULL;主程序要弹出对话框时:
    g_dlg = new CSubDlg;
    g_dlg->DoModal();//...主程序停在这里
    ..//SubDlg对话框关闭后执行到这里
    delete g_dlg;
    g_dlg=NULL;主程序里用于关闭模式对话框的函数
    void CMainDlg::ShutModal(CDialog* mdlg)
    {
    if(mdlg && mdlg->GetSafeHwnd())
    {
    mdlg->SendMessage(WM_COMMAND, IDCANCEL);
    }
    }由于DoModal()退出之前,主窗口不接受任何键盘鼠标事件
    所以主程序要关闭子对话框的时候,必须是在响应外部消息的时候,或是在另一个线程中,调用ShutModal函数
    比如在主程序的OnTimer()里(在上面的g_dlg = new CSubDlg;这行之前加一个SetTimer(1,5000,NULL);对话框弹出5秒,然后自动关闭)
    void CMainDlg::OnTimer(UINT nIDEvent)
    {
    ShutModal(g_dlg);
    CDialog::OnTimer(nIDEvent);
    //这个执行之后上面的g_dlg->DoModal();就会退出,对话框关闭
    }