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|所有文件(*.*)|*.*||"?????
轉載于:https://www.cnblogs.com/boobuy/archive/2012/12/18/2823148.html
總結
以上是生活随笔為你收集整理的MFC框架程序----实现十的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地理空间数据库(Geodatabase)
- 下一篇: vim 忽略大小写查找