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="在初始化函數(shù)中賦值";
?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;
?//創(chuàng)建和顯示模式對話框
?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("保存對話框中的相關(guān)設(shè)置");
?}
}
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對話框相關(guān)類
??? CDialog-父類是CWnd,對話框類中的基類
??? CCommonDialog-父類是CDialog,通用對話框類
??? CPropertyPage-父類是CDialog,屬性頁對話框
????????????????? 通常和CPropertySheet類結(jié)合使用
? 3 基于對話框的應(yīng)用程序
??? 3.1 模式
??????? 3.1.1 定義對話框資源和類(CDialog的子類)
????????????? 在構(gòu)造函數(shù)中將資源ID賦給CDialog
??????? 3.1.2 調(diào)用CDialog::DoModal函數(shù)創(chuàng)建和顯示對話框
??????? 3.1.3 使用CDialog::OnOK或者OnCancel關(guān)閉對話框
??????? 3.1.4 通過重寫OnInitDialog函數(shù),完成對話框的初始化操作
??????? 3.1.5 DoModal函數(shù)的執(zhí)行過程
????????????? 1 查找和加載對話框資源
????????????? 2 將主窗口設(shè)置為非激活狀態(tài)
????????????? 3 創(chuàng)建非模式對話框
????????????? 4 進(jìn)入對話框消息循環(huán)
????????????? 5 關(guān)閉對話框退出時,首先隱藏對話框窗口
????????????? 6 將主窗口設(shè)置激活狀態(tài)
????????????? 7 銷毀對話框窗口
????????????? 8 返回DoModal函數(shù)的執(zhí)行結(jié)果???
???????
??? 3.2 非模式
???????? 3.2.1 與一般窗口的創(chuàng)建和顯示過程類似
???????? 3.2.2 非模式對話的關(guān)閉
????????????? (OnOK或者OnCancel不能真正的關(guān)閉窗體,只是隱藏了)
?????????????? 處理步驟:
?????????????? 1 重寫CDialog::OnOK和OnCancel函數(shù),調(diào)用
???????????????? DestroyWindow()函數(shù)銷毀窗口
?????????????? 2 重寫CWnd::PostNcDestroy函數(shù),在函數(shù)中
???????????????? delete this;
二 對話框數(shù)據(jù)交換技術(shù)
? 2.1 對話框數(shù)據(jù)交換
? 通過將對話框的控件與成員變量綁定,可以通過成員變量訪問控件或數(shù)??? 據(jù)的交換。
? 2.2 DDX相關(guān)
? 2.2.1 一系列的綁定函數(shù)DDX_XXX
??????? 完成某一個控件和變量的綁定以及數(shù)據(jù)交換
? 2.2.2 CWnd::DoDataExchange
??????? 包含了一系列的綁定函數(shù)
? 2.2.3 CWnd::UpdateData-當(dāng)控件與成員變量發(fā)生數(shù)據(jù)交換時調(diào)用
??????? UpdateData(TRUE)-將控件的值保存到變量中
??????? UpdateData(FALSE)-將變量的值顯示到控件上
? 2.3 DDX的實(shí)現(xiàn)
????? 2.3.1 變量
????????? 1獲取指定ID的控件的窗口句柄
????????? 2 從控件窗口中獲取值或者設(shè)置變量的值到窗口
????? 2.3.2 控件
????????? 1獲取指定ID的控件的窗口句柄
????????? 2 將控件對象與窗口句柄綁定
三 對話框的基本控件
?? CFileDialog構(gòu)造函數(shù)中的參數(shù)LPCTSTR lpszFilter
?? 1.字符串以||作為結(jié)束
?? 2.文件類型下拉框中的每個數(shù)據(jù)項(xiàng)都以|隔開
?? 3.每個數(shù)據(jù)項(xiàng)由顯示的文本和過濾時采用的文件后綴兩部分組成,這兩???? 部分以|隔開
???? "視頻文件(*.avi)|*.avi|所有文件(*.*)|*.*||"?????
轉(zhuǎn)載于:https://www.cnblogs.com/boobuy/archive/2012/12/18/2823148.html
總結(jié)
以上是生活随笔為你收集整理的MFC框架程序----实现十的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地理空间数据库(Geodatabase)
- 下一篇: (原创)基于ZedBoard的Webca