用mfc默认的方法肯定是不行的了
CMainDlg dlg;
dlg.DoModal();这样是不行的了。因为它用了默认的对话框资源
enum { IDD = IDD_CHECKNET_SERVERDIALOG };如果用
::DialogBox(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDD_CHECKNET_SERVERDIALOG),NULL,NULL);
它又没有消息循环,自己处理是不是很麻烦。
我看核心编程上 源代码是针对每个控件的每个消息处理的,这样很麻烦,我不想用这种纯sdk的方式请问怎么处理,能不能给出完整的结构

解决方案 »

  1.   

    用对话框指针吧,用CREATE函数好像可以吧!!!不过是非模态的!!!
      

  2.   

    你可以建2个对话框资源阿,根据条件以哪个作为主对话框
    if(条件A成立)
    {
    CDialog1 dlg1;
    m_pMainWnd = &dlg1;
    dlg1.DoModal();
    }
    else if(条件B成立)
    {
    CDialog2 dlg2;
    m_pMainWnd=&dlg2;
    dlg2.DoModal();
    }
      

  3.   

    你的CDialog1和CDialog2已经是两个类了吧,还是两个代码相同的类,只不过类内部的
    enum { IDD = IDD_CHECKNET_SERVERDIALOG }; 不同而已你没明白我的意思。
      

  4.   

    只要在CREATE的时候改变参数就可以了,不明白的话
    到,我给你写一个。
      

  5.   

    我给你发信了.
    我的信箱是  [email protected]期待中
      

  6.   

    多谢,收到了.实在不行,我就用你的方法了。
    把两个类别的控件分别放在不同的非主窗口的窗口中了。我想知道的是功能是:
    利用mfc的CDialog类已经有的消息,但是还可以改变它的对话框资源。
      

  7.   

    我好像快明白了.重载我自己的对话框类中的构造函数中,修改对CDialog构造函数的调用就可以了.应该是可以的.我先说再测,忍不住激动,希望不要失望.
      

  8.   

    CDialog dlg(IDD_DIALOG1,this);
    dlg.DoModal();
    CDialog dlg(IDD_DIALOG2,this);
    dlg.DoModal();
    就可以了
      

  9.   

    构造函数:
    CTestDlg::CTestDlg(UINT nIDTemPlate,CWnd* pParent /*=NULL*/)
    :CDialog(nIDTemPlate, pParent)
    {
    }调用:
    CTestDlg dlg(IDD_DIALOG1);
    dlg.DoModal();
    CTestDlg dlg(IDD_DIALOG2);
    dlg.DoModal();
      

  10.   

    跟 EnochShen 道歉了.你给我的就是我想要的东西,可惜我当时没有看出来,因为已经看过很多源代码了,都是一个资源一个类,我看到有两个资源,就错以为也有两个对话框类了,那时候已经很晕了。
    还是三角多的人厉害那时候已经快12点了,而且还犹豫是否要23:35之前走,否则就没有电梯坐了。
    从下午5点多我就开始解决这个问题。一直到12点,才发现可以自己覆盖构造函数,
    其实自己覆盖也是多余,你的方法最标准,最好。
    直接传参数给构造函数。
    我觉得我解决问题的方式和思维有问题,对一个思维正确的人来说解决这个问题应该不费吹灰之力
    另外,那个贴子我是删除了,删除之前,我特意看了一下是没有人回复的,莫非你正在打字??不知道删除贴子会不会扣分。
      

  11.   

    我用的模式对话框.
    在app.ini中CCheckNetServerDlg* dlg=new CCheckNetServerDlg(IDD_CHECKNET_CLIENTDIALOG);
    或者
    CCheckNetServerDlg* dlg=new CCheckNetServerDlg(IDD_CHECKNET_SERVERDIALOG);dlg->DoModal();不过,如果一个类有两个对话框资源,好像再用类象导就不好用了。不知道别人是不是也是这样