一 、
静态控件包括: 图片、静态文本、分组框控件。
它们默认的ID都是IDC_STATIC。一般这些控件只起显示作用,如果要操作这些控件需要修改ID以保证ID的唯一性。
图片控件的使用:
新建一个对话框程序,拖放一个Picture控件,添加一个bmp图片资源(IDB_BITMAP1)和图片控件相关联,选中Picture控件设置他的样式如下:
运行结果:
按钮控件包括:一般按钮、单选按钮、复选按钮。
它们所对应的控件类都是CButton类, 对控件的操作一般都是通过与之相关的类提供的函数完成的。
组合框控件,对应的控件类是CComboBox, 可以接收用户的输入,也可以在多个选项中选择一项,还可以通过属性页的方式添加控件的数据项。
CComboBox类的常用函数:
GetCout (); // 获取数据项的数量 GetCurSel(); // 获取当前选择项 SetCurSel() ; // 设置当前选择项 GetLBText (); // 根据索引获取选项字符串 AddString()/InsertString/DeleteString/FindString // 添加/插入/删除/查找 数据项 ResetContent(); //重置数据项
列表框控件: 对应CListBox类,可以在多个选项中选择一项也可以选择多项。只能通过代码添加数据项。常用的函数与组合框类似。
列表框控件的使用:
新建一个对话框程序,拖放两个List Box控件,四个按钮控件。 这里实现一个通过单击相应按钮交换左右两个列表框控件的数据
为左边的列表框控件关联一个控件变量:m_wndListBoxLeft,为右边的列表框控件添加一个控件变量:m_wndListBoxRight,
界面如下:
添加一个列表框初始化函数InitListBox为列表框添加数据并在OnInitDIalog函数中调用:
void CCListBoxDlg::InitListBox() { m_wndListBoxLeft.AddString ("上海"); m_wndListBoxLeft.AddString ("北京"); m_wndListBoxLeft.AddString ("深圳"); m_wndListBoxLeft.AddString ("杭州"); }按钮对应的响应函数如下:
void CCListBoxDlg::OnBtnOneright() { // TODO: Add your control notification handler code here int nItem = m_wndListBoxLeft.GetCurSel (); if (nItem == LB_ERR) { MessageBox ("No Item Selected!"); return; } CString str; m_wndListBoxLeft.GetText (nItem, str); m_wndListBoxRight.AddString (str); m_wndListBoxLeft.DeleteString (nItem); } void CCListBoxDlg::OnBtnAllright() { // TODO: Add your control notification handler code here int nCount = m_wndListBoxLeft.GetCount (); for (int i = 0; i < nCount; ++i) { CString str; m_wndListBoxLeft.GetText (i, str); m_wndListBoxRight.AddString (str); } // 清空左边列表框,注意不要在循环里做 m_wndListBoxLeft.ResetContent (); }
动画控件:对应CAnimateCtrl类播放简单的AVI帧动画。
函数:
Open(); // 打开指定文件 Play(); // 播放 Stop(); // 停止
程序的运行截图:
界面设计如下:
最大的那个是Animate控件,“打开”按钮用来选择要播放的文件,打开按钮左边为编辑框用来显示打开的文件的路径,
右边一个ListBox控件用来显示所有代开的播放文件名,一个CheckBox控件用来设置是否循环,一个Combo Box控件用来设置循环次数
两个Radido按钮用来设置播放状态:播放、停止
为 Animate控件关联一个控件类型的变量m_wndAnimateCtrl,为List Box控件关联一个控件类型的变量m_wndListCtrl方便后面对它们的操作
这里先介绍下CFileDialog类的使用:
CFileDialog是微软封装好的一个用于文件打开和保存的类,使用该类不需要创建对话框资源与之关联,只需构造一个对象即可
构造函数:
CFileDialog( BOOL bOpenFileDialog, //标识打开或者另存为对话框 LPCTSTR lpszDefExt = NULL, //默认的文件后缀 LPCTSTR lpszFileName = NULL, //默认的文件名称 DWORD dwFlags = , //窗口的风格 LPCTSTR lpszFilter = NULL, //过滤字符串 CWnd* pParentWnd = NULL //父窗口,通常设置为NULL );需要注意的是:过滤字符串的格式
CFileDialog两个常用函数:
CFileDialog::GetPathName() // 获取打开的文件的路径 CFileDialog::GetFileName() // 获取文件名称
另外:为了保存和列表框(CListBox)/组合框相关联的数据,调用SetItemData/GetItemData函数来设置和获取附加数据。
具体功能函数实现如下:
/****************************************************************** 打开视频文件,添加不重复的视频文件到播放列表中,保存文件路径 *******************************************************************/ void CMFCPalyerDlg::OnBtnOpenfile() { // TODO: Add your control notification handler code here // 文件类型过滤器 char szFilter[] = "视频文件(*.avi)|*.avi|所有文件(*.*)|*.*||"; CFileDialog dlg (TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL); if (IDCANCEL == dlg.DoModal ()) return; m_strPath = dlg.GetPathName (); if (LB_ERR == m_wndListBox.FindString (-1, dlg.GetFileName ())) { int nIndex = m_wndListBox.AddString (dlg.GetFileName ()); // 把列表框项对应的路径信息存入附加附加数据 CString *pStrPath = new CString; *pStrPath = dlg.GetPathName (); m_wndListBox.SetItemData (nIndex, (DWORD)pStrPath); } Play(); UpdateData (FALSE); }
/************************************************************************ 当勾选"循环"复选框式启用组合框控件供用户选择循环次数,否则禁用组合框 *************************************************************************/ void CMFCPalyerDlg::OnCheck() { // TODO: Add your control notification handler code here if (m_check.GetCheck ()) m_wndComboBox.EnableWindow (); else m_wndComboBox.EnableWindow (FALSE); }
/*************************************************************************************** 播放视频文件函数,注意:这里的播放路径和循环次数由成员变量:m_strPath,m_loopcount决定 ****************************************************************************************/ void CMFCPalyerDlg::Play() { // 打开视频文件 m_wndAnimateCtrl.Open (m_strPath); // 播放 m_wndAnimateCtrl.Play (0, -1, m_loopcount); }
/************************************************************************** 播放按钮 ***************************************************************************/ void CMFCPalyerDlg::OnPlay() { // TODO: Add your control notification handler code here Play(); } /*************************************************************************** 停止按钮 ****************************************************************************/ void CMFCPalyerDlg::OnStop() { // TODO: Add your control notification handler code here m_wndAnimateCtrl.Stop (); }
/************************************************************************** 相应列表框控件LBN_DBLCLK(鼠标双击)事件播放选中文件 ***************************************************************************/ void CMFCPalyerDlg::OnDblclkList1() { // TODO: Add your control notification handler code here int nItem = m_wndListBox.GetCurSel (); CString *pStrPath = (CString*)m_wndListBox.GetItemData (nItem); m_strPath = *pStrPath; Play (); }
/********************************************************************************* 通过组合框控件选择设置(CBN_SELCHANGE)播放循环次数(改变成员变量m_loopcount的值) **********************************************************************************/ void CMFCPalyerDlg::OnSelchangeCombo1() { // TODO: Add your control notification handler code here int nSel = m_wndComboBox.GetCurSel (); if (CB_ERR == nSel) return; switch (nSel) { case 0:// 1 次 m_loopcount = 1; break; case 1:// 2 次 m_loopcount = 2; break; case 2:// 一直 m_loopcount = -1; break; } }
Demo下载地址:点击打开链接