LTC4W_02_-_Thu_vien_lap_trinh_MFC

  • Upload
    ha-le

  • View
    54

  • Download
    0

Embed Size (px)

Citation preview

Lp trnh trn mi trng WindowsK THUT LP TRNH VISUAL C++ THU L (MFC)

Ni dung trnh by Gii thiu v MFC Chng trnh MFC u tin X l Mouse v Keyboard Mt s lp thng gp: CWnd, CString,.. Cc control thng gp Cc dialog thng gp X l menu

1

Gii thiu v MFC MFC l g ? Mt s tnh nng ca MFC qua tng version Cc thnh phn ca 1 ng dng trong VC++

Gii thiu v MFC Gi thi v

MFC l g ? L mt th vin cc lp hng i tng dng cho vic lp trnh trn vi c l h t d vi l tr Windows. c xy dng trn c s cc hm th vin API ca Windows d s h vi c Version 6 c khong 200 lp c kho l Gip cho ngi lp trnh c th xy dng ng dng nhanh v t tn Gi ng l tr c th d d v t cng sc hn so vi vic s dng n thun cc hm th vin API s v vi s thu c h vi ca Windows Ta vn c th gi cc hm Windows API trong cc ng dng MFC v c th c h c d

2

Gii thiu v MFC Gi thi v

MFC l g ? Trong 1 ng dng MFC, ta thng khng gi hm d th g h Windows API trc tip, m s to cc i tng t nhng tr ti m c t t nh lp ca MFC, v gi phng thc ca i tng c v th c t a s cc phng thc ca nhng lp MFC c cng tn s th c nh l c vi nhng hm Windows API nh h MFC to ra mt Application Framework, gip: t m gi Thit lp kin trc ca ng dng mt cch nht qun v khoa hc Che du i nhiu phn chi tit m Windows API i hi, gip lp trnh vin thnh thi hn

Gii thiu v MFC Gi thi v

Mt s tnh nng ca MFC Version 1: Cc lp List, Array, String, Time, Date, File access, Cc lp giao din c bn MDI, OLE 1.0

Version 2: File open, save Print preview, printing Scrolling window, Splitter window Toolbar, Statusbar Truy xut c n cc control ca VB Tr gip theo ng cnh (Context-sensitive help) DLL

3

Gii thiu v MFC Gi thi v

Mt s tnh nng ca MFC Version 2.5: H tr ODBC (Open Database Connectivity), cho php truy xut n cc CSDL Access, FoxPro, SQL Server, OLE 2.01

Version 3: H tr tab dialog (property sheet) Docking control bar

Version 3.1: H tr cc control chun ca Windows 95 ODBC level 2 with Access Jet database engine Cc lp Winsock phc v lp trnh TCP/IP

Gii thiu v MFC Gi thi v

Mt s tnh nng ca MFC Version 4.0: ADO (Data Access Object) Windows 95 docking control bar B sung thm lp TreeView v RichEdit Cc lp ng b ho cc tiu trnh Cc lp WinInet Cc lp ActiveX document server Cc tnh nng m rng ca ActiveX control Tng cng mt s kh nng ca ODBC

Version 4.2:

4

Gii thiu v MFC Gi thi v

Mt s tnh nng ca MFC Version 6: H tr cc lp cho nhng control chun trong IE 4.0 H tr Dynamic HTML, cho php to lp ng cc trang HTML Active Document Containment, cho php ng dng MFC c th cha cc Active Document OLE DB v ADO

Gii thiu Gi thi

Cc thnh phn ca 1 ng dng

5

Chng trnh MFC u tin To ng dng bng cch s dng MFC AppWizard Cc thnh phn ca chng trnh

Chng trnh MFC u tin tr

To ng dng bng MFC AppWizard

Visual Studio 6.0

6

Chng trnh MFC u tin tr

To ng dng bng MFC AppWizard

Visual Studio 2005

Chng trnh MFC u tin tr

To ng dng bng MFC AppWizard

Visual Studio 6.0

7

Chng trnh MFC u tin tr

To ng dng bng MFC AppWizard

Visual Studio 2005

Chng trnh MFC u tin tr

Cc thnh phn ca chng trnh Cc file chng trnh: (xxx l tn project) tr l xxx.h: header file ca file xxx.cpp, cha khai bo lp CxxxApp qun l ton b ng dng. Lp CxxxApp k tha t lp CWinApp ca MFC xxxDlg.h: header file ca file xxxDlg.cpp, cha khai bo lp CxxxDlg qun l ca s Dialog giao din ca ng dng. Lp CxxxDlg k tha t lp CDialog ca MFC Resource.h: header file, cha cc hng ID ca cc resource c nh ngha trong file xxx.rc xxxDlg.cpp: ci t cc hm thnh phn ca lp CxxxDlg xxx.cpp: ci t cc hm thnh phn ca lp CxxxApp xxx.rc: m t cc resource (ti nguyn) ca ng dng

8

Chng trnh MFC u tin tr

Cc thnh phn ca chng trnh

Visual Studio 6.0

Visual Studio 2005

Chng trnh MFC u tin tr

Cc thnh phn ca chng trnh CWinApp: lp chnh ca MFC qun l ng dng. Cha ng vng lp l ch c qu d Ch l nhn message v phn phi message n cc ca s ca ng dng nh v ph c c s d CDemoApp: lp k tha t lp CWinApp. l k th tclass CMFC01App : public CWinApp { public: CMFC01App(); // Overrides public: virtual BOOL InitInstance(); // Implementation DECLARE_MESSAGE_MAP() };

9

Chng trnh MFC u tin tr

Cc thnh phn ca chng trnh InitInstance(): hm khi to ng dng, override ln hm chun ca lp h kh t d h chu c l CWinApp BOOL CxxxApp::InitInstance() CxxxApp::InitInstance() { CDemoDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is dismissed with OK } else if (nResponse == IDCANCEL) { } // Since the dialog has been closed, return FALSE so that we exit the exit // application, rather than start the application's message pump. pump. return FALSE; FALSE; }

Chng trnh MFC u tin tr

Cc thnh phn ca chng trnh CWnd: lp chnh ca MFC qun l cc loi ca s giao din. C nhiu lp c k tha t lp ny qun l cc loi ca s khc nhau (CTreeCtrl, CListBox, CEdit,) CDialog k tha t lp CWnd, l lp c bn c dng hin th cc dialog trn mn hnh.

10

Chng trnh MFC u tin tr

Cc thnh phn ca chng trnh Mi dialog s c tng ng mt lp CxxxDlg k tha t CDialog. s m l k th tclass CMFC01Dlg : public CDialog { // Construction public: CMFC01Dlg(CWnd* pParent = NULL); // standard constructor // Dialog Data enum { IDD = IDD_MFC01_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: HICON m_hIcon; // Generated message map functions virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() };

Chng trnh MFC u tin tr

Cc thnh phn ca chng trnh Mt s hm ca lp CDemoDlg: OnInitDialog: Khi to cc gi tr cn thit cho dialog, c gi khi dialog sp c hin th. Hm x l cho thng ip WM_INITDIALOG

OnPaint: c gi khi cn cp nht ni dung cho dialog (v li mn hnh). Hm x l cho thng ip WM_PAINT.

11

Message Map Lm sao x l 1 thng ip ? MFC dng Message Map lin kt cc thng ip vi nhng hm thnh phn ca lp ca s.

Message Map Mi thng ip s c x l bi 1 hm thnh phn i s x b h th ph tng ngBEGIN_MESSAGE_MAP(CMFC01Dlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP END_MESSAGE_MAP()

ON_WM_PAINT l 1 macro c nh ngha trong l ngh Afxmsg_.h, mc nhin lin kt thng ip WM_PAINT vi m k i v hm OnPaint

12

X l thng ip Thm x l thng ip WM_LBUTTONDOWN x i B sung thm khai bo hm x l thng ip afx_msg void OnLButtonDown(UINT nFlags, CPoint point); B sung 1 macro trong khai bo message map ON_WM_LBUTTONDOWN() Vit hm thc thi OnLButtonDown

void CMFC01Dlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default MessageBox(_T("Nhan phim trai chuoi"), _T("Thong bao"), MB_OK); CDialog::OnLButtonDown(nFlags, point); }

X l thng ip S dng ClassWizard (Ctrl-W) (Ctrl Click chut phi, chn chu ph ch ClassWizard

Visual Studio 6.0

13

X l thng ip Chn phn Messages Ch ph trong hp thoi h tho Properties. Properties. Chn ng thng ip cn Ch i c x l.

Visual Studio 2005

X l mouse v keyboard X l mouse Thng ip ca mouse V d: V hnh bng mouse

X l keyboard Thng ip ca keyboard

14

X l mouse

Cc thng ip ca mouse WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK WM_RBUTTONDOWN WM_RBUTTONUP WM_RBUTTONDBLCLK WM_MOUSEMOVE WM_MOUSEWHEEL

X l mouse

Cc thng ip ca mouse Vi mi thng ip ca chut, Windows gi km 2 tham s wParam v lParam wParam: cho bit phm no ang c nhn (Ctrl, Shift) lParam: cho bit to hin ti LOWORD(lParam): ta x HIWORD(lParam): ta y

15

X l mouse

Cc thng ip ca mouseThng ip iWM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK WM_MBUTTONDOWN WM_MBUTTONUP WM_MBUTTONDBLCLK WM_RBUTTONDOWN WM_RBUTTONUP WM_RBUTTONDBLCLK WM_MOUSEMOVE

Message-Map Macro MessageON_WM_LBUTTONDOWN ON_WM_LBUTTONUP ON_WM_LBUTTONDBLCLK ON_WM_MBUTTONDOWN ON_WM_MBUTTONUP ON_WM_MBUTTONDBLCLK ON_WM_RBUTTONDOWN ON_WM_RBUTTONUP ON_WM_RBUTTONDBLCLK ON_WM_MOUSEMOVE

Hm x l thng ip x iOnLButtonDown OnLButtonUp OnLButtonDblClk OnMButtonDown OnMButtonUp OnMButtonDblClk OnRButtonDown OnRButtonUp OnRButtonDblClk OnMouseMove

X l mouse

Cc thng ip ca mouse Cc hm x l thng ip cho mouse c dng: afx_msg void OnMsgName (UINT nFlags, CPoint point) point: thuc lp CPoint, ch v tr ca tr chut. Gc to c xc nh theo gc tri trn ca ca s nFlags: trng thi ca cc phm chut v cc phm Ctrl, Alt.

16

X l mouse

Cc thng ip ca mouse S dng php ton & kim tra mt trng thi c tn ti khng V d: nFlags & MK_CONTROL khc 0 kim tra phm Ctrl c nhnGi tr Gi tr MK_LBUTTON MK_MBUTTON MK_RBUTTON MK_CONTROL MK_SHIFT ngha ngh Phm tri chut c nhn Ph tr chu nh Phm gia chut c nhn Ph gi chu nh Phm phi chut c nhn Ph ph chu nh Phm Ctrl c nhn Ph nh Phm Shift c nhn Ph nh

X l mouse

V d minh ha V d: V hnh bng mouse V b M t: khi ngi s dng nhn gi nt tri chut & di t khi ng s nh gi tr chu chuyn v 1 ng thng v th chuy

17

X l mouse

V d minh ha Cc x l cn thit: x c thi WM_LBUTTONDOWN : OnLButtonDown WM_MOUSEMOVE : OnMouseMove

Cc bc thc hin: b th hi nh ngha 2 bin m_PrevX, m_PrevY trong class CxxxDlg nh ngha hm x l message WM_LBUTTONDOWN trong class CxxxDlg nh ngha hm x l message WM_MOUSEMOVE trong class CxxxDlg

X l mouse

V d minh ha Vit code cho hm x l thng ip nhn tri chut Vi h x i nh tr chuvoid CMouseProcessingDlg::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or // call default m_PrevX = point.x; m_PrevY = point.y; CDialog::OnLButtonDown(nFlags, point); }

18

X l mouse

V d minh havoid CMouseProcessingDlg::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default //Chut ang di chuyn vi phm tri ang nhn //Chu chuy v ph tr nh if ((nFlags & MK_LBUTTON) == MK_LBUTTON) { // Ly ng cnh thit b v L ng thi b CClientDC dc(this); // V mt ng thng t im trc n im hin ti V th t i tr i hi t dc.MoveTo(m_PrevX, m_PrevY); dc.LineTo(point.x, point.y); // Lu im hin ti li i hi t l m_PrevX = point.x; m_PrevY = point.y; } CDialog::OnMouseMove(nFlags, point); }

X l mouse

V d minh ha Bin dch v chy th d v ch th

19

X l keyboard Thng ip ca keyboard i c WM_KEYDOWN / WM_KEYUP: pht sinh khi 1 phm (khng phi l phm h thng) c nhn xung/th ra Hm x l tng ng: CWnd::OnKeyDown, CWnd::OnKeyUp wParam: virtual-key code lParam: cha cc thng tin khc (s ln lp li phm, scan code, extended key,)

WM_CHAR: l kt qu pht sinh do message WM_KEYDOWN, bo hiu 1 k t in c (printed character) c to ra Hm x l tng ng: CWnd::OnChar wParam: m k t lParam: cha cc thng tin khc (s ln lp li do nhn gi phm, c phm Alt nhn km,)

X l keyboard Cc hm x l thng ip lin quan n bn phm c dng: afx_msg void OnMsgName (UINT nChar, UINT nRepCnt, UINT nFlags) nChar: m phm o c nhn hoc th nRepCnt: s ln nhn/th phm tng ng nFlags: c lin quan (xem thm trong MSDN)

20

X l keyboard M phm oM phm o ph VK_F1,,VK_F12 VK_F1, VK_NUMPAD0,,VK_NUMPAD9 VK_NUMPAD0, VK_CANCEL VK_RETURN VK_BACK VK_TAB VK_CLEAR VK_SHIFT VK_CONTROL VK_MENU VK_PAUSE VK_ESCAPE Phm tng ng Ph Phm chc nng F1_F12 Ph ch F1_F12 Phm s 0,.., 9 (Numlock c bt) Ph s 0,.., (Numlock b Ctrl-Break CtrlEnter Backspace Tab Phm s 5 (Num Lock tt) Ph s t Shift Ctrl Alt Pause Esc

X l keyboard M phm oM phm o ph VK_SPACE VK_PRIOR VK_NEXT VK_END VK_HOME VK_LEFT VK_UP VK_RIGHT VK_DOWN VK_SNAPSHOT VK_INSERT VK_DELETE Spacebar Page Up v PgUp v Page Down v PgDn v End Home Left arrow Up arrow Right arrow Down arrow Print Screen Insert v Ins v Delete v Del v Phm tng ng Ph

21

X l keyboard M phm oM phm o ph VK_MULTIPLY VK_ADD VK_SUBTRACT VK_DECIMAL VK_DIVIDE VK_CAPITAL VK_NUMLOCK VK_SCROLL VK_LWIN VK_RWIN VK_APPS Phm tng ng Ph Phm * (bn phi) Ph ph Phm + (bn phi) Ph ph Phm (bn phi) Ph ph Phm . (bn phi) Ph ph Phm / (bn phi) Ph ph Caps Lock Num Lock Scroll Lock Phm Windows (tri) Ph (tr Phm Windows (phi) Ph (ph Phm Menu Ph

X l keyboard Cc phm A-Z, a-z, 0-9 c m phm o mang gi tr ANSI ca phm. 0x41 0x5A : A-Z 0x61 0x7A : a-z 0x30 0x39 : 0-9

22

X l keyboard Ly trng thi cc phm Ctrl, Shift, Num Lock, CapsLock, tr th c ph Scroll Lock Cc trng thi ny khng c gi km vi thng ip bn phm S dng hm ::GetKeyState ly trng thi V d: ::GetKeyState (VK_SHIFT) ::GetKeyState (VK_CONTROL) if ((nChar == VK_LEFT) && (::GetKeyState (VK_CONTROL) < 0)) { } ::GetKeyState (VK_NUMLOCK) & 0x01

Mt s lp thng gp Lp CWnd Lp CString

23

Lp CWnd

Gii thiu y l mt lp tng qut v gp rt nhiu ln trong qu trnh lm vic trn dialog ni ring v trn cc ng dng MFC ni chung. Lp CWnd cung cp cc chc nng c bn cho tt c cc lp ca s (cc control, mainframe, view, dialog) trong th vin MFC.

Lp CWnd

Cc hm c bn ca lp CWnd GetDlgItem EnableWindow GetFocus SetFocus GetClientRect MoveWindow GetDlgCtrlID GetDlgItemInt GetDlgItemText SetDlgItemText GetWindowText SetWindowText

24

Cc hm c bn ca lp CWnd h b c l

Hm CWnd::GetDlgItem CWnd* GetDlgItem(int nID ) const; Tr v con tr CWnd* ca mt ca s con trn 1 dialog. V d :CWnd *pWnd; pWnd = this->GetDlgItem(IDC_EDIT1);

Cc hm c bn ca lp CWnd h b c l

Hm CWnd::EnableWindowBOOL EnableWindow(BOOL bEnable = TRUE ); Lm cho ca s c th/khng th b tc ng bi chut/bn phm V d:CWnd* pWnd = this->GetDlgItem(edt1); pWnd->EnableWindow(FALSE); pWnd = this->GetDlgItem(stc3); pWnd->EnableWindow(TRUE);

25

Cc hm c bn ca lp CWnd h b c l

Hm CWnd::GetFocus static CWnd* PASCAL GetFocus( ); Tr v con tr CWnd ca control ang c nhn tc ng. V d:CWnd* pWnd; pWnd = this->GetFocus();

Cc hm c bn ca lp CWnd h b c l

Hm CWnd::SetFocusCWnd* SetFocus( ); t focus cho mt i tng ca s. Tr v con tr CWnd* ca ca s nhn focus trc . V d:CWnd* pWnd; pWnd = GetDlgItem(IDC_EDIT1); pWnd->SetFocus();

26

Cc hm c bn ca lp CWnd h b c l

Hm CWnd::GetClientRect void GetClientRect (LPRECT lpRect) const; Xc nh to ca hnh ch nht bao quanh ca s. V d :CRect rect; pWnd->GetClientRect(&rect); RECT rect; pWnd->GetClientRect(&rect);

Cc hm c bn ca lp CWnd h b c l

Hm CWnd::MoveWindow void MoveWindow(int x, int y, int nWidth,int nHeight, BOOL bRepaint bRepaint = TRUE ); void MoveWindow(LPCRECT lpRect,BOOL bRepaint = TRUE); Dch chuyn, thay i kch c mt ca s V d :this->MoveWindow(100,100,400,400); CRect rect; rect.top = 100; rect.left = 100; rect.right = 500; rect.bottom = 500; this->MoveWindow(&rect);

27

Cc hm c bn ca lp CWnd h b c l

Hm CWnd::GetDlgCtrlID int GetDlgCtrlID( ) const; Xc nh ID ca mt control trn dialog. V d:int ID; ID = pWnd->GetDlgCtrlID();

Cc hm c bn ca lp CWnd h b c l

Hm CWnd::GetDlgItemTextint GetDlgItemText(int nID, LPTSTR lpStr, int nMaxCount) const; int GetDlgItemText(int nID, CString& rString) const; Ly chui ni dung ca 1 control. V d : Ly chui ni dung ca control c ID l IDC_EDIT1 trn dialog.CString str; this->GetDlgItemText(IDC_EDIT1, str); // str s mang ni dung ca IDC_EDIT1

28

Cc hm c bn ca lp CWnd h b c l

Hm CWnd::SetDlgItemText void SetDlgItemText (int nID, LPCTSTR lpszString); t chui ni dung cho mt control trn dialog.

Cc hm c bn ca lp CWnd h b c l

Hm CWnd::GetWindowText int GetWindowText ( LPTSTR lpszStringBuf, int nMaxCount ) const; void GetWindowText(CString& rString) const; Ly chui ni dung cho mt i tng ca s V d : Ly ni dung cho i tng ca s c ID l IDC_TEXT CWnd * pWnd; CString str; pWnd = GetDlgItem(IDC_TEXT); pWnd->GetWindowText(str);

29

Cc hm c bn ca lp CWnd h b c l

Hm CWnd::SetWindowText void SetWindowText(LPCTSTR lpszString ); Thit lp chui ni dung cho mt i tng ca s V d : t chui ni dung cho i tng ca s c ID l IDC_TEXTCWnd * pWnd; CString str; pWnd = GetDlgItem(IDC_TEXT); pWnd->SetWindowText(_T(Hi ! Hello));

Lp CString

Gii thiu CString l lp chui c bn trong MFC tng t nh char * trong C/C++ nhng t ng qun l kch thc v cp pht vng nh.

30

Lp CString

Cc thao tc c bn Php gn: operator =, += Cng chui: operator + So snh: operator ==, =, , != Truy xut phn t: operator [], hm GetAt(), hm SetAt()

Lp CString

Cc thao tc khc Empty, IsEmpty Format Find, ReverseFind GetLength Left, Right, Mid TrimLeft, TrimRight MakeLower, MakeUpper, MakeReverse Delete Replace

31

Cc hm c bn ca lp CString h b c l

Php gn, php cng chui Php gn: operator =, += Cng chui: operator + V d:CString str, strNew; str = _T("Hello); str += _T(", world!); strNew = str + _T(" Nice to meet you");

Cc hm c bn ca lp CString h b c l

Cc thao tc so snh So snh: operator ==, =, , != V d:CString s1( _T("Tom") ); CString s2( _T("Jerry") ); if( s1 < s2 ) { ... }

32

Cc hm c bn ca lp CString h b c l

Truy xut phn t Truy xut phn t: operator [], hm CString::GetAt(), hm CString::SetAt() V d:CString str; str = _T("Xin chao cac ban"); str.SetAt(1, str[3]); //str : X n chao cac ban

Cc hm c bn ca lp CString h b c l

Chui rng Hm CString::Empty: to mt chui rng t m chu r Hm CString::IsEmpty: kim tra xem mt chui c rng ki m chu c khng V d :CString str;. str = _T("Hello"); str.Empty(); if (str.IsEmpty()) { }

33

Cc hm c bn ca lp CString h b c l

nh dng chui Tng t hm sprintf ca C Dng nh dng chui theo mong mun. V d:int X, Y; CString str, str1; str1 = _T("Ban vua nhan tai toa do") ; X = 100; Y = 200; str.Format(_T("%s %d, %d"), str1, X, Y);

Cc hm c bn ca lp CString h b c l

Tm kim CString::Find Tm kim v tr xut hin chui con trong chui cho V d:int result; CString s = _T("This is an example"); result = s.Find('i'); //kiem tu dau chuoi, result = 2 result = s.Find('i',3); // kiem tu vi tri thu 3, result = 5 result = s.Find(_T("is")); // kiem tu dau chuoi, result =2

34

Cc hm c bn ca lp CString h b c l

Tm kim CString::ReverseFind Tm kim v tr xut hin cui cng ca k t trong chui V d:int result; CString s = _T("This is an example"); result = s.ReverseFind('i'); //kiem tu nguoc lai, result = 5 result = s.ReverseFind('a');

Cc hm c bn ca lp CString h b c l

Xc nh chiu di chui CString::GetLength(): Ly chiu di ca chui cho V d:int result; CString s = _T"This is an example"); result = s.GetLength();// result = 18

35

Cc hm c bn ca lp CString h b c l

Cc hm tch chuiCString CString::Left(int nCount) CString CString::Right(int nCount) CString CString::Mid(int Start, int nCount) V d:CString s = _T("Hello, how are you"); CString strL, strMid, strR; strL = s.Left(5); strMid = s.Mid(7,3); strR = s.Right(3);

Cc hm c bn ca lp CString h b c l

Loi b cc k t u, cui chui Hm CString::TrimLeft: loi b cc k t u chui Hm CString::TrimRight: loi b cc k t cui chui V d:CString str; str = _T(" HHHHello, how are you str.TrimLeft(); str.TrimRight(); str.TrimLeft('H'); ");

36

Cc hm c bn ca lp CString h b c l

Thay i ni dung chui CString::MakeLower: in thng cc k t trong chui CString::MakeUpper: VIT HOA cc k t trong chui CString::MakeReverse: o chui theo chiu ngc li V d:CString s = _T("Hello, how are you"); s.MakeUpper();//HELLO, HOW ARE YOU s.MakeLower();//hello, how are you s.MakeReverse();//uoy era woh ,olleh

Cc hm c bn ca lp CString h b c l

Xo mt phn chui CString::Delete: Xo mt phn chui V d:CString str; str = _T("Hello, how are you? "); str.Delete(5,1);

37

Cc hm c bn ca lp CString h b c l

Thay th mt chui con CString::Replace : Thay th mt chui con bng mt chui con khc V d:CString str; str = _T("Alibaba"); str.Replace(_T("ba"), _T("ab"));

Cc control Gii thiu Phn loi S dng control V d minh ho

38

Cc control

Gii thiu Phin bn hin hnh ca Windows c khong 20 loi control. 6 trong s gi l classic control (nhng control c t phin bn u tin ca Windows). Cha trong User.exe Cc control cn li gi l common control. Hu ht xut hin t Windows 95. Cha trong comctl32.dll.

Cc control

Gii thiu Picture control Static Text Text box Group Box Button Checkbox Radio Button Combo Box List Box Scrollbar Spin Progressbar Slider Tree Control Tab Control Animate Rich Edit Date Time Month Calendar IP Address

39

Cc control

Classic control Classic control: Button List box Editbox Combo box Scroll bar Static box

Cc control

Classic controlLoi button Lo Button List box Edit control Combo box Scroll bar Static control WNDCLASS "BUTTON" "LISTBOX" "EDIT" "COMBOBOX" "SCROLLBAR" "STATIC" Lp MFC CButton CListBox CEdit CComboBox CScrollBar CStatic

40

Cc control

S dng control - V d minh ho Cc hm cn quan tm ca CListBox: GetCount GetCurSel, SetCurSel AddString DeleteString GetText, GetTextLen FindString, FindStringExact InsertString ResetContent

Cc control

S dng control - V d minh ho Cc hm cn quan tm ca CComboBox: GetCount GetCurSel, SetCurSel AddString, DeleteString GetLBText , GetLBTextLen FindString, FindStringExact InsertString ResetContent

41

Cc control

S dng control - V d minh ho Ly v tr c chn ca mt ListBox c ID l IDC_DANHSACHCListBox *pListBox; int nSelected; pListBox = (CListBox*) GetDlgItem (IDC_DANHSACH); nSelected = pListBox->GetCurSel();

Cc dialog thng gp Nguyn nhn ra i Cc loi dialog thng gp S dng bng th vin MFC V d minh ho

42

Cc dialog thng gp th g

Nguyn nhn ra i Trc Windows 3.1, lp trnh vin phi t vit cc dialog Tr l tr ph t vi c m hoc lu file (cho php ngi dng chn ng dn ho ph ng d ch d file)=> Khng nht qun gia cc ng dng

T Windows 3.1, Windows xy dng cc dialog thng d c th s dng v cha trong mt DLL. v ch m Windows 95 b sung thm dialog Page Setup. b Windows 98, Windows 2000 b sung thm nhiu tnh b nhi t nng cho cc dialog trn. c

Cc dialog thng gp th g

Lit k chi tit Open / Save As dialog Print / Print Setup dialog Page Setup dialog Find and Replace dialog Color dialog Font dialog

43

Cc dialog thng gp th g

Open Save As dialog

Cc dialog thng gp th g

Print v Print setup dialog

44

Cc dialog thng gp th g

Page Setup Dialog

Cc dialog thng gp th g

Find and Replace dialog

45

Cc dialog thng gp th g

Color dialog

Cc dialog thng gp th g

Font dialog

46

Cc dialog thng gp th g

S dng bng th vin MFCL p CFileDialog CPrintDialog CPageSetupDialog CFindReplaceDialog CColorDialog CFontDialog Loi dialog Lo Hp thoi Open hoc Save As tho ho Hp thoi Print hoc Print Setup tho ho Hp thoi Page Setup tho Hp thoi Find and Replace tho Hp thoi Color (chn mu) tho (ch m Hp thoi Font (chn font) tho (ch

Cc dialog thng gp th g

S dng bng th vin MFC Nguyn tc gi cc dialog thng gp (tr dialog Find and Replace): To i tng thuc lp dialog quan tm (cung cp cc thng tin c bn theo qui nh) Gi hm DoModal() hin th Ly cc gi tr quan tm t i tng khai bo

47

V d minh ho ho

Open/Save As dialog Constructor ca lp CFileDialogCFileDialog::CFileDialog ( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL, DWORD dwSize = 0);

V d:CFileDialog dlg(TRUE, _T(""), _T("AAA"), OFN HIDEREADONLY |

V d minh ho ho

Open/Save As dialog Cc hm cn quan tm ca lp CFileDialog: GetFileExt: ly phn m rng ca tp tin c chn GetFileName: ly tn tp tin c chn GetFileTitle: ly phn tn (khng c phn m rng) ca tp tin c chn GetFolderPath: ly th mc ca tp tin c chn GetPathName: ly ng dn ca tp tin c chn

48

Cc dialog thng gp th g

V d minh ho Hin th Open Dialog chn file

V d minh ho ho

Open/Save As dialog Vit hm x l s kin nhn vo nt Browsevoid CFileDialogDemoDlg::OnBrowse() { // TODO: Add your control notification handler code //here CFileDialog dlg (TRUE, _T(""), _T("AAA"), OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT, _T("Text files|*.txt|All files|*.*||")); if (dlg.DoModal() == IDOK) { MessageBox(dlg.GetFileName()); }

49

X l menu Mt vi khi nim v kh ni To lp menu l Np v hin th menu v hi th X l khi menu item c chn ch Thay i trng thi menu tr th V d

X l menu

Mt vi khi nim Menu bar: thanh menu. Bao gm nhiu drop-down menu v menu g nhi dropv item Drop-down menu: mt phn ca menu bar, cha cc menu item hoc Dropm ph c ch c ho cc drop-down menu khc. dropkh VD. File, Edit,

Menu item: tng ng vi 1 lnh ca chng trnh. Mi menu item v l c tr M c xc nh bng 1 s nguyn phn bit, gi l item ID hay x b s bi g l command ID. VD. Open, Save,

Popup menu: ging nh drop-down menu, nhng c th xut hin gi dropnhng c th xu hi v tr bt k trn mn hnh (thng khi nhn nt phi mouse) tr k m h (th nh n ph System menu: cha cc lnh h thng iu khin ca s. ch c l h th i khi c s VD. Minimize, Maximize, Close,

50

X l menu

Mt vi khi nim V d v menubar, drop-down menu, menu item

X l menu

Mt vi khi nim Xc lp i tng menu trong cc hm x l BYCOMMAND Ch nh menuitem thng qua ID ca chng

BYPOSITION Ch nh menu (item & popup) thng qua v tr (gn cha nht, bt u bng ch s 0)

51

X l menu

To lp menu Thng c 2 cch chnh to menu: To menu dng resource ca ng dng, v load vo khi chy To trc tip bng cc hm khi ng dng ang chy. Lp s dng qun l menu: CMenu Cc hm thnh phn: CreateMenu, InsertMenu,

X l menu

To lp menu To lp menu trong ti nguyn l t IDC_DEMOWIN32 MENU DISCARDABLE BEGIN POPUP "&File" BEGIN MENUITEM "E&xit", IDM_EXIT END POPUP "&Help" BEGIN MENUITEM "&About ...", IDM_ABOUT END END

52

X l menu

To lp menu To lp menu bng editor l b c trong mi trng lp tr l trnh. tr

X l menu

Np v hin th menu Xc nh menu bar khi to ca s: t c sCreate(NULL, _T("My Application"), WS_OVERLAPPEDWINDOW, rectDefault, NULL, MAKEINTRESOURCE(IDR_MAINFRAME));

Thay i menu bar: CMenu menu; menu.LoadMenu(IDR_MAINFRAME); SetMenu(&menu); menu.Detach();

53

X l menu

Np v hin th menu Lp CMenu Theo tc trn menu: DeleteMenu: Xo mt i tng trn menu TrackPopupMenu: hin th menu popup ni

Thao tc trn cc menuitem: AppendMenu: thm vo cui menu mt menuitem. InsertMenu: thm mt i tng menu ti mt v tr xc nh ModifyMenu: chnh sa mt i tng menu xc nh.

X l menu

Np v hin th menu Lp CMenu Thao tc trn cc menuitem CheckMenuItem: thm/b du check pha trc mt menuitem CheckMenuRadioItem: check mt menuitem trong mt nhm cc menuitem EnableMenuItem: thit lp menuitem cc trng thi enable (MF_ENABLED), disable (MF_DISABLED), gray(MF_GRAYED). GetMenuItemCount: ly s lng menuitem trong mt menu

54

X l menu

X l khi menu item c chn Cc thng ip ca menu X l lnh ca menu item Nhm lnh (Command range)

X l khi menu item c chn ch

Cc thng ip ca menu WM_MENUSELECT: pht sinh khi user tc ng ln ph t menu. Thng ip ny c th dng cp nht trng thi Thng i n c th nh tr th ca menu (trng hp menu thay i theo ng cnh (tr h ng Context-sensitive Menu) Context Hm x l tng ng: CWnd::OnMenuSelect wParam: LOWORD(wParam): ID ca menu item hoc index ca menu popup HIWORD(wParam): cc thng tin khc (trng thi menu, loi menu, ). MF_POPUP; MF_CHECKED; MF_DISABLED, MF_GRAYED; MF_SEPARATOR; MF_SYSMENU,

lParam: handle ca menu

55

X l khi menu item c chn ch

Cc thng ip ca menu WM_COMMAND: pht sinh khi user chn 1 menu item ph ch Hm x l tng ng: CWnd::OnCommand wParam: LOWORD(wParam): ID ca menu item hoc ca control HIWORD(wParam): ngun gc pht sinh, 1 nu sinh ra do 1 phm tt; 0 nu chn trc tip t menu lParam: NULL nu message ny pht sinh t menu Nu message pht sinh t 1 control, lParam s cha handle ca control

X l khi menu item c chn ch

Cc thng ip ca menu X l lnh ca menu item Da trn message WM_COMMAND nh ngha message map ON_COMMAND(IDM_ABOUT, OnAbout) ON_COMMAND(IDM_EXIT, OnExit)

56

Vit hm x lvoid CDialogDemoDlg::OnAbout() { // TODO: Add your command handler code here MessageBox(_T("Hello! World")); }

X l khi menu item c chn ch

Cc thng ip ca menu To pop-up menu S dng ClassWizard thm x l cho thng ip WM_CONTEXTMENU Hm x l CWnd::OnContextMenu Hin th mt menu pop-up niBOOL CMenu::TrackPopupMenu(UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect=0); nFlags: c v tr trn mn hnh (TPM_CENTERALIGN , TPM_LEFTALIGN , TPM_RIGHTALIGN), c ch phm nhn ca chut (TPM_LEFTBUTTON, TPM_RIGHTBUTTON)

57

X l khi menu item c chn ch

Cc thng ip ca menu To pop-up menu pop Vit hm x l void CDialogDemoDlg::OnContextMenu(CWnd* pWnd, CPoint point) { // TODO: Add your message handler code here CMenu menu; menu.LoadMenu(IDR_MENU1); menu.GetSubMenu(1)-> TrackPopupMenu (TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); }

X l khi menu item c chn ch

Thay i trng thi menu Cc v d: Khi user chn chc nng v Circle cn th hin 1 du check ( ) pha trc Chc nng Cut/Copy/Delete ch c kch hot khi user nh du chn 1 on text Chc nng Paste ch c kch hot khi clipboard khc rng ...

58

X l khi menu item c chn ch

Thay i trng thi menu Cch x l:void CDialogDemoDlg::OnHelpTest2() { // TODO: Add your command handler code here CMenu *pMenu; pMenu = GetMenu(); pMenu->CheckMenuItem(ID_HELP_TEST2, MF_CHECKED | MF_BYCOMMAND); MessageBox(_T("Hello! Test 2")); }

X l khi menu item c chn ch

Nhm lnh L 1 nhm menu item hot ng theo nguyn tc Ch c nh ho t Ch 1 phn t c chn ti 1 thi im ph t ch t th i VD. Chc nng v hnh Line / Circle / Rectangle

Cch thc x l ? th x Cch 1: map tt c x l ca cc menu item ny vo chung 1 hm x l Cch 2: dng macro ON_COMMAND_RANGE

59

X l khi menu item c chn ch

Nhm lnh Cch 1: map tt c x l ca cc menu item ny vo t c c c n v chung 1 hm x l h x// nh ngha Message map ON_COMMAND (ID_DRAW_LINE, Draw) ON_COMMAND (ID_DRAW_CIRCLE, Draw) ON_COMMAND (ID_DRAW_RECTANGLE, Draw) // Hm x l chung, xc nh item hin hnh void CAAADlg::Draw () { m_nCurrentDraw = (UINT) LOWORD ( GetCurrentMessage()-> wParam); }

X l khi menu item c chn ch

Nhm lnh Cch 2: dng macro ON_COMMAND_RANGE d Lu : cc ID t trong macro ny phi c gi tr lin tc // nh ngha Message map ON_COMMAND_RANGE (ID_DRAW_LINE, ID_DRAW_RECTANGLE, Draw) // Hm x l chung, xc nh item hin hnh void CAAADlg::Draw (UINT nID) { m_nCurrentDraw = nID; }

60

X l menu

V d minh ho To ng dng bng MFC d b AppWizard dng SDI d (Single Document) B check Document/View architecture support? support?

X l menu

V d minh ho

61

X l menu

V d minh ho X l lnh ca menu item Thm vo cc menu item cho popup menu File: New, Open, Save

X l menu

V d minh hovoid CMainFrame::OnFileNew() { // TODO: Add your command handler code here MessageBox(_T("Ban nhan vao menu New"), _T("Thong bao")); } void CMainFrame::OnFileOpen() { // TODO: Add your command handler code here MessageBox(_T("Ban nhan vao menu Open"), _T("Thong bao")); } void CMainFrame::OnFileSave() { // TODO: Add your command handler code here MessageBox(_T("Ban nhan vao menu Save"), _T("Thong bao")); }

62

X l menu

V d minh ho X l nhm lnh To mt menu pop-up mi (New Menu) Thm cc menu item (Menu 1, Menu 2, Menu 3, Menu 4) Ngi dng nhn chn mt menu s nhn c mt thng bo: Ban vua nhan menu thu

X l menu

V d minh ho X l nhm lnh Thm vo message map: ON_COMMAND_RANGE(IDM_MENU1, IDM_MENU4, OnMenu) Vit x l cho hm OnMenu: void CMainFrame::OnMenu(UINT nID) { CString str; str.Format(_T("Ban vua nhan vao menu thu %d"), nID - IDM_MENU1 + 1); MessageBox(str,_T("Dung nhom lenh")); }

63

X l menu

V d minh ho To context-menu: context Hin th menu popup Edit Vit hm x l: void CMainFrame::OnContextMenu (CWnd* pWnd, CPoint point) { // TODO: Add your message handler code here CMenu *pMenu; pMenu = GetMenu(); (pMenu->GetSubMenu(1))->TrackPopupMenu (TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); }

X l menu

V d minh ho

64

X l menu

V d minh ho To lp menu cho dialog: To mt ti nguyn menu cho ng dng Chn menu cn gn vo dialog trong hp thoi Dialog Properties.

X l menu

V d minh ho

65

HT CM NGII P THC MC

66