一 、
靜態控件包括: 圖片、靜態文本、分組框控件。
它們默認的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
);
需要注意的是:過濾字符串的格式1 每個數據項之間用|隔開,整個字符串以||結尾
2 每個數據項分爲顯示的部分和過濾的部分。這兩部分也以 | 分隔。
比如這裏想代開avi文件或所有類型文件: "視頻文件(*.avi)|*.avi|所有文件(*.*)|*.*||";
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下載地址:點擊打開鏈接