标签:
原文网址:http://www.cnblogs.com/tiwlin/archive/2013/05/08/3067966.html
对话框是Windows应用程序中一种常用的资源,其主要功能是输出信息和接收用户的输入数据。控件是嵌入在对话框中或其它父窗口中的一个特殊的小窗口,它用于完成不同的输入、输出功能。对话框与控件关系密切,在每个对话框上一般都有一些控件,对话框依靠这些控件与用户进行信息的交互。
在MFC中,对话框的功能被封装在CDialog类中,而CDialog类是CWnd类的派生类。作为窗口,对话框和其它窗口一样具有窗口的一切功能。对话框的一个典型应用是通过菜单命令或工具栏按钮打开一个对话框,当然,对话框也可以作为一个程序的主界面。
MFC提供了一系列对话框类,并实现了对话框消息响应和处理机制。CDialog类是对话框类中最重要的类,我们在程序中创建的对话框类一般都是CDialog类的派生类。CDialog类还是其它所有对话框类的基类,其派生关系如下所示:CObject>CCmdTarget>CWnd> CDialog。有关对话框的常用处理函数
一般对话框工作流程
当定义了一个对话框类后,就可以利用这个对话框类声明一个对话框对象,即一个能够在屏幕上显示的对话框。
声明了一个对话框对象后,可以调用对话框类的成员函数DoModal()建立对话框窗口并显示对话框。例如,假设定义了一个名为CMyDialog的对话框类,为了在屏幕上显示一个对话框,可以编写如下代码:CMyDialog myDlg; myDlg.DoModal();
函数OnOK()、 OnCancel()与DoModal()的关系:
对话框中一般都有OK和Cancel按钮,单击OK按钮时调用CDialog::OnOK()函数,单击Cancel按钮时调用CDialog::OnCancel()函数。OnOK()函数和OnCancal()函数都将结束DoModal()函数调用,但令DoModal()返回不同的值。OnOK()函数令DoModal()返回IDOK,OnCancel()函数令DoModal()返回IDCANCAL。用户可以根据DoModal()的返回值做出不同的选择。如:if (myDlg.DoModal() = = IDOK ){ …… }
对话框的初始化可以在三个不同的阶段所调用的函数中进行:
通常是在消息WM_INITDIALOG的消息处理函数OnInitDialog()中进行初始化。在收到WM_INIT- DIALOG消息时,对话框的框架已创建,对话框中的每个控件也已建立起来,但它们还没有在屏幕上显示。此时自然可以设置或优化对话框中各个控件的外观、尺寸、位置以及其它属性。函数OnInitDialog()将被成员函数DoModal()调用。
公用对话框
为了在MFC应用程序中使用公用对话框,MFC提供了封装这些公用对话框的类。这些公用对话框类都是从CCommonDialog类派生而来,而CCommonDialog类又是CDialog类的派生类。
MFC公用对话框类
Windows提供的控件分为两类:标准控件和公共控件。
标准控件:静态控件、编辑框、按钮、列表框、组合框和滚动条等。利用标准控件可满足大部分用户界面程序设计的要求。
公共控件:滑块、进度条、列表视控件、树视控件和标签控件等,利用公共控件实现应用程序用户界面风格的多样性。
控件是Windows提供的完成特定功能的独立小部件,它使应用程序对话功能的设计更容易完成,在对话框与用户的交互过程中担任主要角色,用于完成用户输入和程序运行过程中的输出。控件对应一个CWnd派生类的对象,它实际上也是一个窗口,可以通过调用窗口类的成员函数实现控件的移动、显示或隐藏、禁用或可用等操作,也可以重新设置它们的尺寸和风格等属性。MFC以类的形式对标准控件和公共控件进行了封装,这些类大部分是从CWnd类直接派生而来。
常用的MFC控件类
文件对话框CFileDialog,动画控件CAnimateCtrl,列表框控件CListBox,其关键代码
void CDlgControlDlg::DoDataExchange(CDataExchange* pDX) { // CAnimateCtrl mWndAnimate; // CListBox mListFileName; // CString mStrFilePath; // CString mStrFileName; CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_ANIMATE1, mWndAnimate);//动画控件的关联控件变量 DDX_Control(pDX, IDC_LIST_FILENAME, mListFileName);//列表框控件关联的控件变量 DDX_LBString(pDX, IDC_LIST_FILENAME, mStrFileName);//列表框控件关联的字符串变量 DDX_Text(pDX, IDC_EDIT_FILEPATH, mStrFilePath);//编辑框控件关联的字符串变量 } //按钮事件,打开avi的文件对话框事件 void CDlgControlDlg::OnBnClickedButtonOpenfile() { //CFileDialog--打开或保存对话框,构造函数的参数lpszFilterd的格式 //1.过滤字符串以“||”作为结束符 //2.过滤字符串中不同的行以“|”分割 //3.每一行有被分为两部分,以“|”分割,(显示在下列框的字符|过滤字符信息) TCHAR szFilter[]=L"视频文件(*.avi)|*.avi|所有文件(*.*)|*.*||"; CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFilter); if (IDOK!=dlg.DoModal()) { return; } mStrFilePath=dlg.GetPathName();//将文件路径显示在编辑框控件上 UpdateData(FALSE); //将文件路径显示到编辑框控件上 CString strName=dlg.GetFileName(); if (LB_ERR==mListFileName.FindString(-1,strName)) { int nItem=mListFileName.AddString(strName); //保存路径 CString* pPath=new CString; *pPath=mStrFilePath; mListFileName.SetItemData(nItem,(DWORD)pPath); } Play(); } //双击列表框事件 void CDlgControlDlg::OnLbnDblclkListFilename() { int nSel=mListFileName.GetCurSel();//获取当前的选择项 if (nSel==LB_ERR) { return; } CString* pPath=(CString*)mListFileName.GetItemData(nSel);//获取列表框中保存的文件路径 mStrFilePath=*pPath; UpdateData(FALSE); Play(); } //动画播放成员函数 void CDlgControlDlg::Play() { mWndAnimate.Open(mStrFilePath); mWndAnimate.Play(0,-1,-1); }
其结果:
标签:
原文地址:http://www.cnblogs.com/wi100sh/p/4220044.html