MFC框架程序----实现十

#include "resource.h"
class CMyDlg:public CDialog
{
public:
 CMyDlg();
 virtual BOOL OnInitDialog( );
 virtual void DoDataExchange(
  CDataExchange* pDX );
 virtual void OnOK();

public:
 CWnd m_wndOK;//和OK按钮绑定
 CString m_strData;//和编辑框控件绑定的值变量
 

};
CMyDlg::CMyDlg():CDialog(IDD_DIALOG1)
{

}
void CMyDlg::DoDataExchange( CDataExchange* pDX )
{
 DDX_Control(pDX,IDOK,m_wndOK);
 DDX_Text(pDX,IDC_EDIT1,m_strData);
}
BOOL CMyDlg::OnInitDialog()
{
 if(!CDialog::OnInitDialog())
 {
  return FALSE;
 }
    m_wndOK.SetWindowText("DDXOK");
 m_wndOK.MoveWindow(0,0,100,100);
 m_strData="在初始化函数中赋值";
 UpdateData(FALSE);
 return TRUE;
}
void CMyDlg::OnOK()
{
 UpdateData(TRUE);
 MessageBox(m_strData);
 //CDialog::OnOK();
}
class CDlgApp:public CWinApp
{
public:
 virtual BOOL InitInstance();
};
CDlgApp theApp;
BOOL CDlgApp::InitInstance()
{
 CMyDlg dlg;
 m_pMainWnd=&dlg;
 dlg.DoModal();
 return TRUE;
}

#include "resource.h"

class CMyDlg:public CDialog
{
public:
    CMyDlg();
    //对话框的初始化操作
 virtual BOOL OnInitDialog( );
 virtual void OnOK( );
 virtual void OnCancel( );
 virtual void PostNcDestroy( );

};
CMyDlg::CMyDlg():CDialog(IDD_DIALOG1)
{

}
void CMyDlg::PostNcDestroy()
{
 CDialog::PostNcDestroy();
 delete this;
}
void CMyDlg::OnOK()
{
 DestroyWindow();
}
void CMyDlg::OnCancel()
{
 DestroyWindow();
}

BOOL CMyDlg::OnInitDialog()
{
    if (!CDialog::OnInitDialog())
    {
  return FALSE;
    }
    CWnd *pWnd=GetDlgItem(IDOK);
 pWnd->SetWindowText("确定");
 return TRUE;
}
class CDlgApp:public CWinApp
{
public:
 virtual BOOL InitInstance();
};
CDlgApp theApp;
BOOL CDlgApp::InitInstance()
{
 /*
 //模式对话框
 CMyDlg dlg;
 m_pMainWnd=&dlg;
 //创建和显示模式对话框
 dlg.DoModal();
 */
 //非模式对话框
 CMyDlg *pDlg=new CMyDlg;
 pDlg->Create(IDD_DIALOG1);
 m_pMainWnd=pDlg;
 pDlg->ShowWindow(SW_SHOW);
 return TRUE;
}

#include "ModelDlg.h"
#include "ModelessDlg.h"
void CMainFrame::OnModel()
{
 // TODO: Add your command handler code here
    CModelDlg dlg;
 if(IDOK==dlg.DoModal())
 {
       MessageBox("保存对话框中的相关设置");
 }

}

void CMainFrame::OnModeless()
{
 // TODO: Add your command handler code here
 CModelessDlg *pDlg=new CModelessDlg;
 pDlg->Create(IDD_DIALOG2);
 pDlg->ShowWindow(SW_SHOW);
}

class CModelDlg : public CDialog
{
public:
 CModelDlg(CWnd* pParent = NULL);   
 enum { IDD = IDD_DIALOG1 };
 protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 DECLARE_MESSAGE_MAP()
};

class CModelessDlg: public CDialog
{
public:
 CModelDlg(CWnd* pParent = NULL);  
 enum { IDD = IDD_DIALOG1 };
 protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 DECLARE_MESSAGE_MAP()
};

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);
 //播放文件
 m_wndAnimate.Open(m_strFilePath);
 m_wndAnimate.Play(0,-1,-1);
 //在文件列表中显示文件名称
 CString strFileName=dlg.GetFileName();
 m_wndFileName.AddString(strFileName); 
}

一MFC对话框和控件
  1 对话框分类
    模式-阻塞的
    非模式
  2 MFC对话框相关类
    CDialog-父类是CWnd,对话框类中的基类
    CCommonDialog-父类是CDialog,通用对话框类
    CPropertyPage-父类是CDialog,属性页对话框
                  通常和CPropertySheet类结合使用
  3 基于对话框的应用程序
    3.1 模式
        3.1.1 定义对话框资源和类(CDialog的子类)
              在构造函数中将资源ID赋给CDialog
        3.1.2 调用CDialog::DoModal函数创建和显示对话框
        3.1.3 使用CDialog::OnOK或者OnCancel关闭对话框
        3.1.4 通过重写OnInitDialog函数,完成对话框的初始化操作
        3.1.5 DoModal函数的执行过程
              1 查找和加载对话框资源
              2 将主窗口设置为非激活状态
              3 创建非模式对话框
              4 进入对话框消息循环
              5 关闭对话框退出时,首先隐藏对话框窗口
              6 将主窗口设置激活状态
              7 销毁对话框窗口
              8 返回DoModal函数的执行结果   
       
    3.2 非模式
         3.2.1 与一般窗口的创建和显示过程类似
         3.2.2 非模式对话的关闭
              (OnOK或者OnCancel不能真正的关闭窗体,只是隐藏了)
               处理步骤:
               1 重写CDialog::OnOK和OnCancel函数,调用
                 DestroyWindow()函数销毁窗口
               2 重写CWnd::PostNcDestroy函数,在函数中
                 delete this;
二 对话框数据交换技术
  2.1 对话框数据交换
  通过将对话框的控件与成员变量绑定,可以通过成员变量访问控件或数    据的交换。
  2.2 DDX相关
  2.2.1 一系列的绑定函数DDX_XXX
        完成某一个控件和变量的绑定以及数据交换
  2.2.2 CWnd::DoDataExchange
        包含了一系列的绑定函数
  2.2.3 CWnd::UpdateData-当控件与成员变量发生数据交换时调用
        UpdateData(TRUE)-将控件的值保存到变量中
        UpdateData(FALSE)-将变量的值显示到控件上
  2.3 DDX的实现
      2.3.1 变量
          1获取指定ID的控件的窗口句柄
          2 从控件窗口中获取值或者设置变量的值到窗口
      2.3.2 控件
          1获取指定ID的控件的窗口句柄
          2 将控件对象与窗口句柄绑定
三 对话框的基本控件
   CFileDialog构造函数中的参数LPCTSTR lpszFilter
   1.字符串以||作为结束
   2.文件类型下拉框中的每个数据项都以|隔开
   3.每个数据项由显示的文本和过滤时采用的文件后缀两部分组成,这两     部分以|隔开
     "视频文件(*.avi)|*.avi|所有文件(*.*)|*.*||"     

posted @ 2012-12-18 13:46  中国男孩  阅读(198)  评论(0编辑  收藏  举报