本文基于上一案例在IDD_PANDALOG对话框中新增tab控件和两个对话框IDD_JILU和IDD_JISUAN,点击tab中的数据记录,显示对话框IDD_JILU,点击tab中的加法运算,显示对话框IDD_ JISUAN,对话框IDD_JILU中有list控件,点击记录可将滑块的数据记录到list中
对话框IDD_PANDALOG中的控件如下,添加变量CTabCtrl m_tabctrl;
对话框IDD_JILU的控件如下:添加变量CListCtrl m_list;,list的风格为report,按钮记录的ID为IDC_record,按钮删除的ID为IDC_delate
初始化表格,在BOOL jilu::OnInitDialog()中添加
BOOL jilu::OnInitDialog()
{
CDialogEx::OnInitDialog();
// page11 = this;
// TODO: 在此添加额外的初始化
//扩展列表风格
DWORD dwStyle = m_list.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;//选中某行高亮显示
dwStyle |= LVS_EX_GRIDLINES; //开栅格
m_list.SetExtendedStyle(dwStyle);
//便于理解
CRect rect;
m_list.GetWindowRect(&rect);
m_list.InsertColumn(0,_T("数据"), LVCFMT_CENTER, rect.Width()/3, 0);
m_list.InsertColumn(1,_T("x1"), LVCFMT_CENTER, rect.Width()/3, 1);
m_list.InsertColumn(2,_T("x2"), LVCFMT_CENTER, rect.Width()/3, 2);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
对话框IDD_JISUAN的控件如下,此处控件随意,该对话框只起点击tab中的加法运算就显示该对话框的作用
在PANDALOG.h头文件中添加IDD_JILU和IDD_JISUAN的头文件及成员变量
#include “jilu.h” #include “jisuan.h” jilu page1; jisuan page2;
在panDALOG.cpp的OnInitDialog()添加以下代码:
page1.DestroyWindow();
page2.DestroyWindow();
m_tabctrl.DeleteAllItems();
TCITEM item;
item.mask=TCIF_TEXT;
item.pszText=_T("数据记录");
m_tabctrl.InsertItem(0,&item);
item.pszText=_T("加法运算");
m_tabctrl.InsertItem(1,&item);
m_tabctrl.SetCurSel(0);
page1.Create(IDD_JILU,&m_tabctrl);
page2.Create(IDD_JISUAN,&m_tabctrl);
//画了个矩形框
CRect rect;
m_tabctrl.GetClientRect(&rect);//矩形框大小为m_tablectrl的大小
//在原基础上把矩形框偏置
rect.top += 30;
rect.bottom -= 20;
rect.left += 20;
rect.right -= 30;
page1.MoveWindow(&rect);
page2.MoveWindow(&rect);
page1.ShowWindow(TRUE);
m_tabctrl.SetCurSel(0);
添加tab控件的相应函数,实现点击tab上的按键,显示某对话框的功能
void panDALOG::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
int cursel;
cursel = m_tabctrl.GetCurSel();
switch(cursel)
{
case 0:
page1.ShowWindow(TRUE);
page2.ShowWindow(FALSE);
break;
case 1:
page1.ShowWindow(FALSE);
page2.ShowWindow(TRUE);
break;
}
}
此时运行的效果应如下:
接着要将IDD_PANDALOG对话框中的滑块数值传递至IDD_JILU对话框中
在jilu.cpp中添加extern panDALOG* pandlg;,表示引用外部的指针,在jilu.cpp中添加头文件panDALOG.h (不要在jilu.h中添加该头文件,否则易引起头文件相互引用而报错)
对应的,在panDALOG.cpp中添加panDALOG* pandlg;,在初始化位置添加pandlg = this;
在jilu.cpp添加record和delate的响应函数
void jilu::OnBnClickedrecord()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
/*int i=m_list.GetItemCount()+1;*/
//获取行数
int i=m_list.GetItemCount()+1; //初始时,,没有项 i= 0+1
CString n;
n.Format(_T("%d"),i);//插入数据前必须下开辟一个行,此时n = '1'
m_list.InsertItem(i-1,n);//初始时在0行 插入序号‘1’
CString num1;CString num2;
double number1;
double number2;
number1 = pandlg->m_value;
number2 = pandlg->m_value2;
num1.Format(_T("%.2f"),number1);
num2.Format(_T("%.2f"),number2);
//插入表格
m_list.SetItemText(i-1,1,num1);
m_list.SetItemText(i-1,2,num2);
UpdateData(FALSE);
}
void jilu::OnBnClickeddelate()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
//点中后删除
while(m_list.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED) != -1)
{
int nItem = m_list.GetNextItem(-1,LVNI_ALL | LVNI_SELECTED);
m_list.DeleteItem(nItem);
}
UpdateData(FALSE);
}
点击运行即可