Bài giảng Lập trình Windows - Dialog Box Common Controls Property Sheet
Giới thiệu vềDialog box
Cài đặt và xửlý các control trong dialog
Modeless dialog
Chương trình minh họa Dialog Based
Tạo và xửlý dialog
Property Sheet
Common dialog
CPropetyPage
Tran Ngoc Bao 76 Dai hoc Su Pham TP.HCM
Khai báo lớp CMyPropertySheet
class CMyPropertySheet : public CPropertySheet
{
…
public:
virtual ~CMyPropertySheet();
// Generated message map functions
protected:
CMyPage1 m_myPage1;
CMyPage2 m_myPage2;
…
}
#include "MyPage1.h" // Added by ClassView
#include "MyPage2.h" // Added by ClassView
Tran Ngoc Bao 77 Dai hoc Su Pham TP.HCM
Khởi tạo CMyPropertySheet
CMyPropertySheet::CMyPropertySheet(UINT nIDCaption, CWnd*
pParentWnd, UINT iSelectPage)
:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
AddPage(&m_myPage1);
AddPage(&m_myPage2);
}
CMyPropertySheet::CMyPropertySheet(LPCTSTR pszCaption, CWnd*
pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
AddPage(&m_myPage1);
AddPage(&m_myPage2);
}
Tran Ngoc Bao 78 Dai hoc Su Pham TP.HCM
Khởi tạo CMyPropertySheet
CMyPropertySheet::CMyPropertySheet(LPCTSTR
pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd,
iSelectPage)
{
if (m_bPage1 == TRUE)
AddPage(&m_myPage1);
if (m_bPage2 == TRUE)
AddPage(&m_myPage2);
…..
}
Tran Ngoc Bao 79 Dai hoc Su Pham TP.HCM
Hiển thị MyPropertySheet
void CPropertySheetView::OnLButtonDown(UINT nFlags, CPoint point)
{
CMyPropertySheet dlg("Sheet Page Demo",this,0);
dlg.DoModal();
CView::OnLButtonDown(nFlags, point);
}
Hiển thị “page 1” của
PropertySheet
Tran Ngoc Bao 80 Dai hoc Su Pham TP.HCM
Hiển thị MyPropertySheet
void CPropertySheetView::OnLButtonDown(UINT nFlags, CPoint point)
{
CMyPropertySheet dlg("Sheet Page Demo",this,1);
dlg.DoModal();
CView::OnLButtonDown(nFlags, point);
}
Hiển thị “page 2” của
PropertySheet
Tran Ngoc Bao 81 Dai hoc Su Pham TP.HCM
Truyền và nhận dữ liệu với dialog
void CMyClass::ShowMyDlg()
{
CMyPropertySheet mySheet("Sheet Page Demo",this,0);
//Truyền giá trị cho các biến trong property
sheet
int nRes = mySheet.DoModal();
if (nRes == IDOK)
{
//Nhận giá trị từ các biến trong property
sheet
}
}
Tran Ngoc Bao 82 Dai hoc Su Pham TP.HCM
Xử lý sự kiện Apply
void CMyPropertySheet::OnApply()
{
GetActivePage ()->UpdateData (TRUE);
m_myPage1.SetModified (FALSE);
m_myPage2.SetModified (FALSE);
}
BEGIN_MESSAGE_MAP(CMyPropertySheet, CPropertySheet)
//{{AFX_MSG_MAP(CMyPropertySheet)
// NOTE - the ClassWizard will add and remove mapping macros here.
ON_BN_CLICKED (ID_APPLY_NOW, OnApply)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
class CMyPropertySheet : public CPropertySheet
{
afx_msg void OnApply ();
}
Tran Ngoc Bao 83 Dai hoc Su Pham TP.HCM
Xử lý sự kiện Apply (tt)
void CMyPropertySheet::OnApply()
{
GetActivePage ()->UpdateData (TRUE);
m_myPage1.UpdateData(TRUE);
m_myPage2.UpdateData (TRUE);
m_myPage1.SetModified (FALSE);
m_myPage2.SetModified (FALSE);
}
Tran Ngoc Bao 84 Dai hoc Su Pham TP.HCM
Xử lý sự kiện Apply (tt)
void CMyPropertySheet::OnApply()
{
GetActivePage ()->UpdateData (TRUE);
if (m_myPage1.m_bInit==TRUE)
{
m_myPage1.UpdateData();
}
if (m_myPage2.m_bInit==TRUE)
{
m_myPage2.UpdateData();
}
m_myPage1.SetModified (FALSE);
m_myPage2.SetModified (FALSE);
}
Tran Ngoc Bao 85 Dai hoc Su Pham TP.HCM
Xử lý sự kiện OK
void CMyPage1::OnOk()
{
GetDataControl();
CPropertyPage::OnOK();
}
void CMyPage2::OnOk()
{
GetDataControl();
CPropertyPage::OnOK();
}
void CMyPage1::GetDataControl()
{
UpdateData();
strFirstName = m_strFirstName;
…….
}
void CMyPage2::GetDataControl()
{
UpdateData();
strHomePhone = m_strHomePhone;
…….
}
Tran Ngoc Bao 86 Dai hoc Su Pham TP.HCM
Xử lý dữ liệu trong dialog
class CMyName : public CObject
{
public:
CMyName();
CString m_strFirstName;
CString m_strLastName;
virtual ~CMyName();
};
#include “myName.h”
class CMyPage1 : public CPropertyPage
{
CMyName m_myName;
….
}
Tran Ngoc Bao 87 Dai hoc Su Pham TP.HCM
Chuyển và nhận dữ liệu với dialog (tt)
void CMyClass::ShowMyDlg()
{
CMyName myName;
CMyPropertySheet mySheet("Sheet Page Demo",this,0);
//Truyền giá trị cho các biến trong property sheet
mySheet.m_myPage1.m_myName = myName;
int nRes = mySheet.DoModal();
if (nRes == IDOK)
{
//Nhận giá trị từ các biến trong property sheet
myName = mySheet.m_myPage1.m_myName;
}
}
Tran Ngoc Bao 88 Dai hoc Su Pham TP.HCM
Xử lý dữ liệu trong dialog (tt)
class CMyName : public CObject
{
public:
CMyName();
CString m_strFirstName;
CString m_strLastName;
virtual ~CMyName();
void operator =(CMyName &tmp);
};
void CMyName::operator =(CMyName &tmp)
{
m_strFirstName = tmp.m_strFirstName;
m_strLastName = tmp.m_strLastName;
}
Tran Ngoc Bao 89 Dai hoc Su Pham TP.HCM
Xử lý dữ liệu trong dialog (tt)
BOOL CMyPage1::OnInitDialog()
{
CPropertyPage::OnInitDialog();
SetDataControl();
return TRUE;
}
void CMyPage1::SetDataControl()
{
m_strFirstName = m_myName.m_strFirstName;
………..
UpdateData(0);
}
Tran Ngoc Bao 90 Dai hoc Su Pham TP.HCM
Truyền và nhận dữ liệu với dialog (tt)
void CMyClass::ShowMyDlg()
{
CMyName myName;
CMyPropertySheet mySheet("Sheet Page Demo",this,0);
//Truyền giá trị cho các biến trong property sheet
mySheet.m_myPage1.SetData(myName);
int nRes = mySheet.DoModal();
if (nRes == IDOK)
{
//Nhận giá trị từ các biến trong property sheet
mySheet.m_myPage1.GetData(myName);
}
}
Tran Ngoc Bao 91 Dai hoc Su Pham TP.HCM
Xử lý dữ liệu trong dialog (tt)
void CMyPage1::GetData(CMyName &myName)
{
myName = m_myName;
}
void CMyPage1::SetData(CMyName myName)
{
m_myName = myName;
}
Tran Ngoc Bao 92 Dai hoc Su Pham TP.HCM
Xử lý sự kiện OK
void CMyPage1::OnOk()
{
GetDataControl();
CPropertyPage::OnOK();
}
void CMyPage1::GetDataControl()
{
UpdateData();
m_myName.m_strFirstName = m_strFirstName;
…….
}
Tran Ngoc Bao 93 Dai hoc Su Pham TP.HCM
Modeless Dialog Box
class CModelessDlg : public CDialog
{
// Construction
public:
CModelessDlg(CWnd* pParent = NULL); // standard constructor
CWnd *m_pParent;
void DoModeless();
enum { IDD = IDD_DIALOG1 };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
//{{AFX_MSG(CModelessDlg)
virtual void OnOK();
virtual void OnCancel();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
Tran Ngoc Bao 94 Dai hoc Su Pham TP.HCM
Modeless Dialog Box (tt)
void CModelessDlg::DoModeless()
{
if (GetSafeHwnd()==NULL)
{
Create(IDD_DIALOG1,m_pParent);
ShowWindow(SW_SHOW);
CenterWindow();
}
else
{
if (IsWindowVisible()==FALSE)
{
ShowWindow(SW_SHOW);
}
}
}
Tran Ngoc Bao 95 Dai hoc Su Pham TP.HCM
Modeless Dialog Box – SendMessage
void CModelessDlg::OnApply()
{
// TODO: Add extra validation here
UpdateData (TRUE);
CMyClass my;
my.s1 = m_S;
my.n = 5;
AfxGetMainWnd ()->SendMessage (WM_USER_APPLY, 0, (LPARAM) &my);
//AfxGetMainWnd ()->SendMessage (WM_USER_APPLY, 0, 0L);
}
Tran Ngoc Bao 96 Dai hoc Su Pham TP.HCM
LRESULT CMainFrame::OnApply (WPARAM wParam, LPARAM lParam)
{
CMyClass* my =(CMyClass*)lParam ;
………….
Invalidate();
return 0;
}
class CMainFrame : public CFrameWnd
{
afx_msg LRESULT OnApply (WPARAM wParam, LPARAM lParam);
};
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_MESSAGE (WM_USER_APPLY, OnApply)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
Modeless Dialog Box – SendMessage (tt)
Tran Ngoc Bao 97 Dai hoc Su Pham TP.HCM
Modeless Dialog Box – SendMessage (tt)
if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define WM_USER_APPLY WM_USER+0x100
#define VC_EXTRALEAN
#include // MFC core and standard components
#include // MFC extensions
#include // MFC Automation classes
#include // MFC support for Internet Explorer 4
Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include // MFC support for Windows
Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
Tran Ngoc Bao 98 Dai hoc Su Pham TP.HCM
Modeless Dialog Box – Show & Hide
void CMyModelessView::OnShow()
{
// TODO: Add your command handler code here
m_dlgMyModeless.DoModeless();
}
void CMyModelessView::OnHide()
{
// TODO: Add your command handler code here
m_dlgMyModeless.ShowWindow(SW_HIDE);
}
Đại Học Sư Phạm Tp. Hồ Chí Minh
Khoa Toán – Tin Học LẬP TRÌNH WINDOWS
Dialog Box
Common Controls
Property Sheet
Lập trình với Common Dialog
Tran Ngoc Bao 100 Dai hoc Su Pham TP.HCM
Giới thiệu về dialog – Common dialog
Open file
dialog
Tran Ngoc Bao 101 Dai hoc Su Pham TP.HCM
void CCommonDialogView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CFileDialog fDlg(1,NULL,NULL,OFN_HIDEREADONLY | OFN_FILEMUSTEXIST ,
"C Header Files (*.h)|*.h|C++ Header Files (*.hpp)|*.hpp||");
if ( fDlg.DoModal() == IDOK)
{
CString s= fDlg.GetPathName();
if (s.Find(".h") ==-1 && s.Find(".hpp")==-1)
s+=".hpp";
//Xử lý với file s
s.ReleaseBuffer(s.GetLength());
}
CView::OnLButtonDown(nFlags, point);
}
Common dialog – Open File
Tran Ngoc Bao 102 Dai hoc Su Pham TP.HCM
void CCommonDialogView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CFileDialog fDlg(0,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |
OFN_PATHMUSTEXIST ,
"C Header Files (*.h)|*.h|C++ Header Files (*.hpp)|*.hpp|");
if ( fDlg.DoModal() == IDOK)
{
CString s= fDlg.GetPathName();
if (s.Find(".h") ==-1 && s.Find(".hpp")==-1)
s+=".hpp";
//Xử lý với tên file s
s.ReleaseBuffer(s.GetLength());
}
CView::OnLButtonDown(nFlags, point);
}
Common dialog – Save File
Tran Ngoc Bao 103 Dai hoc Su Pham TP.HCM
Giới thiệu về dialog – Common dialog
Color dialog
Tran Ngoc Bao 104 Dai hoc Su Pham TP.HCM
void CColorDialogDlg::OnColor()
{
// TODO: Add your control notification handler code here
CColorDialog dlg;
if (dlg.DoModal() ==IDOK)
{
COLORREF color = dlg.GetColor();
//Xử lý với color
…
}
}
Common dialog – Color Dialog
Tran Ngoc Bao 105 Dai hoc Su Pham TP.HCM
Giới thiệu về dialog – Common dialog
Fonts dialog
Tran Ngoc Bao 106 Dai hoc Su Pham TP.HCM
File đính kèm:
Bài giảng Lập trình Windows - Dialog Box Common Controls Property Sheet.pdf

