(1).对单文档进行页面切分:
进行几次切分就 声明几个 CSplitterWnd 类型的变量(我在项目中切分两次,声明两个变量 m_splitwnd 、m_splitwnd)
具体切分步骤:(在CMainFrame中实现)
m_splitwnd.CreateStatic(this,1,2);
m_splitwnd1.CreateStatic(&m_splitwnd,2,1,WS_CHILD|WS_VISIBLE, m_splitwnd.IdFromRowCol(0,1));
m_splitwnd.CreateView(0,0,RUNTIME_CLASS(C*View),CSize*(200,0),pContext);
m_splitwnd1.CreateView(0,0,RUNTIME_CLASS(C*View),CSize(0,200),pContext);
m_splitwnd1.CreateView(1,0,RUNTIME_CLASS(C*View),CSize(0,200),pContext);
其中C*View可以是继承CView的子类。
(2).各种CView的子类:
1.CMyTree类继承于CTreeView。
所以CMyTree中本身就包含CTreeCtrl, 通过 CTreeCtrl usetree = this->GetTreeCtrl();可得到。
之后的操作等同于操作一个CTreeCtrl控件。
2.CMyList类继承于CListView。 可同CMyTree类一样操作。
3.CMyTabView类继承于 CFormView。
继承于CFormView的类不像上面两个类,CFormView类是用于窗体视图的基类。一个窗体视图是包含控件的基本视图,这些控件以对话模板资源为基础被放置好。
如果在应用中想使用窗体,则可用CFormView。这些视图使用CScrollView的功能,支持滚动。也可以在CFormView中插入其他控件。如我在其中插入了一个tabCtrl
控件,再操作tabCtrl。
(3).各控件的操作:
1.treeCtrl (Mytree) ((CString)treestationName 节点名称)
在Mytree节点钱添加“+”“—”及图标: (用一个CImageLIst m_list存放图标ID)
获取App指针 CMyApp *pApp = (CMyApp*)AfxGetApp();
设置CImagelist的格式 m_list.Create(16,16,ILC_COLOR32,2,2)
设置图标背景色 m_list.SetBkColor(RGB(255,255,255));
加入图标 m_list.Add(pApp->LoadIcon(IDI_ICON1));
m_list.Add(pApp->LoadIcon(IDI_ICON2));
m_list.Add(pApp->LoadIcon(IDI_ICON3));
把m_list运用到treeCtrl MyTree.SetImageList(&m_lsit,TVSIL_NORMAL);
获取树控件的原风格 DWORD dwStyles = GetWindowLong(Mytree.m_hWnd,GWL_STYLE);
重新设置风格 dwStyles |= TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT;
SetWindowLong(Mytree.m_hWnd,GWL_STYLE,dwStyles);
创树德根节点: HTREEITEM HROOT = Mytree.InsertItem("用户信息",1,1,TVI_ROOT); (第二个参数是节点没有被选中时显示 的图标,第三参数是被选中时显示的图标)
插入树根节点: HTREEITEM HROOT = Mytree.GetRootItem();
插入子节点: HTREEITEM HCHLID = Mytree.InsertItem(treestationName,2,0,HROOT)
判断树控件是否有子节点: Mytree.ItemHasChildren(Mytree.GetRootItem());
获取节点text的值 GetItemText((HTREEITEM)Item);
得到下个子节点 HTREEITEM childItem = Usetree.GetNextSiblingItem(item);
删除指定节点 Mytree.DeleteItem(Item);
2.LIstCtrl: (Mylist)
listCtrl有四种类型 LVS_ICON、 LVS_REPORT、 LVS_SMALLICON、 LVS_LIST。
首先为ListCtrl选择类型 Mylist.ModifyStyle(0,LVS_REPORT);
设置其他属性可以和TreeCtrl一样,也可以如下:
LV_COLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH |LVCF_ORDER;
lvc.fmt = LVCFMT_LEFT;
创建列表头:各列名称char* Colname[] = {"ID","NAME","密码"};
各列宽度 int ColWidth[] = {300,300,300};
使listctrl生成各列:
for(i=0;i<3;i++)
{ lvc.pszText = Colname[i];
lvc.iSubItem = i;
lvc.iOrder = i;
lvc.cx = ColWidth[i];
Mylist.InsertColumn(i,&lvc);
}
插入一行 int nRow = Mylist.InsertItem(0,str) ; 从首行插入,设置首列数据为str;
设置各列数据 Mylist.SetItemText(nRow,1,name); 设置第二列数据为name
3.TabCtrl (m_tabctrl)
添加切换标头: m_tabctrl.InsertItem(0,"计费报表");
m_tabctrl.InsertItem(1,"计费报表");
可以在TabCtrl中插入Dialog: (m_listdlg 、m_secondlistdlg) 都是Dialog类型的。
把Dialog插入TabCtrl中: m_listdlg.Create(IDD_LISTDIALOG,GetDlgItem(IDC_TAB1));
m_listdlg.Create(IDD_LISTDIALOG,GetDlgItem(IDC_TAB1));
TabCtrl是根据标头的标记来更改切换:
获取活动标头标记: int CurSel = m_tabctrl.GetCurSel();
根据标记来设置活动界面: switch(CurSel){
case 0: m_listdlg.ShowWindow(true);
m_secondlistdlg.ShowWindow(false);
……}