热键控件看起来就像一个编辑框,但是在热键控件中能够立刻反应用户刚刚按下的键组合,这在设置程序的热键时特别有用。
热键控件只是在“视觉”上显示了按键组合,设置热键的工作还需要用户添加代码完成。
MFC提供了CHotKey类进行支持。
列表控制(List Control)按一定的排列顺序显示一系列带图标的字符串。
列表控件提供了四种显示模式:大图标(Icon)、小图标(Small Icon)、列表(List)和报表(Report)。
用户可以向列表控件中添加新的项,也可以控制列表控件的显示模式。
MFC提供了CListCtrl类进行支持。
初始化:
struct INFO { int id; CString time; CString type; }info; CString id; int nRow=0; id.Format(_T("%d"), info.id); m_ListCtrl.InsertItem(nRow,id); m_ListCtrl.SetItemText(nRow, 1, info.time); m_ListCtrl.SetItemText(nRow, 2, info.type); nRow ;
添加记录:
struct INFO
{
int id;
CString time;
CString type;
}info;
CString id;
int nRow=0;
id.Format(_T("%d"), info.id);
m_ListCtrl.InsertItem(nRow,id);
m_ListCtrl.SetItemText(nRow, 1, info.time);
m_ListCtrl.SetItemText(nRow, 2, info.type);
nRow ;
树形控件(Tree Control)
显示一系列项目的层次关系,最典型的例子是显示磁盘上的文件与文件夹。
如果有子项目的话,单击树形控件中的项目可以展开或者收缩其子项目。
MFC提供了CTreeCtrl类进行支持。
初始化
void CConfigDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 CRect rcWnd; GetClientRect(&rcWnd); CRect rcChild = rcWnd; rcChild.top = rcWnd.top 10; rcChild.bottom -=10; rcChild.left = 160; rcChild.right -= 10; CRect laneRect = rcChild; if(::IsWindow(m_1Dlg)) m_1Dlg.MoveWindow(rcChild); if(::IsWindow(m_2Dlg)) m_2Dlg.MoveWindow(rcChild); if ( ::IsWindow( pTree.GetSafeHwnd() ) ) { pTree.MoveWindow(rcWnd.left 10,rcWnd.top 30,130,350,1); } }
树节点切换
void CConfigDlg::OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 HTREEITEM hSelected=pNMTreeView->itemNew.hItem; if(hSelected!=NULL) { pTree.SelectItem(hSelected); int nDat = pTree.GetItemData(hSelected); switch(nDat) { case 1: /*MessageBox(_T("YNAME"));*/ if(m_pPreWnd) m_pPreWnd->ShowWindow(SW_HIDE); m_1Dlg.ShowWindow(SW_SHOW); m_pPreWnd = &m_1Dlg; break; case 3: /*MessageBox(_T("XNAME"));*/ if(m_pPreWnd) m_pPreWnd->ShowWindow(SW_HIDE); m_2Dlg.ShowWindow(SW_SHOW); m_pPreWnd = &m_2Dlg; break; default: break; } } *pResult = 0; }
改变位置
void CConfigDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 CRect rcWnd; GetClientRect(&rcWnd); CRect rcChild = rcWnd; rcChild.top = rcWnd.top 10; rcChild.bottom -=10; rcChild.left = 160; rcChild.right -= 10; CRect laneRect = rcChild; if(::IsWindow(m_1Dlg)) m_1Dlg.MoveWindow(rcChild); if(::IsWindow(m_2Dlg)) m_2Dlg.MoveWindow(rcChild); if ( ::IsWindow( pTree.GetSafeHwnd() ) ) { pTree.MoveWindow(rcWnd.left 10,rcWnd.top 30,130,350,1); } }
属性表控件(Tab Control)
包含大量的控件,可以满足用户显示或者获取大量数据分类显示的要求,典型例子是Windows任务栏每个程序标签。
每个属性表又分为好几个属性页,这些属性页由各自的标签进行区分,这些属性页中都可以包容其他控件。
在显示属性表的时候,一次只能够显示一个属性页的全部内容,同时显示其他属性页的标签,用户通过单击标签打开相应的属性页。
MFC提供了CTabCtrl类进行支持。
初始化绑定变量
m_tab_Light.DeleteAllItems();
m_LightParkingDlg.DestroyWindow();
m_LightStatusDlg.DestroyWindow();
m_tab_Light.InsertItem(0, _T("0001")); // 插入第一个标签
m_tab_Light.InsertItem(1, _T("0002")); // 插入第二个标签
CRect tabRect; // 标签控件客户区的位置和大小
m_tab_Light.GetClientRect(&tabRect); // 获取标签控件客户区Rect
// 调整tabRect,使其覆盖范围适合放置标签页
tabRect.left = 2;
tabRect.right -= 1;
tabRect.top = 21;
tabRect.bottom -= 2;
m_LightParkingDlg.Create(IDD_DIALOG_LIGHT_PARKING, &m_tab_Light); // 创建第一个标签页
m_LightStatusDlg.Create(IDD_DIALOG_LIGHT_STATUS, &m_tab_Light); // 创建第二个标签页
//m_LightParkingDlg.InitData();
m_LightParkingDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(),SWP_SHOWWINDOW);
控件页面切换
CRect tabRect; // 标签控件客户区的位置和大小
m_tab_Light.GetClientRect(&tabRect); // 获取标签控件客户区Rect
// 调整tabRect,使其覆盖范围适合放置标签页
tabRect.left = 2;
tabRect.right -= 1;
tabRect.top = 21;
tabRect.bottom -= 2;
switch (m_tab_Light.GetCurSel())
{
case 0:
m_LightStatusDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
m_LightParkingDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
break;
case 1:
m_LightParkingDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);
m_LightStatusDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);
break;
}
动画控件(Animation):
用来播放一段AVI格式的视频剪辑。用户可以控制视频剪辑的播放、停止和定位,但也仅限于这些功能。动画控件设置不能播放音频剪辑,如果用户需要更高层次的视频或者音频的支持,请选用MCIWnd控件。
MFC提供了CAnimateCtrl类对动画控件进行支持。
高级编辑框(Rich Edit)编辑控件(Edit Control)功能的扩展。在高级编辑框中,除了简单的输入和编辑字符串外,用户还可以为字符或段落指定特定的格式,用户甚至还可以向高级编辑框中插入OLE项。
高级编辑框基本上实现了一个带格式的文本编辑器功能,而只需要用户添加少量的接口。
MFC提供了CRichEditCtrl类进行支持。
日期/时间选择器(Date Time Picker)向用户提供了一种直观的选择日期和时间的方法、日期/时间选择器在外观上类似于一个组合框,但是当用户单击下拉箭头时就会展开一个日历控件供用户选择,而一旦用户做出了选择,日期/时间选择器会自动显示新的日期/时间。MFC提供了CDateTimeCtrl类进行支持。