操作数据库时(当然不止这种情况),操作是相似的,添加、删除、修改、提交 等等,但是具体到不同数据表,显示给用户的界面肯定不同,这种情况应该采取什么模式?
我的想法:
   相通的操作放在一个类(如 添加、删除、修改、提交)中,具体到某一个数据表, 继承该类。   CDialog<-CListDlg<-CTable1ListDlg
                    <-CTable2ListDlg
     我初学C++和VC,请高手赐教。我不想拷贝/粘贴,这好象是对C++的污辱。

解决方案 »

  1.   

    lwg7603(刑满释放人员) :>>能举例说明吗?谢谢。
      

  2.   

    在对话框上放一个listctrl;
    再在打开不同的表的时候往list填写不同的内容;
    因为list的头文字可以不一样!有关控件操作可以看MSDN中的CListCtrl!
    给你看看我写的吧个例子:#define TOTAL_PIX 800
    void CQueryDataDlg::OnCaptionListInit()
    {
    LPCTSTR lpszColName[] =
    {
    "编号", "标签号码", "最大电流", "最小电流", 
    "测试次数", "错误次数", "错误电流", "接通时间",
    "断开时间", "测试用时"
    };
    const int nField = 10;
    const int anWidth[] =
    {
    TOTAL_PIX/nField/2, TOTAL_PIX/nField, TOTAL_PIX/nField, TOTAL_PIX/nField, 
    TOTAL_PIX/nField, TOTAL_PIX/nField, TOTAL_PIX/nField, TOTAL_PIX/nField, 
    TOTAL_PIX/nField, TOTAL_PIX/nField*3/2
    };

    InitList(lpszColName, anWidth, nField);
    }void CQueryDataDlg::OnDataListInit()
    {
    LPCTSTR lpszColName[] =
    {
    "编号", "电流(A)", "编号", "电流(A)",
    "编号", "电流(A)", "编号", "电流(A)",
    "编号", "电流(A)", "编号", "电流(A)"
    };
    const int nField = 12;
    const int anWidth[] =
    {
    TOTAL_PIX/nField, TOTAL_PIX/nField, TOTAL_PIX/nField, TOTAL_PIX/nField, 
    TOTAL_PIX/nField, TOTAL_PIX/nField, TOTAL_PIX/nField, TOTAL_PIX/nField, 
    TOTAL_PIX/nField, TOTAL_PIX/nField, TOTAL_PIX/nField, TOTAL_PIX/nField
    };

    InitList(lpszColName, anWidth, nField);
    }void CQueryDataDlg::InitList(LPCTSTR strColName[], const int* nWidth, int nField)
    {
             int nColumnNum = m_lsData.GetHeaderCtrl()->GetItemCount(); for (int i=0; i<nColumnNum; i++)  
    {
    DeleteColumn(0);  
    }
    LV_COLUMN lvcolumn;
    // 插入列表头
    lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH | LVCF_ORDER;
    lvcolumn.fmt = LVCFMT_LEFT;
    for (int i=0; i<nField; i++)  
    {
    lvcolumn.pszText = (char*)strColName[i];
    lvcolumn.iSubItem = i;
    lvcolumn.iOrder = i;
    //第一列宽不一样
    lvcolumn.cx = nWidth[i];
    m_lsData.InsertColumn(i, &lvcolumn);  
    }
    m_lsData.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVIS_SELECTED );
    }
      

  3.   

    http://www.codeguru.com/listbox/DualListManager.html
    仔细研究一下示例代码是怎样来实现可复用的界面的
      

  4.   

    把我上面的文字改成你的,列也改成你的,再把你数据库的数据往list上写,就这么简单!
    有什么问题可以发信到:[email protected]
      

  5.   

    谢谢各位:)这个问题的准确描述可能是:
    “如何继承对话框?”(http://expert.csdn.net/Expert/topic/1431/1431191.xml?temp=.2753717)我已经基本实现了,这里是整个过程和代码:
    http://www.codeguru.com/forum/showthread.php?s=&threadid=231824现在的问题是:
    派生类如何与基类的资源保持一致?
      

  6.   

    如何让两个对话框的同时显示
     
    2002-11-3 16:01:44   信息产业部电子第三十四所   黄基前   阅读次数: 3630 
        对于VC++初学者,可能会遇到这样一个问题:一个基于Dialog的MFC AppWizard应用程序,再Insert一个对话框,如何同时显示这两个对话框呢?     其实这个问题很简单,想要在屏幕上同时显示两个对话框,并且这两个对话框都可以被激活,则至少第二个对话框应该为非模态对话框。启动非模态对话框的方法与启动一个普通窗口的步骤是一样的,即先调用窗口类的Create()函数创建一个窗口对象,再用ShowWindow()使之显示出来即可(值得注意的是:第二个对话框的对象不能为局部变量,否则在退出OnInitDialog时,该对象会被自动关闭,从而导致第二窗口也会关闭)。例如,下列的代码演示了如何在主对话框的OnInitDialog()中启动另一个非模态对话框。 CDialog2 Dlg2; //注意Dlg2不能为OnInitDialog的局部变量。
    BOOL CDialog1::OnInitDialog()
     {
       CDialog::OnInitDialog();
       Dlg2.Create(IDD_DIALOG2,this );
       Dlg2.ShowWindow(SW_SHOW);
    }    编译并运行,怎么样,结果是不是OK了?