#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|所有文件(*.*)|*.*||"

转载于:https://www.cnblogs.com/boobuy/archive/2012/12/18/2823148.html

MFC框架程序----实现十相关推荐

  1. 孙鑫VC++LESSON3:MFC框架程序剖析

      MFC是微软提供给我们的基础类库,是一套面向对象的函数库,以类的方式提供给我们使用,利用这些类可以有效地完成基于Windows的应用程序开发.   对于在main函数之前定义的全局变量,他在进入入 ...

  2. MFC的框架程序分析3

    本文将剖析基于MFC的框架程序,探讨MFC框架程序的内部组织结构,MFC是微软为了简化程序员的开发工作而设计的一套c++类集合,利用这些类有 效地帮助程序员完成windows应用程序开发. 代码结构 ...

  3. 【MFC】MFC应用程序框架详解

    00. 目录 文章目录 00. 目录 01. Win32应用程序 02. MFC应用程序 03. MFC应用程序框架总结 04. 附录 01. Win32应用程序 程序运行都要有入口函数,在之前的C+ ...

  4. MFC应用程序框架入门

    摘要: 本文主要对VC++ 6.0的MFC编程方法及MFC应用程序框架进行简要介绍. 关键词: VC++6.0:MFC:程序框架 1 MFC概述 顾名思意,MFC应用程序框架是以MFC作为框架基础的, ...

  5. VS2010/MFC编程入门之四(MFC应用程序框架分析)

    上一讲鸡啄米讲的是VS2010应用程序工程中文件的组成结构,可能大家对工程的运行原理还是很模糊,理不出头绪,毕竟跟C++编程入门系列中的例程差别太大.这一节鸡啄米就为大家分析下MFC应用程序框架的运行 ...

  6. (转载)VS2010/MFC编程入门之四(MFC应用程序框架分析)

    上一讲鸡啄米讲的是VS2010应用程序工程中文件的组成结构,可能大家对工程的运行原理还是很模糊,理不出头绪,毕竟跟C++编程入门系列中的例程差别太大.这一节鸡啄米就为大家分析下MFC应用程序框架的运行 ...

  7. MFC应用程序框架分析

    SDK应用程序 程序运行都要有入口函数,在之前的C++教程中都是main函数,而Windows应用程序的入口函数是WinMain函数,MFC程序也是从WinMain函数开始的. 下面就给出用Windo ...

  8. MFC应用程序框架-文档/视结构

    MFC应用程序框架-文档/视结构 1.MFC单文档应用程序结构 2.文档对象 2.1基类CDocument 2.2在应用程序中使用文档类的典型步骤 3.视的对象 3.1基类CView 3.2常用的CV ...

  9. VC++基于MFC的程序框架剖析(前言)

    目录 基于MFC的程序框架剖析 MFC类组织结构图:层次结构图 接上:VC++MFC应用程序向导 接下:VC++MFC程序中的WinMain函数(一) 基于MFC的程序框架剖析 MFC库是开发Wind ...

最新文章

  1. 网络营销——网络营销专员到底是教你如何选择网站页面制作
  2. Design Pattern Quick Overview
  3. [Java基础]模块化概述
  4. React-router的基本使用
  5. SQL Sever sa密码丢失
  6. python3简单代码_python3实现简单汉诺塔的代码教程
  7. js- 引用和复制(传值和传址)
  8. 块层介绍 第一篇: bio层
  9. 设计师案头必备的配色灵感宝典软件\插件!
  10. 业余无线电通信_业余电台操作证书查询方式
  11. 《神经网络与深度学习》——邱锡鹏(读书笔记_C2_1)
  12. Unity5.0 Shader 极简入门(一)
  13. 九宫格拼图游戏的总结
  14. 很多人都不知道的如何通过银行如果最简便识别出联行号
  15. 雷电模拟器android文件夹在哪,雷电安卓模拟器共享文件怎么用?电脑文件与模拟器互通图文教程...
  16. php image函数,操作压缩图片时,png图片压缩后整个图片变黑
  17. 树莓派CSI摄像头使用
  18. chrome浏览器在https网站中打开http图片,打不开的解决方案
  19. cherry-pick多次
  20. java中unknown source,java - 对于 提示信息为 unknown source的解决办法: jdk 替换jre, 编译时加上debug=true...

热门文章

  1. css实现强制不换行/自动换行/强制换行---转帖,致谢王维刚
  2. 【leetcode】1032. Stream of Characters
  3. 测试人员必学的软件快速测试方法(三)
  4. 递推DP UVA 1366 Martian Mining
  5. 团队文化之表扬和批评
  6. SugarCRM 主表-自定义字段
  7. [练习] 用PYTHON来优化网站中的图片
  8. 转 在b/s开发中经常用到的javaScript技术
  9. 洛谷P1541 乌龟棋
  10. T^TOJ - 1251 - 。◕‿◕。TMD - 欧拉函数 - 质因数分解