您的位置:首页 > 其它

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

2012-12-18 13:46 302 查看
#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|所有文件(*.*)|*.*||"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: