MFC框架程序----实现十一
void CDlgBaseControlDlg::OnOpenfile()
{
// TODO: Add your control notification handler code here
char szFilter[]=
"视频文件(*.avi)|*.avi|所有文件(*.*)|*.*||";
CFileDialog dlg(TRUE,NULL,NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
szFilter);
if (IDOK!=dlg.DoModal())
{
return;
}
//显示文件路径
m_strFilePath=dlg.GetPathName();
UpdateData(FALSE);
//在文件列表中显示文件名称
CString strFileName=dlg.GetFileName();
if(LB_ERR==m_wndFileName.FindString(-1,strFileName))
{
//添加数据项(文件名称),返回该数据项的索引
int nItem=m_wndFileName.AddString(strFileName);
//每一个文件名称对应一个文件路径
CString *pPath=new CString;
*pPath=m_strFilePath;
//通过添加数据项的附加数据保存文件路径
m_wndFileName.SetItemData(nItem,(DWORD)pPath);
}
//播放文件
Play();
}
void CDlgBaseControlDlg::OnDblclkFilename()
{
// TODO: Add your control notification handler code here
//获取文件名称列表中当前选择项
int nCurSel=m_wndFileName.GetCurSel();
if (LB_ERR==nCurSel)
{
return;
}
//播放文件,需要获取当前选择项对应的文件路径
CString *pPath=(CString*)
m_wndFileName.GetItemData(nCurSel);
m_strFilePath=*pPath;
UpdateData(FALSE);
//MessageBox(*pPath);
//播放文件
Play();
}
void CDlgBaseControlDlg::Play()
{
int nRep=0;//播放次数
//如果选中了重复播放,在组合框中选择播放次数
//否则
if (m_wndReplay.GetCheck())
{
//获取组合框中当前选择项
int nCur=m_wndPlayCount.GetCurSel();
switch (nCur)
{
case 0://无限循环
nRep=-1;
break;
case 1://重复一次
nRep=2;
break;
case 2://重复两次
nRep=3;
break;
}
}
else
{
nRep=1;
}
m_wndAnimate.Open(m_strFilePath);
m_wndAnimate.Play(0,-1,nRep);
}
void CDlgBaseControlDlg::OnReplay()
{
// TODO: Add your control notification handler code here
if (m_wndReplay.GetCheck())
{
m_wndPlayCount.EnableWindow(TRUE);
}
else
{
m_wndPlayCount.EnableWindow(FALSE);
}
}
void CDlgBaseControlDlg::OnPlay()
{
// TODO: Add your control notification handler code here
Play();
}
void CDlgBaseControlDlg::OnStop()
{
// TODO: Add your control notification handler code here
m_wndAnimate.Stop();
}
void CDlgBaseControlDlg::OnSetup()
{
// TODO: Add your control notification handler code here
//获取热键
DWORD nHotKey=m_wndHotkey.GetHotKey();
SendMessage(WM_SETHOTKEY,nHotKey);
}
class CPage1 : public CPropertyPage
{
DECLARE_DYNCREATE(CPage1)
public:
CPage1();
~CPage1();
enum { IDD = IDD_PAGE1 };
UINT m_nLineWidth;
public:
virtual BOOL OnApply();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
protected:
afx_msg void OnChangeWidth();
DECLARE_MESSAGE_MAP()
};
class CPage2 : public CPropertyPage
{
DECLARE_DYNCREATE(CPage2)
public:
CPage2();
~CPage2();
public:
COLORREF m_color;
enum { IDD = IDD_PAGE2 };
public:
virtual BOOL OnApply();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
protected:
afx_msg void OnColor();
DECLARE_MESSAGE_MAP()
};
IMPLEMENT_DYNCREATE(CPage1, CPropertyPage)
CPage1::CPage1() : CPropertyPage(CPage1::IDD)
{
m_nLineWidth = 0;
//在构造函数中,获取视图的线宽赋值给变量
//1 获取当前视图
CLabelPropView* pView=(CLabelPropView*)
((CFrameWnd*)AfxGetMainWnd())->GetActiveView();
//2将视图的值赋值给页面对话框
m_nLineWidth=pView->m_nLineWidth;
}
void CPage1::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
DDX_Text(pDX, IDC_WIDTH, m_nLineWidth);
DDV_MinMaxUInt(pDX, m_nLineWidth, 1, 25);
}
BEGIN_MESSAGE_MAP(CPage1, CPropertyPage)
ON_EN_CHANGE(IDC_WIDTH, OnChangeWidth)
END_MESSAGE_MAP()
void CPage1::OnChangeWidth()
{
//首先将应用按钮设置为可用
SetModified(TRUE);
}
BOOL CPage1::OnApply()
{
//将控件中的值设置给视图
UpdateData(TRUE);
//1 获取当前视图
CLabelPropView* pView=(CLabelPropView*)
((CFrameWnd*)AfxGetMainWnd())->GetActiveView();
//2 赋值
pView->m_nLineWidth=m_nLineWidth;
//3 视图窗口重绘
pView->Invalidate();
return CPropertyPage::OnApply();
}
IMPLEMENT_DYNCREATE(CPage2, CPropertyPage)
CPage2::CPage2() : CPropertyPage(CPage2::IDD)
{
//1 获取当前视图
CLabelPropView* pView=(CLabelPropView*)
((CFrameWnd*)AfxGetMainWnd())->GetActiveView();
//2 赋值
m_color=pView->m_lineColor;
}
CPage2::~CPage2()
{
}
void CPage2::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CPage2, CPropertyPage)
ON_BN_CLICKED(IDC_COLOR, OnColor)
END_MESSAGE_MAP()
void CPage2::OnColor()
{
//将应用按钮设置为可用
SetModified(TRUE);
//打开颜色对话框
CColorDialog dlg(m_color);
if (IDOK!=dlg.DoModal())
{
return;
}
//将颜色对话框中的颜色值赋值给变量
m_color=dlg.GetColor();
}
BOOL CPage2::OnApply()
{
//1 获取当前视图
CLabelPropView* pView=(CLabelPropView*)
((CFrameWnd*)AfxGetMainWnd())->GetActiveView();
//2 赋值
pView->m_lineColor=m_color;
//3 视图窗口重绘
pView->Invalidate();
return CPropertyPage::OnApply();
}
一 属性页对话框
1类型
标签式-常用于参数、选项等设置
向导式-常用于引导用户通过每一步的选择和设置最终完成某种功能
2 相关类
CPropertypage-父类是CDialog,页面对话框
CPropertySheet-父类是CWnd,页面对话框的容器窗口
关系,一个CPropertySheet对象包含多了CPropertypage对象
3 标签式
3.1 插入页面对话框资源,定义页面对话框类
3.2 添加CPropertySheet类的子类,定义容器窗口类
3.3 将页面添加到容器窗口
CPropertySheet::AddPage
3.4 创建和显示
CPropertySheet::DoModal
3.5 消息
CPropertySheet::OnApply
CPropertySheet::OnCancel
CPropertySheet::OnOK
3.6 注意:
初始时,应用按钮不可用,需要调用函数
SetModified(TRUE)去设置
4 向导式
4.1 插入页面对话框资源,定义页面对话框类
4.2 添加CPropertySheet类的子类,定义容器窗口类
4.3 将页面添加到容器窗口
CPropertySheet::AddPage
4.4 设置为向导式
CPropertySheet::SetWizardMode
4.5 创建和显示
CPropertySheet::DoModal
4.6 消息
CPropertyPage::OnSetActive
CPropertyPage::OnWizardNext
CPropertyPage::OnWizardBack
CPropertyPage::OnWizardFinish
4.7 注意:
4.7.1 设置页面的向导按钮
CPropertySheet::SetWizardButtons
4.7.2 向导页面的顺序不能随意修改