Cửa sổ làm việc (Window) - Nguyễn Viết Nam

pdf 62 trang phuongnguyen 2410
Bạn đang xem 20 trang mẫu của tài liệu "Cửa sổ làm việc (Window) - Nguyễn Viết Nam", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfcua_so_lam_viec_window_nguyen_viet_nam.pdf

Nội dung text: Cửa sổ làm việc (Window) - Nguyễn Viết Nam

  1. 1. Cài đặt (Setup) 1.1. Visual C++ 6.0 2. Cửa sổ làm việc (Window) 2.1. Khởi động-Open,Thoát-Exit Giới thiệu - Là 1 trình biên dịch, giúp người lập trình viên viết ra các chương trình ứng dụng trên Windows Khởi động- - Click chọn nút nút > chọn > chọn Microsoft Visual Studio 6.0 > chọn Microsoft Open Visual C++ 6.0 . Thoát-Exit 2.2. Giao diện (Interface) Thanh trình đơn-Menu bar Thanh công cụ-Tool bar * Thanh công cụ Chuẩn-Standard * Thanh công cụ WizardBar: Hiển thị các lớp đang sử dụng và các hàm đang sử dụng trong lớp đó. * Thanh công cụ Build MiniBar: Biên dịch và chạy chương trình. * Thanh công cụ Điều khiển-Control Toolbar: Thiết kế giao diện chương trình. * Khung panel Vùng làm việc-Workspace - Thẻ : Hiển thị dạng cây các lớp, hàm, biến sử dụng trong chương trình. + Lớp-Class . + Hàm-Function . + Biến-Variable . - Thẻ : Hiển thị các thành phần của chương trình: + Dialog: Cửa sổ hộp thoại. + Icon: Biểu tượng. + Menu: Thanh trình đơn. + Toolbar: Thanh công cụ. + String Table: Bảng chuỗi. + Accelerator: Phím tắt. + Version: Phiên bản. - Thẻ : Hiển thị dạng cây các file chương trình: + Resource Files: File mã nguồn chương trình. + Header Files: File hỗ trợ biên dịch chương trình. + Resource Files: File tài nguyên chương trình. 1 GV: Nguyễn Viết Nam Mở ứng dụng đã lưu-Open
  2. * Khung panel Thông báo-Output: Thông báo kết quả khi biên dịch và chạy chương trình. Ấn phím Alt + 2 * Vùng soạn thảo: Thiết kế giao diện và viết mã chương trình. Vùng làm việc- Workspace 3. Dự án (Project) - DPW Khởi động-Open Tạo 1 ứng dụng mới, dùng tên tạm-New Lưu ứng dụng-Save Viết chương trình-Coding Chạy chương trình-Compile Viết chương trình tiếp-Coding next Cập nhật ứng dụng-Save Lưu 1 bản sao của ứng dụng-Save as Đóng-Close Mở ứng dụng đã lưu-Open Tạo mới-New * Mở hộp thoại New: Click chọn menu > chọn New. Ấn phím Ctrl + N. - Sau đó xuất hiện hộp thoại New: * Ứng dụng Windows: - Chọn thẻ > chọn mục ở khung danh sách. - Nhập tên ứng dụng vào hộp . - Chọn vị trí lưu ở hộp . - Chọn nút . - Chọn: + Hộp : Để tạo ứng dụng dạng tài liệu đơn. + Hộp : Để tạo ứng dụng dạng tài liệu đa. 2 GV: Nguyễn Viết Nam
  3. + Hộp : Để tạo ứng dụng dạng hộp thoại. - Chọn nút . - Chọn nút . - Khi đó VC++ 6.0 tạo ra: + Ứng dụng tài liệu đơn: + Ứng dụng tài liệu đa: 3 GV: Nguyễn Viết Nam
  4. +Ứng dụng hộp thoại: - Trong đó: + Các file vùng làm việc *.dsw (workspace) và dự án *.dsp (project) . + Các file mã nguồn chương trình *.cpp và StdAfx.cpp . + Các file hỗ trợ biên dịch StdAfx.h , *.pch. + File tài nguyên chương trình *.rc . + File thông tin lớp *.clw. + Thư mục chương trình biên dịch Debug. + Thư mục tài nguyên res. * Ứng dụng Dòng lệnh-Console: C1: Chọn thẻ > chọn mục > chọn hộp > khi đó VC6 tạo ra: + Các file vùng làm việc *.dsw (workspace) và dự án *.dsp (project) . + Các file mã nguồn chương trình *.cpp và StdAfx.cpp . + Các file hỗ trợ biên dịch StdAfx.h , *.pch. + Thư mục chương trình biên dịch Debug. C2: Chọn thẻ > chọn mục . 4 GV: Nguyễn Viết Nam
  5. * Cập nhật ứng dụng: C1: Click chọn menu > chọn Save Workspace. Lưu trữ-Save C2: Click chọn menu > chọn Save All. * Cập nhật file mã nguồn: Click chọn menu > chọn Save. Ấn phím Ctrl + S. Biên dịch-Compile Chạy-Run Biên dịch,Chạy-Compile,Run Chạy từng bước-Debug * Biên dịch-Compile: C1: Click chọn nút Build . Chạy chương trình-Compile C2: Click chọn menu > chọn Build hay Rebuild All. Ấn phím F7. * Chạy-Run: C1: Click chọn nút Execute Program . C2: Click chọn menu > chọn Execute. Ấn phím Ctrl + F5. * Đóng ứng dụng: Đóng-Close Click chọn menu > chọn Close Workspace. * Mở hộp thoại Open: C1: Click chọn nút Open . C2: Click chọn menu > chọn Open. Ấn phím Ctrl + O. - Sau đó xuất hiện hộp thoại Open: Mở-Open - Chọn mục Workspace (*.dsw, *.mdp) ở hộp . - Chọn vị trí lưu ứng dụng cần mở ở hộp . - Chọn tên ứng dụng cần mở ở khung danh sách bên dưới rồi chọn . 4. Giao diện (Interface) 4.1. Trình đơn-Menu (CWnd,CMenu) Thiết kế-Design Tạo-Create Vẽ-Draw Tài liệu đơn, đa (Single, Multiple - Có sẵn menu là . Document) Hộp thoại (Dialog) - Mở hộp thoại hộp thoại Insert Resource: Click chọn menu > chọn Resource. Ấn phím Ctrl + R. - Sau đó xuất hiện hộp thoại Insert Resource: 5 GV: Nguyễn Viết Nam
  6. - Chọn mục ở khung danh sách Resource Type > chọn nút . - Khi đó xuất hiện menu mới là trong khung Workspace ở thẻ Resource View. Viết mã-Coding Trình đơn ngữ cảnh- - Giống Menu. Context Menu Gán Thuộc tính- Assign Properties * Nhập menu: - Double Click lên menu là trong khung Workspace ở thẻ . - Click chuột phải lên vùng trống của menu > chọn Properties. - Sau đó xuất hiện hộp thoại Menu Properties của menu như hình sau: + Nhập tên định danh của menu ở hộp . - Chọn vùng và nhập menu. - Sau đó xuất hiện hộp thoại Menu Item Properties của menu như hình sau: Thiết kế- Design + Nhập nhãn hiển thị của menu ở hộp . VD: Tap tin. - Tiếp theo chọn vùng bên cạnh để nhập menu cùng cấp hay menu con. + Chọn hộp nếu muốn tạo đường ngăn cách các mục menu. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. * Kết nối menu với hộp thoại (Dialog): Tài liệu đơn, đa (Single, Multiple - Menu đã kết nối sẵn. Document) - Click chuột phải lên Hộp thoại-Dialog > chọn Properties > chọn tên định danh Hộp thoại (Dialog) của menu ở hộp . VD: IDR_MENU. - Lưu ý: tên định danh của từng menu được tạo tự động theo cú pháp ID_TênMenu_TênMenuCon. Viết mã- Coding Trình đơn ngữ cảnh- - Giống Menu. Context Menu 6 GV: Nguyễn Viết Nam
  7. Lập trình-Progarmming Khai báo biến- Variable Declaration - Double Click lên menu là trong khung Workspace ở thẻ . - Click chuột phải lên menu > chọn ClassWizard. Tài liệu đơn, đa (Single, Multiple - Đã có sẵn. Document) - Xuất hiện hộp thoại Adding a Class: Hộp thoại (Dialog) - Chọn hộp > chọn OK. - Chọn lớp Dlg (ví dụ Cbai1Dlg) trong khung . - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: - Chọn lớp View (ví dụ Cbai1View) ở hộp . Chèn Thông điệp- Add Message Tài liệu đơn, đa (Single, Multiple Document) Hộp thoại (Dialog) - Chọn tên định danh của menu ở khung Object IDs > chọn thông điệp ở khung Messages: 7 GV: Nguyễn Viết Nam
  8. Thông điệp Ý nghĩa sự kiện COMMAND Nhấp chuột UPDATE_COMMAND_UI Cập nhật menu - Chọn nút > sau đó xuất hiện hộp thoại Add Member Fucntion. + Đặt tên hàm cho hộp nhập liệu ở hộp . Các trường hợp đặt tên hàm: Thông điệp Tên hàm Ví dụ COMMAND OnMenuMenuCon OnTaptinMo UPDATE_COMMAND_UI OnUpdateMenuMenuCon OnUpdateTaptinMo - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: Thông điệp Mã void CTen_Ung_DungDlg::OnMenuMenuCon() { COMMAND // TODO: Add your control notification handler code here } void CTen_Ung_DungView::OnUpdateMenuMenuCon(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here UPDATE_COMMAND_UI if( ) pCmdUI->SetCheck(1); else pCmdUI->SetCheck(0); } - Mở hộp thoại MFC ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: Trình đơn ngữ cảnh- Context Menu - Chọn tên định danh của Hộp thoại-Dialog ở khung Object IDs > chọn thông điệp ở khung Messages: Thông điệp Ý nghĩa sự kiện WM_CONTEXTMENU Nhấp chuột phải lên Dialog - Chọn nút . - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: void CTen_Ung_DungDlg::OnContextMenu(CWnd* pWnd, CPoint point) { // TODO: Add your message handler code here } Viết mã-Coding Lập trình- - Ví dụ-Example: 8 GV: Nguyễn Viết Nam
  9. Progarmming void CMenuDlg::OnPheptinhCong() { // TODO: Add your command handler code here UpdateData(TRUE); m_c = m_a + m_b; UpdateData(FALSE); checkPT(MNU_CONG); } void CMenuDlg::OnPheptinhTru() { // TODO: Add your command handler code here UpdateData(TRUE); m_c = m_a - m_b; UpdateData(FALSE); checkPT(MNU_TRU); } void CMenuDlg::OnPheptinhNhan() { // TODO: Add your command handler code here UpdateData(TRUE); m_c = m_a * m_b; UpdateData(FALSE); checkPT(MNU_NHAN); } void CMenuDlg::OnPheptinhChia() { // TODO: Add your command handler code here UpdateData(TRUE); if(m_b!=0) { m_c = m_a / m_b; UpdateData(FALSE); checkPT(MNU_CHIA); } else MessageBox("Loi chia 0"); } void CMenuDlg::OnPheptinhKetthuc() { // TODO: Add your command handler code here OnOK(); } Mục đích Sets the menu to the specified menu. (Purpose) Đặt một thanh menu vào cửa sổ. BOOL SetMenu( CWnd::SetMenu Cú pháp CMenu* pMenu (Syntax) ); Ví dụ (Example) Retrieves a pointer to the menu for this window. Mục đích Hàm trả về con trỏ quản lý thanh Menu của một cửa (Purpose) sổ. CWnd::GetMenu Cú pháp CMenu* GetMenu( ) const; (Syntax) Ví dụ (Example) CMenu::GetSubMenu Retrieves a pointer to a pop-up menu. Mục đích Trả về một con trỏ đối tượng CMenu của một popup (Purpose) menu. Cú pháp CMenu* GetSubMenu( 9 GV: Nguyễn Viết Nam
  10. int nPos (Syntax) ) const; Ví dụ (Example) Displays a floating pop-up menu at the specified Mục đích location and tracks the selection of items on the pop- (Purpose) up menu. Hiển thị một popup menu tại một vị trí xác định. BOOL TrackPopupMenu( UINT nFlags, int x, Cú pháp int y, (Syntax) CWnd* pWnd, LPCRECT lpRect = 0 ); CMenu::TrackPopupMenu void CMenuDlg::OnContextMenu(CWnd* pWnd, CPoint point) { // TODO: Add your message handler code here Ví dụ CMenu* pMenu = GetMenu(); (Example) CMenu* pSubMenu = pMenu- >GetSubMenu(0); pSubMenu- >TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); } Loads a menu resource from the application's Mục đích executable file and attaches it to the CMenu object. (Purpose) Nạp và gắn kết một thanh menu vào một đối tượng thuộc lớp CMenu. BOOL LoadMenu( LPCTSTR lpszResourceName CMenu::LoadMenu Cú pháp ); (Syntax) BOOL LoadMenu( UINT nIDResource ); Ví dụ (Example) Adds check marks to or removes check marks from Mục đích menu items in the pop-up menu. (Purpose) Đặt dấu Check hay loại bỏ dấu Check cho một mục chọn trên thanh menu. UINT CheckMenuItem( Cú pháp UINT nIDCheckItem, (Syntax) UINT nCheck ); void CMenuDlg::checkPT(UINT menu_id) { CMenu* pMenu = GetMenu(); CMenu::CheckMenuItem pMenu->CheckMenuItem(MNU_CONG, MF_UNCHECKED); pMenu->CheckMenuItem(MNU_TRU, Ví dụ MF_UNCHECKED); (Example) pMenu->CheckMenuItem(MNU_NHAN, MF_UNCHECKED); pMenu->CheckMenuItem(MNU_CHIA, MF_UNCHECKED); pMenu->CheckMenuItem(menu_id, MF_CHECKED); } CMenu::EnableMenuItem Mục đích Enables, disables, or dims a menu item. (Purpose) Enables, Disables một mục chọn trên thanh menu. Cú pháp UINT EnableMenuItem( (Syntax) UINT nIDEnableItem, 10 GV: Nguyễn Viết Nam
  11. UINT nEnable ); Ví dụ (Example) 4.2. Cửa sổ-Dialog~Lớp-Class Thuộc tính-Property .h Phương thức-Method .cpp 4.2.1. Modal (CDialog) Thiết kế-Design Tạo-Create * Mở hộp thoại hộp thoại Insert Resource: Click chọn menu > chọn Resource. Ấn phím Ctrl + R. - Sau đó xuất hiện hộp thoại Insert Resource: Vẽ-Draw - Chọn mục ở khung danh sách Resource Type > chọn nút . - Khi đó xuất hiện Hộp thoại-Dialog mới là trong khung Workspace ở thẻ Resource View. Viết mã- Coding Gán Thuộc tính- Assign Properties - Double Click lên Hộp thoại-Dialog là trong khung Workspace ở thẻ Resource View. - Click chuột phải lên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại Dialog Properties như hình sau: Vẽ-Draw + Nhập tên định danh của Hộp thoại-Dialog ở hộp . VD: IDC_DIALOG_MODAL. + Nhập tiêu đề của Hộp thoại-Dialog ở hộp . VD: Modal. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. Viết mã- Coding Lập trình-Progarmming Khai báo biến-Variable - Click chuột phải lên Hộp thoại-Dialog > chọn ClassWizard. Declaration - Xuất hiện hộp thoại Adding a Class: 11 GV: Nguyễn Viết Nam
  12. - Chọn hộp để tạo lớp mới > chọn nút . - Tiếp theo xuất hiện hộp thoại New Class: - Nhập tên lớp vào hộp theo cú pháp là CTên_Lớp. Chèn Thông điệp-Add Message Viết mã-Coding Viết mã- Mục đích Call this member function to invoke the modal dialog box and return Coding (Purpose) the dialog-box result when done. Cú pháp virtual INT_PTR DoModal( ); (Syntax) Tài liệu đơn, đa - Copy dòng include “CHocvien.h” của (Single, Multiple lớp Học viên .cpp vào lớp View .cpp Document) - Copy dòng include “CHocvien.h” của Hộp thoại (Dialog) lớp Học viên .cpp vào lớp Dlg .cpp CHocvien dlg; CDialog::DoModal dlg.DoModal(); Ví dụ CModal dlg; (Example) CString s; dlg.m_hoten="Tran HAo"; dlg.m_diem=5; if(dlg.DoModal()==IDOK){ m_list.InsertItem(0,dlg.m_hoten); s.Format("%d",dlg.m_diem); m_list.SetItemText(0,1,s); } OnInitDialog Mục đích This member function is called in response to the WM_INITDIALOG (Purpose) message. Cú pháp virtual BOOL OnInitDialog(); (Syntax) Ví dụ BOOL CWidth::OnInitDialog() (Example) { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_slider.SetRange (1,20); 12 GV: Nguyễn Viết Nam
  13. m_slider.SetPos (mWidth); m_static.Format ("%d",m_slider.GetPos ()); UpdateData (FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } 4.2.2. Modeless (CDialog) Thiết kế-Design Tạo-Create * Mở hộp thoại hộp thoại Insert Resource: Click chọn menu > chọn Resource. Ấn phím Ctrl + R. - Sau đó xuất hiện hộp thoại Insert Resource: Vẽ-Draw - Chọn mục ở khung danh sách Resource Type > chọn nút . - Khi đó xuất hiện Hộp thoại-Dialog mới là trong khung Workspace ở thẻ Resource View. Viết mã- Coding Gán Thuộc tính- Assign Properties - Double Click lên Hộp thoại-Dialog là trong khung Workspace ở thẻ Resource View. - Click chuột phải lên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại Dialog Properties như hình sau: Vẽ-Draw + Nhập tên định danh của Hộp thoại-Dialog ở hộp . VD: IDC_DIALOG_MODAL. + Nhập tiêu đề của Hộp thoại-Dialog ở hộp . VD: Modal. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. Viết mã- Coding Lập trình-Progarmming Khai báo biến-Variable - Click chuột phải lên Hộp thoại-Dialog > chọn ClassWizard. Declaration - Xuất hiện hộp thoại Adding a Class: 13 GV: Nguyễn Viết Nam
  14. - Chọn hộp để tạo lớp mới > chọn nút . - Tiếp theo xuất hiện hộp thoại New Class: - Nhập tên lớp vào hộp theo cú pháp là CTên_Lớp. Chèn Thông điệp-Add Message Viết mã-Coding Mục đích Call this function to get a pointer to a child window's parent window (if (Purpose) any). Cú pháp CWnd* GetParent( ) const; (Syntax) Tài liệu đơn, đa - Copy dòng include “CHocvien.h” của lớp Học (Single, viên .cpp vào lớp View .cpp Multiple Document) - Copy dòng include “CDialogModeless.h” của lớp Modeless .cpp vào lớp Dialog cha .h sau dòng // ModeLessDlg.h : header file - Tạo con trỏ thuộc lớp Dialog Modeless (ví dụ Viết CModeless* dlg_ml;) trong lớp Dialog cha .h sau mã- CWnd::GetParent dòng //Construction Coding Hộp thoại Ví dụ - Trong hàm OnInitDialog() của Dialog cha .cpp, (Dialog) (Example) nhập: dlg_ml= new CModeless; dlg_ ml- >Create(IDD_DIALOG_MODELESS,this); - Gọi Dialog: dlg_ml->ShowWindow(SW_SHOW); CDialogCha *pDlgCha; pDlgCha=(CdialogModeless*)GetParent(); pDlgCha-> Serialize Tạo 1 lớp dẫn xuất từ lớp Cobject. - Lớp CDiem DECLARE_SERIAL(CDiem); Trong lớp CDiem.h void Serialize(CArchive& ar); 14 GV: Nguyễn Viết Nam
  15. // Construction/Destruction IMPLEMENT_SERIAL(CDiem, CObject,1) - Sự kiện Serialize của lớp View rồi copy qua cho lớp CDiem.cpp void CDiem::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here Trong lớp CDiem.cpp ar > m1 >> m2 >> mWidth >> mColor; } } - Trong phương thức Serialize tại dòng cuối: Trong lớp Doc.h mDS.Serialize(ar); - Trong file cpp: IMPLEMENT_SERIAL(CDiem, CObject,1) void CDiem::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here ar > m1 >> m2 >> type >> color; } } CFont (CFontDialog) Thiết kế-Design Tạo-Create Vẽ-Draw Viết mã-Coding Gán Thuộc tính- Assign Properties Vẽ-Draw Viết mã-Coding Lập trình-Progarmming Khai báo biến-Variable Declaration Chèn Thông điệp-Add Message Viết mã-Coding Viết mã- Deletes the attached Windows GDI object from memory Mục đích Coding by freeing all system storage associated with the (Purpose) Windows GDI object. CFont::DeleteObject Cú pháp BOOL DeleteObject( ); (Syntax) Ví dụ (Example) CFontDialog::GetCurrentFont Call this function to assign the characteristics of the Mục đích currently selected font to the members of a LOGFONT (Purpose) structure. Cú pháp void GetCurrentFont( (Syntax) LPLOGFONT lplf 15 GV: Nguyễn Viết Nam
  16. ); Ví dụ (Example) Mục đích The LOGFONT structure defines the attributes of a font. (Purpose) typedef struct tagLOGFONT { LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic; Cú pháp BYTE lfUnderline; LOGFONT (Syntax) BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; TCHAR lfFaceName[LF_FACESIZE]; } LOGFONT, *PLOGFONT; Ví dụ (Example) Mục đích Call this function to retrieve the selected font color. (Purpose) Cú pháp CFontDialog::GetColor COLORREF GetColor( ) const; (Syntax) Ví dụ (Example) Mục đích Initializes a CFont object with the characteristics given (Purpose) in a LOGFONT structure pointed to by lpLogFont. BOOL CreateFontIndirect( Cú pháp CFont::CreateFontIndirect const LOGFONT* lpLogFont (Syntax) ); Ví dụ (Example) CFontDialog dlg; CFont mFont; LOGFONT font; COLORREF color; if(dlg.DoModal()==IDOK){ mFont.DeleteObject (); dlg.GetCurrentFont(&font); color=dlg.GetColor(); mFont.CreateFontIndirect(&font); m_static_font.SetFont(&mFont); } 4.3. Nút-Button (CButton,CWnd) Giới thiệu- - Là phím nổi để người sử dụng ấn chuột vào đó và thực hiện một sự kiện nào đó. Nút lệnh có thể Introduction được cài hình ảnh lên nó và được viết text lên đó. Thiết kế-Design Tạo-Create - Click chọn nút Button trên thanh công cụ Điều khiển. Vẽ-Draw - Khi đó biểu tượng con trỏ chuột là > Click chọn trên Hộp thoại-Dialog để có nút là . Viết mã-Coding Gán Thuộc tính- Assign Properties 16 GV: Nguyễn Viết Nam
  17. - Click chuột phải lên nút trên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại Push Button Properties của nút như hình sau: Thiết kế- Design + Nhập tên định danh của nút ở hộp . VD: IDC_BUTTON_HELLO. + Nhập nhãn hiển thị của nút ở hộp . Có thể nhập dấu & trước kí tự tắt. VD: Say Hello. + Bỏ chọn hộp nếu muốn ẩn nút. + Chọn hộp nếu muốn vô hiệu hóa nút. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. Viết mã- Coding Lập trình-Progarmming - Click chuột phải lên nút trên Hộp thoại-Dialog > chọn ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: Khai báo biến- - Chọn tên định danh của nút ở khung Control IDS > chọn nút > xuất hiện hộp Variable Declaration thoại Add Member Variable như hình sau: + Nhập tên biến hay tên đối tượng vào hộp . VD: m_button_hello. + Chọn là đối tượng ở hộp , thì chọn lớp ở hộp . Kiểu Giải nghĩa CButton Lớp nút - Chọn nút để xóa biến hay xóa đối tượng. Chèn Thông điệp-Add - Mở hộp thoại MFC ClassWizard. 17 GV: Nguyễn Viết Nam
  18. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: - Chọn tên định danh của nút ở khung Object IDs > chọn thông điệp ở khung Messages: Thông điệp Ý nghĩa sự kiện Message BN_CLICKED Nhấp chuột BN_DOUBLECLICKED Nhấp đúp chuột - Chọn nút > sau đó xuất hiện hộp thoại Add Member Fucntion như hình sau: + Đặt tên hàm cho nút ở hộp . Các trường hợp đặt tên hàm: Thông điệp Tên hàm Ví dụ BN_CLICKED OnButton OnButtonHello - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: void CTen_Ung_DungDlg::OnButtonTen_Nut() { // TODO: Add your control notification handler code here } Viết mã-Coding Lập trình- Mục đích Retrieves a pointer to the specified control or child Progarmming (Purpose) window in a dialog box or other window. CWnd* GetDlgItem( int nID ) const; Cú pháp CWnd:: GetDlgItem void GetDlgItem( (Syntax) int nID, HWND* phWnd ) const; Ví dụ CButton* (Example) pButton=(CButton*)GetDlgItem(IDC_BUTTON1); Mục đích Hàm trả về khác 0 nếu cửa sổ Enable. (Purpose) Cú pháp CWnd::IsWindowEnabled BOOL IsWindowEnabled( ) const; (Syntax) Ví dụ (Example) CWnd::EnableWindow Mục đích Enables or disables mouse and keyboard input. (Purpose) Enable (TRUE) hoặc Disable (FALSE) một cửa sổ. Cú pháp BOOL EnableWindow( (Syntax) BOOL bEnable = TRUE 18 GV: Nguyễn Viết Nam
  19. ); CButton* pButton2=(CButton*)GetDlgItem(IDC_BUTTON2); Ví dụ if(pButton2->IsWindowEnabled()) (Example) pButton2->EnableWindow(FALSE); else pButton2->EnableWindow(TRUE); Mục đích Enables or disables mouse and keyboard input. (Purpose) Hàm trả về khác 0 nếu cửa sổ Visible. Cú pháp BOOL IsWindowVisible( ) const; (Syntax) CWnd::IsWindowVisible CButton* pButton2=(CButton*)GetDlgItem(IDC_BUTTON2); Ví dụ if(pButton2->IsWindowEnabled()) (Example) pButton2->EnableWindow(FALSE); else pButton2->EnableWindow(TRUE); Sets the visibility state of the window. Mục đích Đặt trạng thái Visible của cửa sổ (SW_HIDE: ẩn cửa (Purpose) sổ, SW_SHOW: hiện cửa sổ). BOOL ShowWindow( Cú pháp int nCmdShow (Syntax) CWnd::ShowWindow ); CButton* pButton3=(CButton*)GetDlgItem(IDC_BUTTON3); Ví dụ if(pButton3->IsWindowVisible()) (Example) pButton3->ShowWindow(SW_HIDE); else pButton3->ShowWindow(SW_SHOW); Mục đích Sets the window's title to the specified text. (Purpose) Đặt tiêu đề cho một cửa sổ. void SetWindowText( Cú pháp LPCTSTR lpszString (Syntax) ); CWnd::SetWindowText CButton* pButton3=(CButton*)GetDlgItem(IDC_BUTTON3); Ví dụ if(pButton3->IsWindowVisible()) (Example) pButton3->ShowWindow(SW_HIDE); else pButton3->ShowWindow(SW_SHOW); Copies the CWnd caption title (if it has one) into the buffer pointed to by lpszStringBuf or into the destination Mục đích string rString. (Purpose) Sao chép nội dung tiêu đề của cửa sổ và chứa vào thành phần thuộc kiểu chuỗi (LPTSTR hoặc CString). int GetWindowText( LPTSTR lpszStringBuf, CWnd::GetWindowText int nMaxCount Cú pháp ) const; (Syntax) void GetWindowText( CString& rString ) const; CButton* Ví dụ pButton4=(CButton*)GetDlgItem(IDC_BUTTON4); (Example) pButton4->SetWindowText("Nut 4"); 4.4. Nhãn-Static Text (CString,CStatic) - Là điều khiển được đưa vào để hiển thị dòng văn bản tới người sử dụng. Người sử dụng sẽ không Giới thiệu- thể thay đổi văn bản hay tương tác với điều khiển, nó xem như một điều khiển chỉ đọc. Tuy nhiên bạn Introduction dễ dàng có thể thay đổi dòng văn bản hiển thị bởi điều khiển khi chương trình đang chạy qua mã lệnh bạn tạo cho ứng dụng. Thiết kế-Design Tạo-Create 19 GV: Nguyễn Viết Nam
  20. - Click chọn nút Static Text trên thanh công cụ Điều khiển. Vẽ-Draw - Khi đó biểu tượng con trỏ chuột là > Click chuột trên hộp thoại (Dialog) để có nhãn là . Viết mã-Coding Gán Thuộc tính- Assign Properties - Click chuột phải lên nhãn trên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại Text Properties của nhãn như hình sau: + Nhập tên định danh của nhãn ở hộp . VD: IDC_STATIC_GIOITHIEU. + Nhập nhãn hiển thị của nhãn ở hộp . VD: Visual C++ 6.0. Thiết kế-Design + Bỏ chọn hộp nếu muốn ẩn nhãn. + Chọn hộp nếu muốn vô hiệu hóa nhãn. - Chọn thẻ > xuất hiện hộp thoại Edit Properties như hình sau: + Chọn hộp để cho nhãn hiển thị chuỗi. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. Viết mã-Coding Lập trình-Progarmming Khai báo biến-Variable - Click chuột phải lên nhãn trên Hộp thoại-Dialog > chọn ClassWizard. Declaration - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: - Chọn tên định danh của nhãn ở khung Control IDS > chọn nút > xuất hiện hộp thoại Add Member Variable như hình sau: 20 GV: Nguyễn Viết Nam
  21. + Nhập tên biến hay tên đối tượng vào hộp . VD: m_static_hoten. + Chọn là biến ở hộp , thì chọn kiểu dữ liệu ở hộp . Kiểu Giải nghĩa CString Kiểu chuỗi + Nếu chọn là đối tượng ở hộp , thì chọn lớp ở hộp . Kiểu Giải nghĩa CStatic Lớp chuỗi - Chọn nút để xóa biến hay xóa đối tượng. Chèn Thông điệp-Add Message Lập trình- Progarmming Viết mã-Coding - Hàm Format(): giống hàm printf của C. void __cdecl Format( UINT nFormatID, [, argument] ); void __cdecl Format( PCXSTR pszFormat, [, argument] ); Mục đích Writes formatted data to a CStringT in the same way that (Purpose) sprintf formats data into a C-style character array. void __cdecl Format( UINT nFormatID, [, argument] Lập trình- Cú pháp ); CString::Format Progarmming (Syntax) void __cdecl Format( PCXSTR pszFormat, [, argument] ); Ví dụ m_static. Format ("%d",m_slider.GetPos ()); (Example) UpdateData (FALSE) Mục đích Sets the window's current font to the specified font. (Purpose) void SetFont( Cú pháp CFont* pFont, CStatic::SetFont (Syntax) BOOL bRedraw = TRUE ); Ví dụ (Example) 21 GV: Nguyễn Viết Nam
  22. 4.5. Hộp nhập liệu-Edit Text (CEdit) Giới thiệu-Introduction - Là hộp soạn thảo cho phép người sử dụng nhập hay thay đổi văn bản. Thiết kế-Design Tạo-Create - Click chọn nút Edit Text trên thanh công cụ Điều khiển. Vẽ-Draw - Khi đó biểu tượng con trỏ chuột là > Click chọn trên Hộp thoại-Dialog để có hộp nhập liệu là . Viết mã- Coding Gán Thuộc tính- Assign Properties - Click chuột phải lên hộp nhập liệu trên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại Edit Properties của hộp nhập liệu như hình sau: + Nhập tên định danh của hộp nhập liệu ở hộp . VD: IDC_BUTTON_HOTEN. Thiết kế- + Bỏ chọn hộp nếu muốn ẩn hộp nhập liệu. Design + Chọn hộp nếu muốn vô hiệu hóa hộp nhập liệu. - Chọn thẻ > xuất hiện hộp thoại Edit Properties như hình sau: + Chọn hộp để quy định thuộc tính chỉ đọc kết quả. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. Viết mã- Coding Lập trình-Progarmming - Click chuột phải lên hộp nhập liệu trên Hộp thoại-Dialog > chọn ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: Khai báo biến- Variable Declaration - Chọn tên định danh của hộp nhập liệu ở khung Control IDs > chọn nút > xuất hiện 22 GV: Nguyễn Viết Nam
  23. hộp thoại Add Member Variable như hình sau: + Nhập tên biến hay tên đối tượng vào hộp . VD: m_edit_hoten. + Nếu chọn là biến ở hộp , thì chọn kiểu dữ liệu ở hộp . Kiểu Giải nghĩa CString Kiểu Chuỗi int Kiểu số nguyên UINT Kiểu số nguyên (không dấu) long Kiểu số nguyên dài DWORD Kiểu số nguyên dài float Kiểu số thực ngắn double Kiểu số thực dài BYTE Kiểu số nguyên ngắn (không dấu) short Kiểu số nguyên ngắn BOOL Kiểu luận lý COleDateTime Kiểu ngày giờ COleCurrency Kiểu tiền tệ + Nếu chọn là đối tượng ở hộp , thì chọn lớp ở hộp . Kiểu Giải nghĩa CEdit Lớp nhập liệu - Chọn nút để xóa biến hay xóa đối tượng. - Mở hộp thoại MFC ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: Chèn Thông điệp- Add Message - Chọn tên định danh của hộp nhập liệu ở khung Object IDs > chọn thông điệp ở khung Messages: Thông điệp Ý nghĩa sự kiện 23 GV: Nguyễn Viết Nam
  24. - Chọn nút > sau đó xuất hiện hộp thoại Add Member Fucntion như hình sau: + Đặt tên hàm cho hộp nhập liệu ở hộp . Các trường hợp đặt tên hàm: Thông điệp Tên hàm Ví dụ - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: void CTen_Ung_DungDlg::On() { // TODO: Add your control notification handler code here } Viết mã-Coding Reverses the order of the characters in the Mục đích CStringT object. (Purpose) Đảo chuỗi Cú pháp Lập trình- CStringT& MakeReverse(); CStringT::MakeReverse (Syntax) Progarmming UpdateData(TRUE); Ví dụ m_edit2=m_edit1; (Example) m_edit2.MakeReverse(); UpdateData(FALSE); 4.6. Khung nhóm-Group Box Thiết kế-Design Tạo-Create - Click chọn nút Group Box trên thanh công cụ Điều khiển. - Khi đó biểu tượng con trỏ chuột là > Click chọn trên Hộp thoại-Dialog để có khung nhóm là Vẽ-Draw . Viết mã- Coding Gán Thuộc tính- Assign Properties Thiết kế- Design - Click chuột phải lên khung nhóm trên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại Group Box Properties của khung nhóm như hình sau: + Nhập tên định danh của khung nhóm ở hộp . VD: IDC_STATIC_GIOITINH. + Nhập nhãn hiển thị của khung nhóm ở hộp . VD: Gioi Tinh. + Chọn hộp nếu muốn vô hiệu hóa khung nhóm. + Bỏ chọn hộp nếu muốn ẩn khung nhóm. + Chọn hộp nếu muốn vô hiệu hóa khung nhóm. - Chọn thẻ > xuất hiện hộp thoại Group Box Properties như hình sau: 24 GV: Nguyễn Viết Nam
  25. + Chọn hộp nếu muốn khung nhóm lõm xuống. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. Viết mã- Coding Lập trình-Progarmming Khai báo biến-Variable Declaration Chèn Thông điệp-Add Message Viết mã-Coding Lập trình-Progarmming 4.7. Hộp lựa chọn-Radio Box (CButton) Giới thiệu- - Là hộp nhỏ hình vuông để người dùng ấn chuột vào dấu (x) hoặc không có dấu (x). Nó kiểm tra Introduction giá trị chọn hay không không chọn (on/off). Thiết kế-Design Tạo-Create - Tạo 1 Group Box và chọn thuộc tính của nó. Quy tắc - Tạo Radio Box đầu tiên, chọn thuộc tính và gán giá trị 0 cho nó. - Tạo các Radio Box khác. - Click chọn nút Radio Box trên thanh công cụ Điều khiển. Vẽ-Draw - Khi đó biểu tượng con trỏ chuột là > Click chọn trên Hộp thoại-Dialog để có hộp lựa chọn là . Viết mã- Coding Gán Thuộc tính- Assign Properties - Click chuột phải lên hộp lựa chọn trên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại Radio Button Properties của hộp lựa chọn như hình sau: Thiết kế- Design + Nhập tên định danh của hộp lựa chọn ở hộp . VD: IDC_RADIO_GIOITINH. + Nhập nhãn hiển thị của hộp lựa chọn ở hộp . VD: Say Hello. + Chọn hộp để tạo nhóm cho các hộp lựa chọn. + Bỏ chọn hộp nếu muốn ẩn hộp lựa chọn. + Chọn hộp nếu muốn vô hiệu hóa hộp lựa chọn. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. Viết mã- Coding Lập trình-Progarmming Khai báo biến- - Click chuột phải lên hộp lựa chọn trên Hộp thoại-Dialog > chọn ClassWizard. Variable Declaration - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: 25 GV: Nguyễn Viết Nam
  26. - Chọn tên định danh của hộp lựa chọn ở khung Control IDs > chọn nút > xuất hiện hộp thoại Add Member Variable như hình sau: + Nhập tên biến hay tên đối tượng vào hộp . VD: m_radio_gioitinh. + Nếu chọn là biến ở hộp , thì chọn kiểu dữ liệu ở hộp . Kiểu Giải nghĩa int Kiểu số nguyên + Nếu chọn là đối tượng ở hộp , thì chọn lớp ở hộp . Kiểu Giải nghĩa CButton Lớp nút - Chọn nút để xóa biến hay xóa đối tượng. Chèn Thông điệp- - Mở hộp thoại MFC ClassWizard. Add Message - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: 26 GV: Nguyễn Viết Nam
  27. - Chọn tên định danh của hộp nhập liệu ở khung Object IDs > chọn thông điệp ở khung Messages: Thông điệp Ý nghĩa sự kiện BN_CLICKED Nhấp chuột BN_DOUBLECLICKED Nhấp đúp chuột - Chọn nút > sau đó xuất hiện hộp thoại Add Member Fucntion như hình sau: + Đặt tên hàm cho hộp nhập liệu ở hộp . Các trường hợp đặt tên hàm: Thông điệp Tên hàm Ví dụ - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: void CTen_Ung_DungDlg::On() { // TODO: Add your control notification handler code here } Viết mã-Coding C1: m_radio=0; UpdateData(FALSE); Khởi tạo-Initial C2: ID của Điều khiển GetDlgItem Con trỏ Cbutton* pButton=(Cbutton*)GetDlgItem(IDC_RADIO); switch (m_radio){ case 0: ; break; Lựa chọn-Choice case 1: ; break; } Lập trình-Progarmming - Ví dụ-Example: UpdateData(TRUE); switch (m_radio){ case 0: MessageBox("Khong"); break; case 1: MessageBox("Mot"); break; } UpdateData(FALSE); - Ví dụ-Example: double tiencong=0; UpdateData(TRUE); switch(m_radio){ case 0: 27 GV: Nguyễn Viết Nam
  28. tiencong=m_edit*60000.0; break; case 1: tiencong=m_edit*100000.0; break; case 2: tiencong=m_edit*140000.0; break; } m_edit2.Format("%.0f",tiencong); UpdateData(FALSE); - Ví dụ-Example: double kq; UpdateData(TRUE); switch (m_radio){ case 0: kq = m_edit_soa + m_edit_sob; break; case 1: kq = m_edit_soa - m_edit_sob; break; case 2: kq = m_edit_soa * m_edit_sob; break; case 3: kq =m_edit_soa / m_edit_sob; break; } m_edit_ketqua.Format("%.0f",kq); UpdateData(FALSE); 4.8. Hộp đánh dấu-Check Box (CButton) Giới thiệu- - Là một vòng tròn, nó dùng kết hợp bộ hai phím trở lên. Mỗi phím chỉ nhận một giá trị cho một trạng Introduction thái một lần. Bạn thường dùng phím radio thành nhóm ít nhất là hai và bao quanh bởi hộp nhóm. Thiết kế-Design Tạo-Create - Click chọn nút Check Box trên thanh công cụ Điều khiển. Vẽ-Draw - Khi đó biểu tượng con trỏ chuột là > Click chọn trên Hộp thoại-Dialog để có hộp đánh dấu là . Viết mã- Coding Gán Thuộc tính- Assign Properties - Click chuột phải lên hộp đánh dấu trên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại Check Box Properties của hộp đánh dấu như hình sau: Thiết kế- Design + Nhập tên định danh của hộp đánh dấu ở hộp . VD: IDC_CHECK_BONGDA. + Nhập nhãn hiển thị của đánh dấu ở hộp . VD: Bong da. + Bỏ chọn hộp nếu muốn ẩn hộp đánh dấu. + Chọn hộp nếu muốn vô hiệu hóa hộp đánh dấu. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. Viết mã- Coding Lập trình-Progarmming 28 GV: Nguyễn Viết Nam
  29. - Click chuột phải lên hộp lựa chọn trên Hộp thoại-Dialog > chọn ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: - Chọn tên định danh của hộp đánh dấu ở khung Control IDs > chọn nút > xuất hiện hộp thoại Add Member Variable như hình sau: Khai báo biến- Variable Declaration + Nhập tên biến hay tên đối tượng vào hộp . VD: m_check_bongda. + Nếu chọn là biến ở hộp , thì chọn kiểu dữ liệu ở hộp . Kiểu Giải nghĩa BOOL Kiểu luận lý + Nếu chọn là đối tượng ở hộp , thì chọn lớp ở hộp . Kiểu Giải nghĩa CButton Lớp nút - Chọn nút để xóa biến hay xóa đối tượng. Chèn Thông điệp- - Mở hộp thoại MFC ClassWizard. Add Message - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: 29 GV: Nguyễn Viết Nam
  30. - Chọn tên định danh của hộp đánh dấu ở khung Object IDs > chọn thông điệp ở khung Messages: Thông điệp Ý nghĩa sự kiện BN_CLICKED Nhấp chuột BN_DOUBLECLICKED Nhấp đúp chuột - Chọn nút > sau đó xuất hiện hộp thoại Add Member Fucntion như hình sau: + Đặt tên hàm cho hộp nhập liệu ở hộp . Các trường hợp đặt tên hàm: Thông điệp Tên hàm Ví dụ BN_CLICKED OnCheck OnCheckChay - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: void CTen_Ung_DungDlg::OnCheckChay() { // TODO: Add your control notification handler code here } Viết mã-Coding if(m_check) Lựa chọn-Choice else Retrieves the check state of a radio button or check box. Mục đích Trả về trạng thái dấu Check của Check Box Control và (Purpose) Radio Button Control. int GetCheck( ) const; Cú pháp CButton::GetCheck (Syntax) BST_UNCHECKED : Không đặt dấu Check. BST_CHECKED : Đặt dấu Check. if(m_check.GetCheck()==BST_CHECKED) Ví dụ MessageBox("Ban la phai NU"); (Example) else MessageBox("Ban la phai NAM"); Lập trình- Progarmming Sets or resets the check state of a radio button or check Mục đích box. (Purpose) Thiết lập hay hủy bỏ dấu Check của Check Box Control và Radio Button Control. int GetCheck( ) const; CButton::SetCheck Cú pháp (Syntax) BST_UNCHECKED : Không đặt dấu Check. BST_CHECKED : Đặt dấu Check. if(m_check.GetCheck()==BST_CHECKED) Ví dụ MessageBox("Ban la phai NU"); (Example) else MessageBox("Ban la phai NAM"); 30 GV: Nguyễn Viết Nam
  31. 4.9. Hộp danh sách-List Box (CListBox) Giới thiệu- - Là hộp liệt kê theo hàng danh sách các giá trị được có sẵn. Có lúc người dùng cần gõ thêm vào Introduction các giá trị riêng mà nó chưa được đưa vào hộp danh sách. Thiết kế-Design Tạo-Create - Click chọn nút List Box trên thanh công cụ Điều khiển. Thiết kế- - Khi đó biểu tượng con trỏ chuột là > Click chọn trên Hộp thoại-Dialog để có hộp danh sách là Design . Mã-Code Gán Thuộc tính- Assign Properties - Click chuột phải lên hộp danh sách trên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại List Box Properties của hộp danh sách như hình sau: + Nhập tên định danh của hộp danh sách ở hộp . VD: IDC_LIST_HOTEN. + Bỏ chọn hộp nếu muốn ẩn hộp danh sách. + Chọn hộp nếu muốn vô hiệu hóa hộp danh sách. - Chọn thẻ > xuất hiện hộp thoại List Box Properties như hình sau: Vẽ-Draw + Chọn hộp để chọn kiểu hộp danh sách. Các kiểu như sau: Kiểu Ý nghĩa Single - Chỉ có nhiều nhất một phần tử được chọn. - Nhiều phần tử có thể cùng được lựa chọn. Việc lựa chọn được thực hiện bằng Multiple chuột kết hợp với phím Shift và Ctrl. - Nhiều phần tử có thể cùng được lựa chọn. Việc lựa chọn được thực hiện bằng Extended chuột kết hợp với kéo rê và nhấn nút trái của chuột. None - Không có phần tử nào có thể được lựa chọn. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. Viết mã- Coding Lập trình-Progarmming Khai báo biến- Variable Declaration - Click chuột phải lên hộp danh sách trên Hộp thoại-Dialog > chọn ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: 31 GV: Nguyễn Viết Nam
  32. - Chọn tên định danh của hộp danh sách ở khung Control IDs > chọn nút > xuất hiện hộp thoại Add Member Variable như hình sau: + Nhập tên biến hay tên đối tượng vào hộp . VD: m_list_sothich. + Nếu chọn là biến ở hộp , thì chọn kiểu dữ liệu ở hộp . Kiểu Giải nghĩa CString Kiểu Chuỗi + Nếu chọn là đối tượng ở hộp , thì chọn lớp ở hộp . Kiểu Giải nghĩa CListBox Lớp hộp danh sách - Chọn nút để xóa biến hay xóa đối tượng. Chèn Thông điệp- - Mở hộp thoại MFC ClassWizard. Add Message - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: 32 GV: Nguyễn Viết Nam
  33. - Chọn tên định danh của hộp danh sách ở khung Object IDs > chọn thông điệp ở khung Messages: Thông điệp Ý nghĩa sự kiện LBN_SELCHANGE LBN_DBLCLK Nhấp đúp chuột LBN_ERRSPACE LBN_KILLFOCUS LBN_SELCANCEL LBN_SETFOCUS - Chọn nút > sau đó xuất hiện hộp thoại Add Member Fucntion như hình sau: + Đặt tên hàm cho hộp nhập liệu ở hộp . Các trường hợp đặt tên hàm: Thông điệp Tên hàm Ví dụ LBN_DBLCLK OnDblclkList OnDblclkLstHoTen - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: void CTen_Ung_DungDlg::OnDblclkLstHoTen() { // TODO: Add your control notification handler code here } Viết mã-Coding Lập trình- - Hàm AddString(): Thêm một phần tử vào ListBox. Progarmming int AddString( LPCTSTR lpszItem ); - Hàm InsertString(): Chèn một phần tử vào ListBox tại vị trí nIndex. int InsertString( int nIndex, LPCTSTR lpszItem ); - Ví dụ-Example: UpdateData(TRUE); m_list.AddString(m_edit); m_edit=""; UpdateData(FALSE); CEdit* pEdit=(CEdit*)GetDlgItem(IDC_EDIT1); pEdit->SetFocus(); UpdateData(TRUE); m_ds1.AddString(m_dulieu); CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1); pEdit->SetFocus(); m_dulieu = ""; 33 GV: Nguyễn Viết Nam
  34. UpdateData(FALSE); - Hàm GetCurSel(): Trả về chỉ số của phần tử đang được lựa chọn trên ListBox. Hàm chỉ nên sử dụng trong trường Single Selection. int GetCurSel( ) const; - Hàm SetCurSel(): Dùng để lựa chọn một phần tử trong ListBox. Hàm chỉ nên sử dụng trong trường Single Selection. int SetCurSel( int nSelect ); - Hàm GetSel(): Trả về trạng thái lựa chọn của một phần tử trong ListBox. int GetSel( int nIndex ) const; >0 là lựa chọn #0 là không lựa chọn - Hàm SetSel(): Dùng để lựa chọn hay hủy lựa chọn một phần tử trong ListBox. Hàm chỉ nên sử dụng trong trường Multiple Selection. int SetSel( int nIndex, BOOL bSelect = TRUE ); Nếu bSelect = TRUE thì lựa chọn Nếu bSelect = FALSE thì không lựa chọn - Hàm GetText(): Trả về một chuỗi đang được lựa chọn trên ListBox. int GetText( int nIndex, LPTSTR lpszBuffer ) const; void GetText( int nIndex, CString& rString ) const; - Ví dụ-Example: int index; CString s; index=m_list.GetCurSel(); m_list.GetText(index,s); MessageBox(s); - Hàm DeleteString (): Xoá phần tử tại vị trí nIndex của ListBox. int DeleteString( UINT nIndex ); - Hàm ResetContent (): Xoá tất cả các phần tử có trong ListBox. void ResetContent( ); - Ví dụ-Example: int index; CString tmp; index = m_ds1.GetCurSel(); m_ds1.GetText(index, tmp); m_ds1.DeleteString(index); m_ds2.AddString(tmp); - Hàm GetCount(): Trả về số phần tử có trong ListBox. int GetCount( ) const; - Hàm GetSelCount(): Trả về tổng số phần tử đang được lựa chọn trong ListBox. Hàm chỉ nên sử dụng trong trường Multiple Selection. int GetSelCount( ) const; - Ví dụ-Example: CString tmp; for(int i = 0; i < m_ds2.GetCount();i++) { 34 GV: Nguyễn Viết Nam
  35. if(m_ds2.GetSel(i) > 0) { m_ds2.GetText(i, tmp); m_ds2.DeleteString(i); m_ds1.AddString(tmp); } } 4.10. Hộp danh sách thả xuống-Combo Box (CComboBox) Giới thiệu- - Là hộp soạn thảo được gắn với danh sách các giá trị có sẵn. Có lúc người dùng cần gõ thêm vào Introduction các giá trị riêng mà nó chưa được đưa vào hộp danh sách. Thiết kế-Design Tạo-Create - Click chọn nút Combo Box trên thanh công cụ Điều khiển. Vẽ-Draw - Khi đó biểu tượng con trỏ chuột là > Giữ và kéo theo hình chữ nhật trên Hộp thoại-Dialog để có hộp danh sách là . Viết mã- Coding Gán Thuộc tính- Assign Properties - Click chuột phải lên hộp danh sách thả xuống trên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại Combo Box Properties của hộp danh sách thả xuống như hình sau: + Nhập tên định danh của hộp danh sách thả xuống ở hộp . VD: IDC_COMBO_ODIA. + Bỏ chọn hộp nếu muốn ẩn hộp danh sách thả xuống. + Chọn hộp nếu muốn vô hiệu hóa hộp danh sách thả xuống. - Chọn thẻ > xuất hiện hộp thoại Combo Box Properties như hình sau: Thiết kế- Design + Nhập danh sách chọn ở khung Enter listbox items. Khi xuống dòng thì ấn phím Ctrl + Enter. - Chọn thẻ > xuất hiện hộp thoại Combo Box Properties như hình sau: + Chọn hộp để chọn kiểu hộp danh sách thả xuống. Các kiểu như sau: Kiểu Ý nghĩa Dropdown Single Drop List - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. 35 GV: Nguyễn Viết Nam
  36. Viết mã- Coding Lập trình-Progarmming - Click chuột phải lên hộp danh sách thả xuống trên Hộp thoại-Dialog > chọn ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: - Chọn tên định danh của hộp danh sách thả xuống ở khung Control IDs > chọn nút > xuất hiện hộp thoại Add Member Variable như hình sau: Khai báo biến- Variable Declaration + Nhập tên biến hay tên đối tượng vào hộp . VD: m_combo_odia. + Nếu chọn là biến ở hộp , thì chọn kiểu dữ liệu ở hộp . Kiểu Giải nghĩa CString Kiểu Chuỗi + Nếu chọn là đối tượng ở hộp , thì chọn lớp ở hộp . Kiểu Giải nghĩa CComboBox Lớp hộp danh sách thả xuống - Chọn nút để xóa biến hay xóa đối tượng. Chèn Thông điệp- - Mở hộp thoại MFC ClassWizard. Add Message - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: 36 GV: Nguyễn Viết Nam
  37. - Chọn tên định danh của hộp danh sách thả xuống ở khung Object IDs > chọn thông điệp ở khung Messages: Thông điệp Ý nghĩa sự kiện CBN_EDITCHANGE CBN_CLOSEUP CBN_DBLCLK Nhấp đúp chuột CBN_DROPDOWN CBN_EDITUPDATE CBN_ERRSPACE CBN_KILLFOCUS CBN_SELCHANGE CBN_SELENDCANCEL CBN_SELENDOK Chọn 1 mục CBN_SETFOCUS - Chọn nút > sau đó xuất hiện hộp thoại Add Member Fucntion như hình sau: + Đặt tên hàm cho hộp nhập liệu ở hộp . Các trường hợp đặt tên hàm: Thông điệp Tên hàm Ví dụ CBN_SELENDOK OnSelendCombo OnSelendokCboOdia - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: void CTen_Ung_DungDlg::OnDblclkCboOdia() { // TODO: Add your control notification handler code here } Viết mã-Coding Lập trình- Mục đích Call this member function to determine which item in Progarmming (Purpose) the combo box is selected. Cú pháp int GetCurSel( ) const; (Syntax) switch (m_combo.GetCurSel()) { CComboBox::GetCurSel case 0: Ví dụ break; (Example) case 1 : break; } CComboBox::GetLBText Mục đích Gets a string from the list box of a combo box. (Purpose) Trả về một chuỗi từ ListBox của ComboBox. Cú pháp int GetLBText( 37 GV: Nguyễn Viết Nam
  38. int nIndex, LPTSTR lpszText ) const; (Syntax) void GetLBText( int nIndex, CString& rString ) const; Ví dụ CString str; (Example) int kq; int index = m_combo.GetCurSel(); m_static_cc = ""; for(int i=1; i >= 1; } } } void CComboDlg::OnSelendokCombo1() { // TODO: Add your control notification handler code here int index; CString tenfile; index=m_combo.GetCurSel(); m_combo.GetLBText(index,tenfile); tenfile+=":\\*.*"; HANDLE h; WIN32_FIND_DATA d; h=FindFirstFile(tenfile,&d); if(h!=INVALID_HANDLE_VALUE){ 38 GV: Nguyễn Viết Nam
  39. m_list.ResetContent(); do{ m_list.AddString(d.cFileName); if(!FindNextFile(h,&d)) break; }while(1); }else MessageBox("Loi"); } 4.11. Hộp ngày giờ-Date Time Picker (COleDateTime, CTime) Giới thiệu- - Là một công cụ hiển thị thời gian và lịch hiện hành. Nó cho ta biết được thời gian, ngày, tháng, Introduction năm hiện hành. Thiết kế-Design Tạo-Create - Click chọn nút Date Time Picker trên thanh công cụ Điều khiển. Vẽ-Draw - Khi đó biểu tượng con trỏ chuột là > Click chọn trên Hộp thoại-Dialog để có hộp ngày giờ là . Viết mã- Coding Gán Thuộc tính- Assign Properties - Click chuột phải lên hộp ngày giờ trên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại Date Time Picker Properties của hộp ngày giờ như hình sau: Thiết kế- Design + Nhập tên định danh của hộp ngày giờ ở hộp . VD: IDC_DATETIME_HOADON. + Bỏ chọn hộp nếu muốn ẩn hộp ngày giờ. + Chọn hộp nếu muốn vô hiệu hóa hộp ngày giờ. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. Viết mã- Coding Lập trình-Progarmming Khai báo biến- Variable Declaration - Click chuột phải lên hộp ngày giờ trên Hộp thoại-Dialog > chọn ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: 39 GV: Nguyễn Viết Nam
  40. - Chọn tên định danh của hộp ngày giờ ở khung Control IDs > chọn nút > xuất hiện hộp thoại Add Member Variable như hình sau: + Nhập tên biến hay tên đối tượng vào hộp . VD: m_datetime_hoadon. + Nếu chọn là biến ở hộp , thì chọn kiểu dữ liệu ở hộp . Kiểu Giải nghĩa CTime Kiểu Giờ COleDateTime Kiểu Ngày Giờ + Nếu chọn là đối tượng ở hộp , thì chọn lớp ở hộp . Kiểu Giải nghĩa COleDateTimeCtrl Lớp Ngày giờ - Chọn nút để xóa biến hay xóa đối tượng. Chèn Thông điệp- - Mở hộp thoại MFC ClassWizard. Add Message - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: 40 GV: Nguyễn Viết Nam
  41. - Chọn tên định danh của hộp ngày giờ ở khung Object IDs > chọn thông điệp ở khung Messages: Thông điệp Ý nghĩa sự kiện DTN_CLOSEUP DTN_DATETIMECHANGE DTN_DROPDOWN Nhấp đúp chuột DTN_FORMAT DTN_FORMATQUERY DTN_USERSTRING DTN_WMKEYDOWN DTN_KILLFOCUS DTN_SETFOCUS - Chọn nút > sau đó xuất hiện hộp thoại Add Member Fucntion như hình sau: + Đặt tên hàm cho hộp nhập liệu ở hộp . Các trường hợp đặt tên hàm: Thông điệp Tên hàm Ví dụ - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: void CTen_Ung_DungDlg::On() { // TODO: Add your control notification handler code here } Viết mã-Coding Lập trình- - Hàm COleDateTime(): Trả về ngày, giờ của hệ thống. Progarmming static COleDateTime WINAPI GetCurrentTime( ) throw( ); - Ví dụ-Example: COleDateTimeSpan mSpan; COleDateTime d; UpdateData(TRUE); mSpan=m_edit; d=m_picker1+mSpan; m_static_date=d.Format("%d/%m/%y"); UpdateData(FALSE); - Khi ta trừ hai dữ liệu thuộc kiểu ngày (COleDateTime), kết quả của phép toán là một đối tượng thuộc lớp COleDateTimeSpan. - Ví dụ-Example: COleDateTimeSpan d; CString s; UpdateData(TRUE); 41 GV: Nguyễn Viết Nam
  42. d=m_picker1-m_picker2; s.Format("%d",d.GetDays()); m_static_date2=s; UpdateData(FALSE); 4.12. Hộp ngày tháng-Month Calendar Control (COleDateTime, CTime) Giới thiệu-Introduction - Là một công cụ hiển thị lịch. Nó cho ta biết được ngày tháng năm hiện hành. 4.13. Thời gian-Timer (COleDateTime, CTime) Lập trình-Progarmming - Mở hộp thoại MFC ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: Chèn Thông điệp-Add Message - Chọn tên định danh của Hộp thoại-Dialog ở khung Object IDs > chọn thông điệp ở khung Messages: Thông điệp Ý nghĩa sự kiện WM_TIMER Sau một khoảng thời gian - Chọn nút > sau đó xuất hiện hộp thoại Add Member Fucntion như hình sau: + Đặt tên hàm cho hộp nhập liệu ở hộp . Các trường hợp đặt tên hàm: Thông điệp Tên hàm Ví dụ - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: void CTen_Ung_DungDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default CDialog::OnTimer(nIDEvent); } Viết mã-Coding Lập trình- - Thông điệp WM_TIMER có hàm tương ứng là OnTimer() và hàm này sẽ được gọi sau một Progarmming khoảng thời gian do ta quy định bởi hàm SetTimer(). UINT_PTR SetTimer( UINT_PTR nIDEvent, UINT nElapse, void (CALLBACK* lpfnTimer )(HWND, UINT, 42 GV: Nguyễn Viết Nam
  43. UINT_PTR, DWORD ) ); - Để hủy một thông điệp Timer được tạo ra bởi hàm SetTimer() ta dùng hàm KillTimer(). BOOL KillTimer( UINT_PTR nIDEvent ); - Ví dụ-Example: UpdateData(TRUE); if (m_check_run) SetTimer(1, 100, NULL); else KillTimer(1); void CBai1_3Dlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default CString left, right; UpdateData(TRUE); left = m_static_chuchay.Left(1); right = m_static_chuchay.Right(m_static_chuchay.GetLength()-1); m_chuchay = right + left; UpdateData(FALSE); CDialog::OnTimer(nIDEvent); } 4.14. Thanh tiến trình-Progress (CProgressCtrl) - Là một công cụ thường được sử dụng để chỉ ra sự tiến triển của một hoạt động và thường chạy từ trái sang phải khi chương trình được hoàn thành. Người sử dụng có thể dùng Progress để chỉ ra nhiệt Giới thiệu- độ, mực nước Trong ứng dụng của Window Progress được dùng khi lưu tệp chương trình hay gọi Introduction một chương trình. Progress cũng được sử dụng trong Window Explorer khi sao chép hay di chuyển một tệp. Thiết kế-Design Tạo-Create - Click chọn nút Progress trên thanh công cụ Điều khiển. Vẽ-Draw - Khi đó biểu tượng con trỏ chuột là > Click chọn trên Hộp thoại-Dialog để có thanh tiến trình là . Viết mã- Coding Gán Thuộc tính- Assign Properties - Click chuột phải lên thanh tiến trình trên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại Progress Properties của thanh tiến trình như hình sau: Thiết kế- Design + Nhập tên định danh của thanh tiến trình ở hộp . VD: IDC_PROGRESS_FLASH. + Bỏ chọn hộp nếu muốn ẩn thanh tiến trình. + Chọn hộp nếu muốn vô hiệu hóa thanh tiến trình. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. 43 GV: Nguyễn Viết Nam
  44. Viết mã- Coding Lập trình-Progarmming - Click chuột phải lên thanh tiến trình trên Hộp thoại-Dialog > chọn ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: Khai báo biến- - Chọn tên định danh của thanh tiến trình ở khung Control IDs > chọn nút > xuất Variable Declaration hiện hộp thoại Add Member Variable như hình sau: + Nhập tên biến hay tên đối tượng vào hộp . VD: m_progress_flash. + Chọn là đối tượng ở hộp , thì chọn lớp ở hộp . Kiểu Giải nghĩa CProgressCtrl Lớp Tiến trình - Chọn nút để xóa biến hay xóa đối tượng. Chèn Thông điệp- - Mở hộp thoại MFC ClassWizard. Add Message - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: 44 GV: Nguyễn Viết Nam
  45. - Chọn tên định danh của thanh tiến trình ở khung Object IDs > chọn thông điệp ở khung Messages: Thông điệp Ý nghĩa sự kiện NW_OUTOFMEMORY - Chọn nút > sau đó xuất hiện hộp thoại Add Member Fucntion như hình sau: + Đặt tên hàm cho hộp nhập liệu ở hộp . Các trường hợp đặt tên hàm: Thông điệp Tên hàm Ví dụ - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: void CTen_Ung_DungDlg::On() { // TODO: Add your control notification handler code here } Viết mã-Coding Lập trình- - Hàm SetRange(): Đặt miền giá trị cho Progress, nLower giá trị nhỏ nhất và nUpper là giá trị Progarmming lớn nhất. void SetRange( short nLower, short nUpper ); void SetRange32( int nLower, int nUpper ); - Hàm GetRange (): Trả về miền giá trị cho Progress, nLower giá trị nhỏ nhất và nUpper là giá trị lớn nhất. void GetRange( int& nLower, int& nUpper ); - Hàm SetPos(): Đặt giá trị hiện tại cho Progress. int SetPos( int nPos ); - Hàm GetPos(): Trả về giá trị hiện tại cho Progress. int GetPos( ); - Hàm SetStep(): Xác định bước tăng cho Progress. int SetStep( int nStep ); 45 GV: Nguyễn Viết Nam
  46. - Ví dụ-Example: BOOL CProgressbarDlg::OnInitDialog() { // TODO: Add extra initialization here m_progress.SetRange(1,100); m_progress.SetPos(0); m_progress.SetStep(1); } - Hàm StepIt(): Tăng giá trị của Progress theo bước tăng được định hàm SetStep(). int StepIt( ); - Ví dụ-Example: void CProgressDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default int min, max; m_progress.StepIt(); m_value.Format("%d",m_progress.GetPos()); UpdateData(FALSE); m_progress.GetRange(min, max); if(m_progress.GetPos()==max) KillTimer(1); } 4.15. Thanh cuộn-Scroll Bar (CScrollBar) - Horizontal là công cụ dùng để trượt văn bản theo chiều ngang khi văn bản quá dài. Cũng có một Giới thiệu- công cụ trượt văn bản theo chiều dọc là Vertical. Chúng ta thường thấy trong ứng dụng Microsoft Introduction Word, Notepad, Wordpad. 4.16. Thanh trượt-Slider (CSliderCtrl) - Là một thanh trượt mà bạn có thể di chuyển giữa hai điểm, người sử dụng có thể dùng chuột hay các Giới thiệu- phím mũi tên để di chuyển. Slider thường được dùng khi người sử dụng lựa chọn một giá trị trong một Introduction khoảng xác định. Trong các ứng dụng của Window người sử dụng có thể dùng kiểu thanh trượt thay đổi liên tục hoặc dùng thanh trượt thay đổi nhảy bậc. Thiết kế-Design Tạo-Create - Click chọn nút Slider trên thanh công cụ Điều khiển. Vẽ-Draw - Khi đó biểu tượng con trỏ chuột là > Click chọn trên Hộp thoại-Dialog để có thanh trượt là . Viết mã- Coding Gán Thuộc tính- Assign Properties Thiết kế-Design - Click chuột phải lên thanh trượt trên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại Slider Properties của thanh trượt như hình sau: + Nhập tên định danh của thanh trượt ở hộp . VD: IDC_SLIDER_CO. + Bỏ chọn hộp nếu muốn ẩn thanh trượt. + Chọn hộp nếu muốn vô hiệu hóa thanh trượt. 46 GV: Nguyễn Viết Nam
  47. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. Viết mã-Coding Lập trình-Progarmming - Click chuột phải lên thanh trượt trên Hộp thoại-Dialog > chọn ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: - Chọn tên định danh của thanh trượt ở khung Control IDs > chọn nút > xuất hiện hộp thoại Add Member Variable như hình sau: Khai báo biến- Variable Declaration + Nhập tên biến hay tên đối tượng vào hộp . VD: m_slider_co. + Nếu chọn là biến ở hộp , thì chọn kiểu dữ liệu ở hộp . Kiểu Giải nghĩa Int Kiểu Số nguyên + Nếu chọn là đối tượng ở hộp , thì chọn lớp ở hộp . Kiểu Giải nghĩa CSliderCtr Lớp Trượt l - Chọn nút để xóa biến hay xóa đối tượng. Chèn Thông điệp- - Mở hộp thoại MFC ClassWizard. Add Message - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: 47 GV: Nguyễn Viết Nam
  48. - Nếu chọn tên định dang của Dialog chứa thanh trượt ở hộp > chọn thông điệp ở khung Messages: Thông điệp Ý nghĩa sự kiện WM_HSCROLL Kéo ngang thanh trượt WM_VSCROLL Kéo dọc thanh trượt - Nếu cChọn tên định danh của thanh trượt ở khung Object IDs > chọn thông điệp ở khung Messages: Thông điệp Ý nghĩa sự kiện WM_HSCROLL Kéo ngang thanh trượt WM_VSCROLL Kéo dọc thanh trượt NW_OUTOFMEMORY NM_RELEASECAPTURE NM_CUSTOMDRAW - Chọn nút > sau đó xuất hiện hộp thoại Add Member Fucntion như hình sau: + Đặt tên hàm cho hộp nhập liệu ở hộp . Các trường hợp đặt tên hàm: Thông điệp Tên hàm Ví dụ - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: void CTen_Ung_DungDlg::On() { // TODO: Add your control notification handler code here } Viết mã-Coding Lập trình- Sets the range (minimum and maximum positions) for Mục đích Progarmming the slider in a slider control. (Purpose) Đặt giá trị lớn nhất và nhỏ nhất cho thanh Slider. void SetRange( int nMin, CSliderCtrl::SetRange Cú pháp int nMax, (Syntax) BOOL bRedraw = FALSE ); Ví dụ (Example) Mục đích Sets the current position of the slider in a slider (Purpose) control. void SetPos( Cú pháp CSliderCtrl::SetPos int nPos (Syntax) ); Ví dụ (Example) 48 GV: Nguyễn Viết Nam
  49. Mục đích Retrieves the current position of the slider in a slider (Purpose) control. Cú pháp CSliderCtrl::GetPos int GetPos( ) const; (Syntax) Ví dụ (Example) m_slider.SetRange (1,20); m_slider.SetPos (1); m_static.Format ("%d",m_slider.GetPos()); UpdateData(FALSE); - Hàm SetRange(): void SetRange( int nMin, int nMax, BOOL bRedraw = FALSE ); - Hàm SetPos(): Đặt giá trị cho thanh Slider. void SetPos( int nPos ); - Ví dụ-Example: BOOL CProgressbarDlg::OnInitDialog() { // TODO: Add extra initialization here m_slider.SetRange(1,10); m_slider.SetPos(5); m_edit.Format("%d",m_slider.GetPos()); UpdateData(FALSE); } - Hàm GetPos(): Trả về giá trị của thanh Slider. int GetPos( ) const; - Ví dụ-Example: void CSliderDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default m_edit.Format("%d",m_slider.GetPos()); UpdateData(FALSE); CDialog::OnHScroll(nSBCode, nPos, pScrollBar); } 4.17. Hộp tăng giảm giá trị-Spin () - Là một công cụ gồm hai mũi tên nhỏ để điều chỉnh giá trị. Spin thường được sử dụng để điều Giới thiệu- chỉnh một giá trị nào đó, người sử dụng có thể dùng chuột hay các mũi tên lên xuống để thay đổi giá Introduction trị. 4.18. Cây-Tree Control (CTreeCtrl) Giới thiệu- - Là công cụ rất đặc trưng của các ứng dụng của Windows, nó được sử dụng rất nhiều như trong Introduction Windows Explorer để hiển thị dữ liệu. List Control thường được dùng để liệt kê thư mục và tập tin. Thiết kế-Design Tạo-Create - Click chọn nút Tree Control trên thanh công cụ Điều khiển. Vẽ-Draw - Khi đó biểu tượng con trỏ chuột là > Click chọn trên Hộp thoại-Dialog để có cây là . 49 GV: Nguyễn Viết Nam
  50. Viết mã-Coding Gán Thuộc tính- Assign Properties - Click chuột phải lên cây trên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại Tree Control Properties của cây như hình sau: Thiết kế-Design + Nhập tên định danh của cây ở hộp . VD: IDC_TREE_THUMUC. + Bỏ chọn hộp nếu muốn ẩn cây. + Chọn hộp nếu muốn vô hiệu hóa cây. - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. Viết mã-Coding Lập trình-Progarmming Khai báo biến- Variable Declaration - Click chuột phải lên cây trên Hộp thoại-Dialog > chọn ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: - Chọn tên định danh của cây ở khung Control IDs > chọn nút > xuất hiện hộp thoại Add Member Variable như hình sau: + Nhập tên biến hay tên đối tượng vào hộp . VD: m_tree_thumuc. + Chọn là đối tượng ở hộp , thì chọn lớp ở hộp . Kiểu Giải nghĩa 50 GV: Nguyễn Viết Nam
  51. CTreeCtrl Lớp Trượt - Chọn nút để xóa biến hay xóa đối tượng. - Mở hộp thoại MFC ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: - Chọn tên định danh của cây ở khung Object IDs > chọn thông điệp ở khung Messages: Thông điệp Ý nghĩa sự kiện NM_CLICK Nhấp chuột NM_DBCLK Nhấp đúp chuột NM_KILLFOCUS NM_OUTOFMEMORY NM_RCLICK Nhấp chuột phải NM_RDBCLK Nhấp đúp chuột phải Chèn Thông điệp-Add NM_RETURN Message NM_SETFOCUS TVN_BEGINDRAG TVN_BEGINLABELEDIT TVN_BEGINRDRAG TVN_DELETEITEM TVN_ENDLABELEDIT TVN_GETDISPINFO TVN_ITEMEXPANDED TVN_ITEMEXPANDING TVN_KEYDOWN TVN_SELCHANGED TVN_SELCHANGING TVN_SETDISPINFO - Chọn nút > sau đó xuất hiện hộp thoại Add Member Fucntion như hình sau: + Đặt tên hàm cho hộp nhập liệu ở hộp . Các trường hợp đặt tên hàm: Thông điệp Tên hàm Ví dụ - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: void CTen_Ung_DungDlg::On() { // TODO: Add your control notification handler code here } Viết mã-Coding Lập trình- - Hàm InsertItem(): Thêm một phần tử mới vào Tree Control. Progarmming HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, 51 GV: Nguyễn Viết Nam
  52. HTREEITEM hInsertAfter = TVI_LAST ); - Ví dụ-Example: HTREEITEM goc,la; goc = m_tree.InsertItem("a"); m_tree.InsertItem("a1",goc); la = m_tree.InsertItem("a2",goc); m_tree.InsertItem("a22",la); m_tree.InsertItem("a21",la); goc = m_tree.InsertItem("b"); la = m_tree.InsertItem("b1",goc); m_tree.InsertItem("b11",la); m_tree.InsertItem("b12",la); m_tree.InsertItem("b2",goc); - Hàm DeleteAllItems(): Xóa tất cả các phần tử có trong Tree Control. BOOL DeleteAllItems( ); - Hàm GetSelectedItem(): Trả về phần tử đang được lựa chọn hiện tại trong Tree Control. HTREEITEM GetSelectedItem( ) const; - Hàm GetItemText(): Trả về một chuỗi là giá trị của một phần tử được xác định bởi hItem trong Tree Control. CString GetItemText( HTREEITEM hItem ) const; - Hàm GetRootItem(): Trả về phần tử gốc của Tree Control. HTREEITEM GetRootItem( ) const; - Hàm GetParentItem(): Trả về phần tử cha của phần tử hItem. Trong những trường hợp khác hàm trả về giá trị NULL. HTREEITEM GetParentItem( HTREEITEM hItem ) const; 4.19. Thẻ-Tab Control (CTreeCtrl) Giới thiệu- - Là một công cụ giống như trang đặc tính, nó thường được xây dựng dựa trên việc hiển thị từng Introduction Dialog tương ứng với từng trang Tab. 4.20. Danh sách-List Control (CListCtrl) Giới thiệu-Introduction - Là công cụ rất đặc trưng của các ứng dụng của Windows, Thiết kế-Design Tạo-Create - Click chọn nút List Control trên thanh công cụ Điều khiển. Vẽ-Draw - Khi đó biểu tượng con trỏ chuột là > Click chọn trên Hộp thoại-Dialog để có danh sách là . Viết mã- Coding Gán Thuộc tính- Assign Properties Thiết kế-Design - Click chuột phải lên danh sách trên Hộp thoại-Dialog > chọn Properties. - Sau đó xuất hiện hộp thoại List Control Properties của danh sách như hình sau: 52 GV: Nguyễn Viết Nam
  53. + Nhập tên định danh của danh sách ở . VD: IDC_LIST_HOADON. + Bỏ chọn hộp nếu muốn ẩn danh sách. + Chọn hộp nếu muốn vô hiệu hóa danh sách. - Chọn thẻ > xuất hiện hộp thoại List Control Properties như hình sau: + Chọn kiểu hiển thị danh sách ở hộp . Kiểu Giải nghĩa Icon Biểu tượng Small Icon Biểu tượng nhỏ List Danh sách Report Báo cáo - Rồi ấn phím Enter. - Ấn phím ESC để hủy bỏ gán thuộc tính. Viết mã-Coding Lập trình-Progarmming Khai báo biến- Variable Declaration - Click chuột phải lên danh sách trên Hộp thoại-Dialog > chọn ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: - Chọn tên định danh của danh sách ở khung Control IDs > chọn nút > xuất hiện hộp thoại Add Member Variable như hình sau: 53 GV: Nguyễn Viết Nam
  54. + Nhập tên biến hay tên đối tượng vào hộp . VD: m_list_hoadon. + Chọn là đối tượng ở hộp , thì chọn lớp ở hộp . Kiểu Giải nghĩa CListCtrl Lớp Danh sách - Chọn nút để xóa biến hay xóa đối tượng. - Mở hộp thoại MFC ClassWizard. - Chọn thẻ > sau đó xuất hiện hộp thoại MFC ClassWizard như hình sau: - Chọn tên định danh của danh sách ở khung Object IDs > chọn thông điệp ở khung Messages: Chèn Thông điệp- Thông điệp Ý nghĩa sự kiện Add Message NM_CLICK Nhấp chuột NM_DBCLK Nhấp đúp chuột NM_KILLFOCUS NM_OUTOFMEMORY NM_RCLICK Nhấp chuột phải NM_RDBCLK Nhấp đúp chuột phải NM_RETURN NM_SETFOCUS LVN_BEGINDRAG LVN_BEGINLABELEDIT LVN_BEGINRDRAG LVN_COLUMNCLICK LVN_DELETEALLITEMS LVN_DELETEITEM LVN_ENDLABELEDIT LVN_GETDISPINFO LVN_INSERTITEM LVN_ITEMCHANGED LVN_ITEMCHANGING LVN_KEYDOWN LVN_SETDISPINFO 54 GV: Nguyễn Viết Nam
  55. LVN_ODCACHEHINT LVN_ODFINDITEM LVN_ODSTATECHANGED HDN_ITEMCHANGED HDN_ITEMCHANGING HDN_TRACK HDN_ITEMCLICK HDN_ITEMDBLCLICK HDN_BEGINTRACK HDN_ENDTRACK HDN_DIVIDERDBLCLICK HDN_BEGINDRAG HDN_ENDDRAG HDN_GETDISPINFO - Chọn nút > sau đó xuất hiện hộp thoại Add Member Fucntion như hình sau: + Đặt tên hàm cho hộp nhập liệu ở hộp . Các trường hợp đặt tên hàm: Thông điệp Tên hàm Ví dụ - Chọn nút để xóa hàm. - Chọn nút để viết mã lệnh trong hàm như sau: void CTen_Ung_DungDlg::On() { // TODO: Add your control notification handler code here } Viết mã-Coding Lập trình- InsertColumn(0,text,) InsertColumn(n,text,) Progarmming InsertItem(0,text) SetItemText(0,n,text) InsertItem(m,text) SetItemText(m,n,text) Mục đích Inserts a new column in a list view control. (Purpose) Hàm dùng để chèn một cột mới vào List Control. int InsertColumn( int nCol, const LVCOLUMN* pColumn ); int InsertColumn( Cú pháp int nCol, (Syntax) LPCTSTR lpszColumnHeading, int nFormat = LVCFMT_LEFT, int nWidth = -1, CListCtrl::InsertColumn int nSubItem = -1 ); Ví dụ BOOL CBaiDlg::OnInitDialog() (Example) { // TODO: Add extra initialization here m_list.InsertColumn(0, "Ho ten", LVCFMT_LEFT, 120); m_list.InsertColumn(1, "Diem", LVCFMT_RIGHT, 70); } CListCtrl::InsertItem Mục đích Dùng để chèn một phần tử vào List Control. (Purpose) Cú pháp int InsertItem( (Syntax) const LVITEM* pItem ); 55 GV: Nguyễn Viết Nam
  56. int InsertItem( int nItem, LPCTSTR lpszItem ); int InsertItem( int nItem, LPCTSTR lpszItem, int nImage ); UpdateData(TRUE); m_list.InsertItem(0,m_edit_hoten); Ví dụ (Example) int index = m_list.GetItemCount(); m_list.InsertItem(index,m_edit_hoten); UpdateData(FALSE); Mục đích Changes the text of a list view item or subitem. (Purpose) BOOL SetItemText( int nItem, Cú pháp int nSubItem, (Syntax) LPCTSTR lpszText CListCtrl::SetItemText ); CString strDiem; Ví dụ UpdateData(TRUE); (Example) strDiem.Format("%d", m_edit_diem); m_list.SetItemText(0,1,strDiem); UpdateData(FALSE); Mục đích Retrieves the number of items in a list view control. (Purpose) Cú pháp CListCtrl::GetItemCount int GetItemCount( ) const; (Syntax) Ví dụ (Example) Mục đích Deletes all items from the list view control. (Purpose) Xóa tất cả các phần tử có trong List Control. Cú pháp CListCtrl::DeleteAllItems BOOL DeleteAllItems( ); (Syntax) Ví dụ (Example) Mục đích Deletes an item from a list view control. (Purpose) Xóa một phần tử trong List Control. BOOL DeleteItem( Cú pháp CListCtrl::DeleteItem int nItem (Syntax) ); Ví dụ (Example) 4.21. Picture Giới thiệu-Introduction - Là một công cụ dùng để hiển thị hình ảnh dạng Bitmap. 4.22. Images, Bitmaps và Icons 4.23. Hoạt hình-Animate - Là một công cụ dùng để đọc file có đuôi (*.avi). Nó thường được sử dụng để minh họa chương Giới thiệu- trình của bạn thêm phong phú. Các hình ảnh chúng ta thường gặp trong Windows là: khi copy file, Introduction tìm file, xóa file. 56 GV: Nguyễn Viết Nam
  57. 4.24. Hộp địa chỉ mạng-IP Address Giới thiệu-Introduction - Là một công cụ dùng để nhập các địa chỉ IP đối với các ứng dụng liên kết mạng. 4.25. Hộp thông báo-Message Box (Lớp CWnd) int MessageBox( HWND hWnd, LPCTSTR lpText, Cú pháp-Syntax LPCTSTR lpCaption, UINT uType ); int MessageBox(“Text1”,”Text2”,MB_OK + MB_ICONINFORMATION) - Text1: Hiển thị dòng nội dung thông báo trên hộp thông báo. - Text2: Hiển thị dòng tiêu đề của hộp thông báo. - Tổ hợp nút: ID Nút MB_ABORTRETRYIGNORE Abort, Retry, Ignore MB_OK OK MB_OKCANCEL OK, Cancle MB_RETRYCANCEL Retry, Cancel Đối số-Parameter MB_YESNO Yes, No MB_YESNOCANCEL Yes, No, Cancel - Biểu tượng: ID Biểu tượng MB_ICONINFORMATION Thông tin MB_ICONQUESTION Biểu tượng dấu hỏi MB_ICONSTOP Dấu chấm MB_ICONEXCLAM Dấu chấm than ID Nút IDABORT Abort IDRETRY Retry IDIGNORE Ignore Giá trị trả về-Return Value IDYES Yes IDNO No IDOK OK IDCANCEL Cancel Ví dụ-Example MessageBox("Chao ban!"); 5. Giải thuật (Algorithm) 5.1. Thoát-Exit Cú pháp-Syntax OnOK(); 5.2. GetDlgItem Mục đích- - Trả về con trỏ chỉ đến một Control hoặc cửa sổ con trong một Dialog hoặc 1 cửa sổ khác có chỉ số Purpose nID. Mô hình-Model ID của Điều khiển GetDlgItem Con trỏ virtual CWnd* GetDlgItem( int nID ) const; Cú pháp-Syntax virtual void GetDlgItem( int nID, HWND* phWnd ) const; Ví dụ-Example CButton* pButton=(CButton*)GetDlgItem(IDC_BUTTON1); 57 GV: Nguyễn Viết Nam
  58. 5.3. ShowWindow TRUE (Đúng) UpdateData Điều khiển Biến Mô hình-Model FALSE (Sai) UpdateData Điều khiển Biến Cú pháp-Syntax BOOL UpdateData(BOOL bSaveAndValidate) 5.4. UpdateData TRUE (Đúng) UpdateData Điều khiển Biến Mô hình-Model FALSE (Sai) UpdateData Điều khiển Biến Cú pháp-Syntax BOOL UpdateData(BOOL bSaveAndValidate) Lập trình- * Cập nhật Button trong quá trình thực thi (Lớp CWnd): Progarmming - Hàm IsWindowEnabled(): Hàm trả về khác 0 nếu cửa sổ Enable. BOOL IsWindowEnabled( ) const; - Hàm EnableWindow(): Enable (TRUE) hoặc Disable (FALSE) một cửa sổ. BOOL EnableWindow( BOOL bEnable = TRUE ); - Ví dụ-Example: CButton* pButton2=(CButton*)GetDlgItem(IDC_BUTTON2); if(pButton2->IsWindowEnabled()) pButton2->EnableWindow(FALSE); else pButton2->EnableWindow(TRUE); - Hàm IsWindowVisibled(): hàm trả về khác 0 nếu cửa sổ Visible. BOOL IsWindowVisible( ) const; - Hàm ShowWindow(): Đặt trạng thái Visible của cửa sổ (SW_HIDE: ẩn cửa sổ, SW_SHOW: hiện cửa sổ) BOOL ShowWindow( int nCmdShow ); - Ví dụ-Example: CButton* pButton3=(CButton*)GetDlgItem(IDC_BUTTON3); if(pButton3->IsWindowVisible()) pButton3->ShowWindow(SW_HIDE); else pButton3->ShowWindow(SW_SHOW); - Hàm SetWindowText(): Đặt tiêu đề cho một cửa sổ. void SetWindowText( LPCTSTR lpszString ); · Hàm GetWindowText(): Sao chép nội dung tiêu đề của cửa sổ và chứa vào thành phần thuộc kiểu chuỗi (LPTSTR hoặc CString) int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const; void GetWindowText( CString& rString ) const; - Ví dụ-Example: 58 GV: Nguyễn Viết Nam
  59. CButton* pButton4=(CButton*)GetDlgItem(IDC_BUTTON4); pButton4->SetWindowText("Nut 4"); Đồ họa-Graphic Vẽ hình-Draw - Click chọn menu > chọn New Class. - Sau đó xuất hiện hộp thoại New Class: Tạo lớp CDiem + Chọn loại lớp là Generic Class ở hộp . + Nhập tên lớp ở hộp . + Nhập lớp kế thừa là CObject ở mục . + Nhập phạm vi là public ở mục . - Vào lớp CDiem.h, nhập nội dung sau vào phần public: CPoint m1,m2; //Khai bao 2 diem int mShape; //Bien loai hinh int mWidth; //Bien do day COLORREF color; //Bien mau - Nhập nội dung sau vào phần //Attributes: CPoint mOld, mCur; //Khai bao 2 diem CObArray mDS; //Tao mang danh sach Lớp Doc.h int mShape; //Bien loai hinh int mWidth; //Bien do day sCOLORREF mColor; //Bien mau CVehinhDoc* pDoc = GetDocument(); Sự kiện if (nFlags & MK_LBUTTON) WM_LbuttonDown { của lớp View pDoc->mOld = point; } Sự kiện WM_LbuttonUp của lớp View Sự kiện WM_MouseMove CVehinhDoc* pDoc = GetDocument(); của lớp View if (nFlags & MK_LBUTTON) { pDoc->mCur = point; Invalidate(); //Thuc hien phuong thuc OnDraw 59 GV: Nguyễn Viết Nam
  60. } CDiem* pDiem; //CPen* pPen; //Ve cac diem truoc do den diem hien tai for(int i=0; i mDS.GetSize(); i++) { //mPen.DeleteObject(); pDiem = (CDiem*)pDoc->mDS.GetAt(i); //mPen.CreatePen(PS_SOLID, 1, pDiem->color); //if(i==0) //pPen = pDC->SelectObject(&mPen); //else //pDC->SelectObject(&mPen); DrawShape(pDC, pDiem->type, pDiem->m1, pDiem->m2); } DrawShape(pDC, pDoc->type, pDoc->m1, pDoc->m2); Hàm DrawShape - Nhập dòng #include "Diem.h". - Chọn thẻ > Click chuột phải lên lớp View > Chọn Add Member Function. - Sau đó xuất hiện hộp thoại Add Member Function như hình sau: Phương thức OnDraw của lớp View o Nhập kiểu dữ liệu trả về là void ở hộp . o Nhập tên hàm là DrawShape ở hộp Lớp . View.cpp - Nhập đối số cho hàm như sau: DrawShape(CDC* pDC, int mShape, CPoint m1, CPoint m2) - Kế đó nhập nội dung hàm như sau: void CVeHinhView::DrawShape(CDC* pDC, int mShape, CPoint m1, CPoint m2) switch(mShape) { case 1: pDC->MoveTo(m1); pDC->LineTo(m2); break; case 2: pDC->Rectangle(m1.x, m1.y, m2.x, m2.y); break; case 3: pDC->Ellipse(m1.x, m1.y, m2.x, m2.y); break; } } - Thêm đối số cho hàm DrawShape như sau: // Implementation Lớp View.h public: void DrawShape(CDC* ,int ,CPoint ,CPoint ); Sự kiện WM_LButtonUp 60 GV: Nguyễn Viết Nam
  61. CVehinhDoc* pDoc = GetDocument(); CDiem* pDiem = new CDiem(); pDiem->m1 = pDoc->mOld; pDiem->m2 = pDoc->mCur; của lớp View pDiem->mShape = pDoc->mShape; pDiem->mColor = pDoc->mColor; pDoc->mDS.Add(pDiem); } - MFC: CVeHinhView > CVeHinhView > WM_LButtonDown - MFC: CVeHinhView > CVeHinhView > WM_LButtonUp - MFC: CVeHinhView > CVeHinhView > WM_MouseMove - MFC: CVeHinhView > ID_LUACHON_DUONGTHANG > COMMAND void CVehinhView::OnLuachonDuongthang() { // TODO: Add your command handler code here CVehinhDoc* pDoc = GetDocument(); pDoc->type = 1; //line; } - MFC: CVeHinhView > ID_LUACHON_DUONGTHANG > UPDATE_COMMAND_UI: void CVehinhView::OnUpdateLuachonDuongthang(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here CVehinhDoc* pDoc = GetDocument(); if(pDoc->type==1) pCmdUI->SetCheck(1); else pCmdUI->SetCheck(0); } Thiết kế Điều khiển-Control Design Vẽ-Draw 1) Resource View > Menu > IDR_MAINFRAME ID_LUACHON_DUONGTHANG ID_LUACHON_HINHCHUNHAT ID_LUACHON_ELIP Thuộc tính-Properties Viết mã-Coding Khai báo Biến-Variable Declaration Chèn Thông điệp- Add Message 61 GV: Nguyễn Viết Nam
  62. 1. Cài đặt (Setup) 1 1.1. Visual C++ 6.0 1 2. Cửa sổ làm việc (Window) 1 2.1. Khởi động-Open,Thoát-Exit 1 2.2. Giao diện (Interface) 1 3. Dự án (Project) - DPW 2 * Cập nhật ứng dụng: 5 5 5 5 5 * Đóng ứng dụng: 5 5 4. Giao diện (Interface) 5 4.1. Trình đơn-Menu (CWnd,CMenu) 5 4.2. Cửa sổ-Dialog~Lớp-Class 11 4.2.1. Modal (CDialog) 11 4.2.2. Modeless (CDialog) 13 4.3. Nút-Button (CButton,CWnd) 16 4.4. Nhãn-Static Text (CString,CStatic) 19 4.5. Hộp nhập liệu-Edit Text (CEdit) 22 4.6. Khung nhóm-Group Box 24 4.7. Hộp lựa chọn-Radio Box (CButton) 25 4.8. Hộp đánh dấu-Check Box (CButton) 28 4.9. Hộp danh sách-List Box (CListBox) 31 4.10. Hộp danh sách thả xuống-Combo Box (CComboBox) 35 4.11. Hộp ngày giờ-Date Time Picker (COleDateTime, CTime) 39 4.12. Hộp ngày tháng-Month Calendar Control (COleDateTime, CTime) 42 4.13. Thời gian-Timer (COleDateTime, CTime) 42 4.14. Thanh tiến trình-Progress (CProgressCtrl) 43 4.15. Thanh cuộn-Scroll Bar (CScrollBar) 46 4.16. Thanh trượt-Slider (CSliderCtrl) 46 4.17. Hộp tăng giảm giá trị-Spin () 49 4.18. Cây-Tree Control (CTreeCtrl) 49 4.19. Thẻ-Tab Control (CTreeCtrl) 52 4.20. Danh sách-List Control (CListCtrl) 52 4.21. Picture 56 4.22. Images, Bitmaps và Icons 56 4.23. Hoạt hình-Animate 56 4.24. Hộp địa chỉ mạng-IP Address 57 4.25. Hộp thông báo-Message Box (Lớp CWnd) 57 5. Giải thuật (Algorithm) 57 5.1. Thoát-Exit 57 5.2. GetDlgItem 57 5.3. ShowWindow 58 5.4. UpdateData 58 62 GV: Nguyễn Viết Nam