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

pdf106 trang | Chuyên mục: Visual C++ | Chia sẻ: dkS00TYs | Lượt xem: 1752 | Lượt tải: 1download
Tóm tắt nội dung Bài giảng Lập trình Windows - Dialog Box Common Controls Property Sheet, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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:

  • pdfBài giảng Lập trình Windows - Dialog Box Common Controls Property Sheet.pdf