我想要做成几个界面上的多数控件布置完全一样的dialog,我可不可以先将其布置相同的控件做成一个基类在从该基类派生出各个我所需要的dialog? 应该怎样做?

解决方案 »

  1.   

    应该可以。
    把要创建的控件作为派生类的成员变量。如:CEdit m_myEdit;改写派生后的类的OnInitDialog函数。
    m_myEdit.Create(ES_LEFT | ES_MULTILINE | WS_VISIBLE | WS_CHILD, CRect(100,100,500,500), this, ID_MYID);ID_MYID可以自己定义一个。Create的详细解释看看msdn。
      

  2.   

    好像没有必要,本来就可以使多个对话框共用dialog资源的,不过要手工操作,第一个由APPWizard生成,自己拷贝一下APPWizard生成的文件,然后修改一下包括名称等。如果操作出入很大,继承没多大意思。当然如果操作也基本相同,继承也许是好办法。
      

  3.   

    在resource界面上是要手工添加控件,可是控件的数据上可以共享的话,岂不是省了大量的添加变量的工作?
      

  4.   

    你可以采取这样的方式,先定义你的这个公用对话框,生成一个类

    CCommonDialog
    其他对话框在设计时只添加该对话框所特有的控件,
    然后在其他需要使用该对话框的对话框中定义一个该对话框控件的实例,
    CCommonDialog m_dlgCommon;在这些对话框的WM_CREATE中创建该实例
    if (!m_dlgCommon.Create(CCommonDialog::IDD, this))
    {
    return -1;
    }
    ,将其防到具体的位置在程序中,你就直接使用这个实例来操作了
      

  5.   

    在resource界面上是要手工添加控件,可是控件的数据上可以共享的话,岂不是省了大量的添加变量的工作?
    其实你复制对话框后,点击对话框提示生成新类,写你想用的类名
    然后将基类改成你最初用的对话框类就可以了
    资源复制
    类是可以继承的
      

  6.   

    楼主想的没错,是Delphi中常用的方法,VC中很少见到呀。
    有点创意!直接在用向导做一个模板,然后在其基础上派生,派生类把不用的控件Hide掉,或Create其他的控件替换掉原来的。只不过不象其他RAD工具中那么可视化、操作直观而已。这也是这种方法在VC中很少使用的原因