1)有一个主窗体mainfrm,还有一个对话框mydialog,mfc编译之后先运行的是mainfrm,可我想只运行mydialog,不运行mainfrm该怎么操作?是不是修改afxwinmain函数?2)除了用 getdlgitem(id)调用控件 还有什么别的办法啊?3)我建立了一个列表框 listBox = (CListBox*)GetDlgItem(IDC_LIST_BOX); 这个东西用完以后不释放吗? 我用delete关键字释放后出现错误了,为什么 放在ONClose事件中也不行? 4) 在销毁指针变量时,有什么好建议?我是搞C#的,用C++ mfc后觉得很蛋疼,不过速度却是了得,要速度就得多写点,多写点就得犯错误,犯错误就得请教各位老师,谢谢。请回答详细一些

解决方案 »

  1.   

    BOOL CyourApp::InitInstance()//主窗口初始化 
    {
            CMyDialog dlg;//你的mydialog窗口类对象
    int nR = dlg.DoModal();
    if (nR == IDOK)
    {
    OnOk();
    return TRUE;
    }
    else if (nR == IDCANCEL)
    {
    LOnCancel();
    return FALSE;
    }
    }
    void CyourApp::OnOk()
    {
        CSQLserverTestDlg dlg2;
        m_pMainWnd = &dlg2; //主窗口指针
        int nResponse = dlg2.DoModal();
        if (nResponse == IDOK)
    {
    // TODO: Place code here to handle when the dialog is
    //  dismissed with OK
    }
    else if (nResponse == IDCANCEL)
    {
    // TODO: Place code here to handle when the dialog is
    //  dismissed with Cancel
    //////////////////////////////////////////return FALSE;
    }
    }我的大概思路是这样的 我也是初学 望交流
      

  2.   

    GetDlgItem 返回的指针不用删除, 就这样的.
      

  3.   

    不用怀疑,你可以注意一下,这个函数 返回的类型中 CTempWnd. 是MFC内部管理的临时对象,你不能删除它的. MFC会在一帧消息处理完成之后回收它,所以也不能把这个临时变量保存起来下次使用.
    就是这样的. 
      

  4.   

    给你补充回答一下:1)有一个主窗体mainfrm,还有一个对话框mydialog,mfc编译之后先运行的是mainfrm,可我想只运行mydialog,不运行mainfrm该怎么操作?是不是修改afxwinmain函数?在InitApplication里, ParseCommandLine之后的代码删除, 加上:
    CMyDlg dlg; m_pMainWnd = &dlg;
    INT_PTR nResponse = dlg.DoModal();最简单的方式是生成一个对话框模式的程序. 你可以比较一下区别2)除了用 getdlgitem(id)调用控件 还有什么别的办法啊?可以在对话框类里将控件映射到控件变量, 直接用控件变量就可以操作