zoukankan      html  css  js  c++  java
  • 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|所有文件(*.*)|*.*||"     

  • 相关阅读:
    云小课 | 华为云KYON之VPC终端节点
    华为云专家向宇:工欲善其事必先利其器,才能做数据的“管家”
    NB-IoT四大关键特性及实现告诉你,为啥NB
    Base64 原理
    netty系列之:轻轻松松搭个支持中文的服务器
    轻松让你的nginx服务器支持HTTP2协议
    是的你没看错,HTTP3来了
    HTTP协议之:HTTP/1.1和HTTP/2
    netty系列之:在netty中使用protobuf协议
    protocol buffer的高效编码方式
  • 原文地址:https://www.cnblogs.com/boobuy/p/2823148.html
Copyright © 2011-2022 走看看