操作数据库时(当然不止这种情况),操作是相似的,添加、删除、修改、提交 等等,但是具体到不同数据表,显示给用户的界面肯定不同,这种情况应该采取什么模式?
我的想法:
相通的操作放在一个类(如 添加、删除、修改、提交)中,具体到某一个数据表, 继承该类。 CDialog<-CListDlg<-CTable1ListDlg
<-CTable2ListDlg
我初学C++和VC,请高手赐教。我不想拷贝/粘贴,这好象是对C++的污辱。
我的想法:
相通的操作放在一个类(如 添加、删除、修改、提交)中,具体到某一个数据表, 继承该类。 CDialog<-CListDlg<-CTable1ListDlg
<-CTable2ListDlg
我初学C++和VC,请高手赐教。我不想拷贝/粘贴,这好象是对C++的污辱。
再在打开不同的表的时候往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 );
}
仔细研究一下示例代码是怎样来实现可复用的界面的
有什么问题可以发信到:[email protected]
“如何继承对话框?”(http://expert.csdn.net/Expert/topic/1431/1431191.xml?temp=.2753717)我已经基本实现了,这里是整个过程和代码:
http://www.codeguru.com/forum/showthread.php?s=&threadid=231824现在的问题是:
派生类如何与基类的资源保持一致?
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了?