Bài giảng Lập trình Windows - Toolbar - Menubar - DialogBar

pdf 86 trang hapham 2520
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình Windows - Toolbar - Menubar - DialogBar", để 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:

  • pdfbai_giang_lap_trinh_windows_toolbar_menubar_dialogbar.pdf

Nội dung text: Bài giảng Lập trình Windows - Toolbar - Menubar - DialogBar

  1. Đại Học Sư Phạm Tp. Hồ Chí Minh Khoa Toán – Tin Học LẬP TRÌNH WINDOWS Toolbar - Menubar DialogBar ™ Tạo và xử lý Toolbar ™ Tạo và xử lý Menubar ™ Tạo và xử lý Dialogbar Trần Ngọc Bảo Email: tnbao.dhsp@gmail.com
  2. Đại Học Sư Phạm Tp. Hồ Chí Minh Khoa Toán – Tin Học LẬP TRÌNH WINDOWS Toolbar - Menubar DialogBar Lập trình với Toolbar
  3. NỘI DUNG ™ Giới thiệu về Tool bar và Dialog bar ™ Tạo và xử lý tool bar ™ Radio & Check Box buttons trên tool bar ™ Thêm combo box vào Tool bar ™ Thêm Flyby và ToolTip ™ Dialog bar ™ Resizable dialog bar Tran Ngoc Bao 3 Dai hoc Su Pham TP.HCM
  4. Tool bar – Dialog bar Tool bar Dialog bar Tree Tool bar control Tool bar Tool bar Tool bar Tran Ngoc Bao 4 Dai hoc Su Pham TP.HCM
  5. Tool bar – Dialog bar Tool bar (Docked to Top) Dialog bar (docked to Left) Tool bar Tool Bar (Floated) (Docked To Right) Tool bar (Docked to Left) Tool bar (Docked to bottom) Tree control Tran Ngoc Bao 5 Dai hoc Su Pham TP.HCM
  6. Các thành phần trên Tool bar Push button Bitmap button Check box button Separator Radio button Radio button Close button Tool bar Caption Separator Combo box Separator Check box button Tran Ngoc Bao 6 Dai hoc Su Pham TP.HCM
  7. Tạo và xử lý Tool bar ™ Tạo một ứng dụng có Tool bar mặc định bằng AppWizard ™ Tạo và xử lý Tool bar bằng lớp CToolBar Tran Ngoc Bao 7 Dai hoc Su Pham TP.HCM
  8. Tool bar - Tạo ứng dụng bằng AppWizard ™ Chọn menu File Æ New ™ Chọn Tab Projects ™ Chọn loại project “MFC AppWizard (exe)” ™ Đặt tên project trong ô “Project name” ™ Xác định đường dẫn thư mục trong “Location” ™ Step 1: Chọn loại ứng dụng “Single Document”, bỏ option “Document/View architecture support” ™ Nhấn “Next” đến “Step 4 of 6” Tran Ngoc Bao 8 Dai hoc Su Pham TP.HCM
  9. Tool bar - Tạo ứng dụng bằng AppWizard Chọn option “Docking toolbar” để AppWizard tự động tạo ra tool bar mặc định Tran Ngoc Bao 9 Dai hoc Su Pham TP.HCM
  10. Tool bar - Tạo ứng dụng bằng AppWizard Tool bar mặc định Kết quả chạy chương trình tạo tool bar bằng AppWizard Tran Ngoc Bao 10 Dai hoc Su Pham TP.HCM
  11. Tool bar - Các xử lý trong lớp CMainFrame ™ Khai báo biến CToolBar class CMainFrame : public CFrameWnd { . protected: //khai báo biến xử lý default tool bar CToolBar m_wndToolBar; . } ™ Các xử lý trong hàm OnCreate ƒ Bước 1: Gọi hàm tạo lập cửa sổ tool bar CToolBar::Create( ) ƒ Bước 2: Load resource tool bar CToolBar::LoadToolBar( ) ƒ Bước 3: Thiết lập thuộc tính tool bar CToolBar::SetBarStyle( ) ƒ Bước 4: Gọi hàm CToolBar::EnableDocking( ) ƒ Bước 5: Gọi hàm CToolBar::EnableDocking( ) để gắn tool bar Tran Ngoc Bao 11 Dai hoc Su Pham TP.HCM
  12. Tool bar - Các xử lý trong hàm OnCreate int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); } Tran Ngoc Bao 12 Dai hoc Su Pham TP.HCM
  13. Thêm Tool bar vào ứng dụng ™ Thêm mới Tool bar resource ™ Khai báo biến CToolBar ™ Tạo tool bar ™ Thiết lập thuộc tính tool bar ™ Gắn tool bar ™ Xử lý message Tran Ngoc Bao 13 Dai hoc Su Pham TP.HCM
  14. Thêm mới tool bar resource Tool bar resource Tran Ngoc Bao 14 Dai hoc Su Pham TP.HCM
  15. Thêm mới tool bar resource (tt) Chọn mục Insert Toolbar để thêm mới tool bar resource vào ứng dụng Tran Ngoc Bao 15 Dai hoc Su Pham TP.HCM
  16. Thêm mới tool bar resource (tt) New tool bar resource Tran Ngoc Bao 16 Dai hoc Su Pham TP.HCM
  17. Thêm mới tool bar resource (tt) Tran Ngoc Bao 17 Dai hoc Su Pham TP.HCM
  18. Thêm mới tool bar resource (tt) Resource editor Tran Ngoc Bao 18 Dai hoc Su Pham TP.HCM
  19. Thêm mới tool bar resource (tt) Separator Bitmap ID Tool bar button Current item Tran Ngoc Bao 19 Dai hoc Su Pham TP.HCM
  20. Khai báo biến quản lý tool bar class CMainFrame : public CFrameWnd { protected: // control bar embedded members CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; CToolBar m_wndDrawBox; }; Tran Ngoc Bao 20 Dai hoc Su Pham TP.HCM
  21. Tạo & xác lập thuộc tính cho Toolbar int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // Tạo Toolbar if (!m_wndDrawBox.CreateEx(this) || !m_wndDrawBox.LoadToolBar(IDR_DRAW_TOOLBAR)) { return -1; } // Xác lập thuộc tính Toolbar m_wndDrawBox.SetBarStyle(m_wndDrawBox.GetBarStyle()| CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); } Tran Ngoc Bao 21 Dai hoc Su Pham TP.HCM
  22. Gắn Toolbar vào cửa sổ chính int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { . // Tạo Toolbar // Xác lập thuộc tính Toolbar // Gắn Toolbar vào cửa sổ chính m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); } Tran Ngoc Bao 22 Dai hoc Su Pham TP.HCM
  23. Gắn Toolbar vào bên trên cửa sổ chính Toolbar gắn bên trên Tran Ngoc Bao 23 Dai hoc Su Pham TP.HCM
  24. Gắn Toolbar vào bên trên cửa sổ chính int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { . // Tạo Toolbar // Xác lập thuộc tính Toolbar // Gắn Toolbar vào cửa sổ chính m_wndDrawBox.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_TOP); DockControlBar(&m_wndDrawBox,AFX_IDW_DOCKBAR_TOP); } Tran Ngoc Bao 24 Dai hoc Su Pham TP.HCM
  25. Gắn Toolbar vào bên trái cửa sổ chính Toolbar gắn bên trái Tran Ngoc Bao 25 Dai hoc Su Pham TP.HCM
  26. Gắn Toolbar vào bên trái cửa sổ chính int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { . // Tạo Toolbar // Xác lập thuộc tính Toolbar // Gắn Toolbar vào cửa sổ chính m_wndDrawBox.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_LEFT); DockControlBar(&m_wndDrawBox,AFX_IDW_DOCKBAR_LEFT); } Tran Ngoc Bao 26 Dai hoc Su Pham TP.HCM
  27. Gắn Toolbar vào bên dưới cửa sổ chính Toolbar gắn bên dưới Tran Ngoc Bao 27 Dai hoc Su Pham TP.HCM
  28. Gắn Toolbar vào bên dưới cửa sổ chính int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { . // Tạo Toolbar // Xác lập thuộc tính Toolbar // Gắn Toolbar vào cửa sổ chính m_wndDrawBox.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_BOTTOM); DockControlBar(&m_wndDrawBox,AFX_IDW_DOCKBAR_BOTTOM); } Tran Ngoc Bao 28 Dai hoc Su Pham TP.HCM
  29. Gắn Toolbar vào bên phải cửa sổ chính Toolbar gắn bên phải Tran Ngoc Bao 29 Dai hoc Su Pham TP.HCM
  30. Gắn Toolbar vào bên dưới cửa sổ chính int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { . // Tạo Toolbar // Xác lập thuộc tính Toolbar // Gắn Toolbar vào cửa sổ chính m_wndDrawBox.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_RIGHT); DockControlBar(&m_wndDrawBox,AFX_IDW_DOCKBAR_RIGHT); } Tran Ngoc Bao 30 Dai hoc Su Pham TP.HCM
  31. Hiển thị ToolBar N cột ToolBar 2 cột Tran Ngoc Bao 31 Dai hoc Su Pham TP.HCM
  32. Hiển thị ToolBar N cột void CMainFrame::SetColumns(int nCols,CToolBar tbToolBox) { int nColumns = nCols; int nCount = tbToolBox.GetCount(); for(int i = 0; i < nCount; i++) { UINT nStyle = tbToolBox.GetButtonStyle(i); BOOL bWrap = (((i + 1) % nColumns) == 0); if (bWrap) nStyle |= TBBS_WRAPPED; else nStyle &= ~TBBS_WRAPPED; tbToolBox.SetButtonStyle(i, nStyle); } RecalcLayout(); Invalidate(); } Tran Ngoc Bao 32 Dai hoc Su Pham TP.HCM
  33. Xử lý sự kiện click lên các button trong tool bar Chọn button cần xử lý Chọn COMMAND Chọn Add Function Tran Ngoc Bao 33 Dai hoc Su Pham TP.HCM
  34. Xử lý sự kiện click lên các button trong tool bar //tập tin *.h class CAddNewTooBarView : public CView { afx_msg void OnButtonBold(); }; //tập tin *.cpp BEGIN_MESSAGE_MAP(CAddNewTooBarView, CView) //{{AFX_MSG_MAP(CAddNewTooBarView) ON_COMMAND(ID_BUTTON_BOLD, OnButtonBold) //}}AFX_MSG_MAP END_MESSAGE_MAP() void CAddNewTooBarView::OnButtonBold() { MessageBox(“Nhan nut B (Bold"); } Tran Ngoc Bao 34 Dai hoc Su Pham TP.HCM
  35. Xử lý button dạng CheckBox và Radio trên Toolbar Toolbar dạng Radio Toolbar dạng CheckBox Tran Ngoc Bao 35 Dai hoc Su Pham TP.HCM
  36. Xử lý CheckBox button (tt) class CAddNewTooBarView : public CView { // public: BOOL m_bBold; //Lưu trữ trạng thái button B BOOL m_bItalic;//Lưu trữ trạng thái button I BOOL m_bUnderline;//Lưu trữ trạng thái button U }; CAddNewTooBarView ::CAddNewTooBarView { m_bBold = TRUE; //Trạng thái button B ban đầu được “Check” m_bItalic=FALSE;//Trạng thái button I ban đầu không được “Check” m_bUnderline = FALSE;//Trạng thái button U ban đầu không được “Check” }; Tran Ngoc Bao 36 Dai hoc Su Pham TP.HCM
  37. Xử lý CheckBox button (tt) void CAddNewTooBarView::OnButtonBold() { m_bBold = !m_bBold; } void CAddNewTooBarView::OnUpdateButtonBold(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_bBold ); } void CAddNewTooBarView::OnButtonItalic() { m_bItalic = !m_bItalic; } void CAddNewTooBarView::OnUpdateButtonItalic(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_bItalic); } Tran Ngoc Bao 37 Dai hoc Su Pham TP.HCM
  38. Xử lý Radio button (tt) class CAddNewTooBarView : public CView { // public: int m_nToolSelected; //Lưu trữ trạng thái button đang chọn }; CAddNewTooBarView ::CAddNewTooBarView { m_nToolSelected = -1; //Trạng thái ban đầu chưa có button nào được chọn }; Tran Ngoc Bao 38 Dai hoc Su Pham TP.HCM
  39. Xử lý Radio button (tt) void CAddNewTooBarView::OnButtonLine() { m_nToolSelected = 1; } void CAddNewTooBarView::OnUpdateButtonLine(CCmdUI* pCmdUI) { if (m_nToolSelected == 1) pCmdUI->SetCheck(1); else pCmdUI->SetCheck(0); } Tran Ngoc Bao 39 Dai hoc Su Pham TP.HCM
  40. Xử lý Radio button (tt) void CAddNewTooBarView::OnButtonCircle() { m_nToolSelected = 2; } void CAddNewTooBarView::OnUpdateButtonItalic(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolSelected == 2); } Tran Ngoc Bao 40 Dai hoc Su Pham TP.HCM
  41. Enable/Disable button (tt) Nếu chọn vẽ đường thẳng hoặc đường tròn “rỗng” thì không cho phép chọn “kiểu tô” Æ Disable các button chọn “kiểu tô” Nếu chọn vẽ đường tròn “đặc” thì cho phép chọn “kiểu tô” Æ Enable các button chọn “kiểu tô” Tran Ngoc Bao 41 Dai hoc Su Pham TP.HCM
  42. Enable/Disable button (tt) void CAddNewTooBarView::OnUpdateButtonFillStyle(CCmdUI* pCmdUI) { switch (m_nToolSelected) { case 1: //Vẽ đường thẳng pCmdUI->Enable(0); break; case 2: //Vẽ đường tròn “đặc” pCmdUI->Enable(1); break; } } Tran Ngoc Bao 42 Dai hoc Su Pham TP.HCM
  43. Gắn ComboBox vào Toolbar ComboBox gắn vào Toolbar Tran Ngoc Bao 43 Dai hoc Su Pham TP.HCM
  44. Khai báo biến quản lý ComboBox class CMainFrame : public CFrameWnd { protected: // control bar embedded members CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; CToolBar m_wndDrawBox; CComboBox m_wndFontCombox; }; Tran Ngoc Bao 44 Dai hoc Su Pham TP.HCM
  45. Gắn ComboBox vào Toolbar (tt) int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { m_wndDrawBox.SetButtonInfo(0,ID_BUTTON_RECT,TBBS_SEPARATOR,150); CRect rect; m_wndDrawBox.GetItemRect(0,rect); rect.bottom = rect.top+150; if (!m_wndFontCombox.Create(WS_CHILD |CBS_DROPDOWN|CBS_AUTOHSCROLL|WS_VSCROLL|CBS_HASSTRINGS, rect,&m_wndDrawBox,ID_BUTTON_RECT)) { return -1; } m_wndFontCombox.AddString("Time New Roman"); m_wndFontCombox.AddString("Tahoma"); m_wndFontCombox.SetCurSel(1); m_wndFontCombox.ShowWindow(SW_SHOW); } Tran Ngoc Bao 45 Dai hoc Su Pham TP.HCM
  46. Xử lý dãy buttons trên Toolbar (tt) class CAddNewTooBarView : public CView { . //Khai báo afx_msg void OnButtons(UINT uID); afx_msg void OnUpdateButtons(CCmdUI* pCmdUI); }; //Message Map ON_COMMAND_RANGE(ID_BUTTON_RED,ID_BUTTON_YELLOW, OnButtons) ON_UPDATE_COMMAND_UI_RANGE(ID_BUTTON_RED,ID_BUTTO N_YELLOW,OnUpdateButtons) Tran Ngoc Bao 46 Dai hoc Su Pham TP.HCM
  47. Xử lý dãy buttons trên Toolbar (tt) void CAddNewTooBarView::OnUpdateButtons(CCmdUI* pCmdUI) { pCmdUI->SetRadio(pCmdUI->m_nID==m_uColor); } void CAddNewTooBarView::OnButtons(UINT uID) { CString s; if (uID == ID_BUTTON_YELLOW) s = "Yellow"; if (uID == ID_BUTTON_RED) s = "Red"; if (uID == ID_BUTTON_BLUE) s = "Blue"; MessageBox(s); m_uColor = uID; } Tran Ngoc Bao 47 Dai hoc Su Pham TP.HCM
  48. Bật tắt (Ẩn/hiện) Toolbar void CMainFrame::OnViewDrawBox() { BOOL bShow; m_wndDrawBox.IsWindowVisible()?FALSE: TRUE; m_wndDrawBox.ShowWindow(bShow); } Tran Ngoc Bao 48 Dai hoc Su Pham TP.HCM
  49. Đại Học Sư Phạm Tp. Hồ Chí Minh Khoa Toán – Tin Học LẬP TRÌNH WINDOWS Toolbar - Menubar DialogBar Lập trình với Menubar
  50. NỘI DUNG ™ Giới thiệu về Menu ™ Tạo và xử lý Menu ™ Xử lý thay đổi Menu trong ứng dụng ™ Gắn Menu vào dialog ™ Right click popup menu (Context Menu) ™ Thêm và hủy Menu ™ Bitmap Item Tran Ngoc Bao 50 Dai hoc Su Pham TP.HCM
  51. Giới thiệu Menu Menu Bar Context menu Tran Ngoc Bao 51 Dai hoc Su Pham TP.HCM
  52. Các thành phần trên Menu bar Popup Menu Menu Bar Popup Menu Popup Menu Popup Menu Separator Menu Item Tran Ngoc Bao 52 Dai hoc Su Pham TP.HCM
  53. Tạo và xử lý Menu bar ™ Tạo một ứng dụng có Menubar mặc định bằng AppWizard ™ Tạo và xử lý Menu bar bằng lớp CMenu Tran Ngoc Bao 53 Dai hoc Su Pham TP.HCM
  54. Menubar - Tạo ứng dụng bằng AppWizard ™ Chọn menu File Æ New ™ Chọn Tab Projects ™ Chọn loại project “MFC AppWizard (exe)” ™ Đặt tên project trong ô “Project name” ™ Xác định đường dẫn thư mục trong “Location” ™ Step 1: Chọn loại ứng dụng “Multiple Document”, bỏ option “Document/View architecture support” ™ Nhấn “Next” đến “Step 4 of 6” Tran Ngoc Bao 54 Dai hoc Su Pham TP.HCM
  55. Menubar - Tạo ứng dụng bằng AppWizard Menubar mặc định (Child Menu) Kết quả chạy chương trình tạo menu bar bằng AppWizard Tran Ngoc Bao 55 Dai hoc Su Pham TP.HCM
  56. Menubar - Tạo ứng dụng bằng AppWizard Menubar mặc định (Main Menu) Kết quả chạy chương trình tạo menu bar bằng AppWizard Tran Ngoc Bao 56 Dai hoc Su Pham TP.HCM
  57. Các xử lý trong lớp CxxxApp BOOL CMyFirstMenuApp::InitInstance() { AfxEnableControlContainer(); . CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MENU_TOOL,//Menu o cho nay RUNTIME_CLASS(CMyFirstMenuDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(CMyFirstMenuView)); AddDocTemplate(pDocTemplate); // Parse command line for standard shell commands, DDE, file open m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); return TRUE; } Tran Ngoc Bao 57 Dai hoc Su Pham TP.HCM
  58. Thêm mới Menu resource Chọn mục Insert Menu để thêm mới Menu resource vào ứng dụng Menu resource Tran Ngoc Bao 58 Dai hoc Su Pham TP.HCM
  59. Thêm mới Menu resource (tt) New Menu resource Tran Ngoc Bao 59 Dai hoc Su Pham TP.HCM
  60. Thêm mới Menu resource (tt) Tran Ngoc Bao 60 Dai hoc Su Pham TP.HCM
  61. Thêm mới Menu resource (tt) Resource editor Tran Ngoc Bao 61 Dai hoc Su Pham TP.HCM
  62. Thêm mới Menu resource (tt) Separator Menu Item ID Menu Popup Tran Ngoc Bao 62 Dai hoc Su Pham TP.HCM
  63. Xử lý sự kiện click lên các button trong Menu ™Thông điệp WM_COMMAND ™Thông điệp UPDATE_COMMAND_UI ™Bật/tắt MenuItem (Enable/Disable) ™Thay đổi Caption của MenuItem ™Checking MenuItem Tran Ngoc Bao 63 Dai hoc Su Pham TP.HCM
  64. Xử lý sự kiện click lên các button trong Menu Chọn Item cần xử lý Chọn COMMAND Chọn Add Function Tran Ngoc Bao 64 Dai hoc Su Pham TP.HCM
  65. Xử lý sự kiện click lên các button trong tool bar class CAddNewTooBarView : public CView { afx_msg void OnButtonBold(); }; BEGIN_MESSAGE_MAP(CAddNewTooBarView, CView) //{{AFX_MSG_MAP(CAddNewTooBarView) ON_COMMAND(ID_BUTTON_BOLD, OnButtonBold) //}}AFX_MSG_MAP END_MESSAGE_MAP() void CAddNewTooBarView::OnButtonBold() { MessageBox(“Nhan nut B (Bold"); } Tran Ngoc Bao 65 Dai hoc Su Pham TP.HCM
  66. Xử lý Item dạng CheckBox và Radio trên Menu ™ Xử lý tương tự như button dạng checkbox và Radio button trong Toolbar ™ Gán ID của MenuItem có cùng ID với các Item trong Toolbar Æ Click lên MenuItem và Item trên Toolbar sẽ thực hiện cùng một chức năng trong chương trình Tran Ngoc Bao 66 Dai hoc Su Pham TP.HCM
  67. Xử lý CheckBox button (tt) class CAddNewTooBarView : public CView { // public: BOOL m_bBold; //Lưu trữ trạng thái button B BOOL m_bItalic;//Lưu trữ trạng thái button I BOOL m_bUnderline;//Lưu trữ trạng thái button U }; CAddNewTooBarView ::CAddNewTooBarView { m_bBold = TRUE; //Trạng thái button B ban đầu được “Check” m_bItalic=FALSE;//Trạng thái button I ban đầu không được “Check” m_bUnderline = FALSE;//Trạng thái button U ban đầu không được “Check” }; Tran Ngoc Bao 67 Dai hoc Su Pham TP.HCM
  68. Xử lý CheckBox button (tt) void CAddNewTooBarView::OnButtonBold() { m_bBold = !m_bBold; } void CAddNewTooBarView::OnUpdateButtonBold(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_bBold ); } void CAddNewTooBarView::OnButtonItalic() { m_bItalic = !m_bItalic; } void CAddNewTooBarView::OnUpdateButtonItalic(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_bItalic); } Tran Ngoc Bao 68 Dai hoc Su Pham TP.HCM
  69. Xử lý Radio button (tt) class CAddNewTooBarView : public CView { // public: int m_nToolSelected; //Lưu trữ trạng thái button đang chọn }; CAddNewTooBarView ::CAddNewTooBarView { m_nToolSelected = -1; //Trạng thái ban đầu chưa có button nào được chọn }; Tran Ngoc Bao 69 Dai hoc Su Pham TP.HCM
  70. Thay đổi Menu trong ứng dụng Yêu cầu Chương trình cho phép người dùng chọnhiểnthị menu Tiếng Anh/Tiếng Việtnhư hình Menu tiếng Anh Menu tiếng Việt Tran Ngoc Bao 70 Dai hoc Su Pham TP.HCM
  71. Thay đổi Menu trong ứng dụng (tt) Cách 1: Thay đổithuộctínhTexttrongmỗi MenuItem trong Menu void CMyFirstMenuView::OnUpdateToolsCircle(CCmdUI* pCmdUI) { CString s; if (m_LanguageSel==‘VN’) s.LoadString(ID_TOOLS_CIRCLE_VN); else s.LoadString(ID_TOOLS_CIRCLE); pCmdUI->SetText(s); } Tran Ngoc Bao 71 Dai hoc Su Pham TP.HCM
  72. Thay đổi Menu trong ứng dụng (tt) Cách 1: Thay đổithuộctínhTexttrongmỗi MenuItem trong Menu void CMyFirstMenuView::OnUpdateToolsLine(CCmdUI* pCmdUI) { CString s; if (m_LanguageSel==‘VN’) s.LoadString(ID_TOOLS_LINE_VN); else s.LoadString(ID_TOOLS_LINE); pCmdUI->SetText(s); } Tran Ngoc Bao 72 Dai hoc Su Pham TP.HCM
  73. Thay đổi Menu trong ứng dụng (tt) Cách 2: Thiếtkế 2 Menu trong Menu Resource có cùng cấu trúc: cùng số Item và các Item trong 2 Menu resource đôi 1 có cùng ID Menu tiếng Anh Menu tiếng Việt Tran Ngoc Bao 73 Dai hoc Su Pham TP.HCM
  74. Thay đổi Menu trong ứng dụng (tt) void CMainFrame::OnEnglish() { // TODO: Add your command handler code here m_myMenu.DestroyMenu(); m_NN =1; NewMyMenu(); } void CMainFrame::OnVietnamese() { // TODO: Add your command handler code here m_myMenu.DestroyMenu(); m_NN =2; NewMyMenu(); } Tran Ngoc Bao 74 Dai hoc Su Pham TP.HCM
  75. Thay đổi Menu trong ứng dụng (tt) void CMainFrame::NewMyMenu() { if (m_NN==1) { m_myMenu.LoadMenu(IDR_MENU_EN); } else m_myMenu.LoadMenu(IDR_MENU_VN); SetMenu(&m_myMenu); } Tran Ngoc Bao 75 Dai hoc Su Pham TP.HCM
  76. Gắn menu vào dialog i.Tạo menu resource ii.Tạo dialog reource iii.Gắn menu vào dialog -Chọn dialog resource trong ResourceView -Click phải chuột chọn Properties -Trong Tab General, chọn Menu ID tương ứng trong combo Menu Tran Ngoc Bao 76 Dai hoc Su Pham TP.HCM
  77. Context Menu - Right Click Popup Menu ™ Thêm Resource Menu Thực hiện tương tự như thêm menu bình thường ™ Cài đặt Right Click menu Nhấn chuột phải lên vùng Client hiển thị popup menu void CMyFirstMenuView::OnRButtonDown(UINT nFlags, CPoint point) { CMenu menu; menu.LoadMenu(IDR_MENU1); ClientToScreen(&point);//Hiển thị popup tại vị trí click chuột menu.GetSubMenu(0)->TrackPopupMenu( TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this,NULL); } Tran Ngoc Bao 77 Dai hoc Su Pham TP.HCM
  78. Xác lập trạng thái của Item trong Popup Menu void CMyFirstMenuView::OnRButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CMenu menu; CMenu *ptrMenu; //Load Menu menu.LoadMenu(IDR_MENU1); ptrMenu = menu.GetSubMenu(0); //Xac lap trang thai cua cac Item ptrMenu->EnableMenuItem(ID_POPUP_POPUPITEM01,MF_GRAYED); ptrMenu-EnableMenuItem(ID_POPUP_POPUPITEM02,MF_ENABLED); ptrMenu-EnableMenuItem(ID_POPUP_POPUPITEM03,MF_CHECKED); //Di chuyen vao dung vi tri cua con chuot ClientToScreen(&point); //Hien thi menu ptrMenu->TrackPopupMenu( TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this,NULL); CView::OnRButtonDown(nFlags, point); } Tran Ngoc Bao 78 Dai hoc Su Pham TP.HCM
  79. Thêm và Huỷ MenuItem ™Cú pháp InsertMenu(nPosition, nFlags, NewID, Caption) MF_BYPOSITION: dựa vào vị trí MF_BYCOMMAND: dựa vào ID, SEPARATOR không có ID ™Separator: nFlags = MF_SEPARATOR NewID = ANY Caption = ANY ™MenuItem nFlags = None NewID = NEWID Caption Tran Ngoc Bao 79 Dai hoc Su Pham TP.HCM
  80. Thêm MenuItem void CMyFirstMenuView::OnPopupInsert() { // TODO: Add your command handler code here CMenu *topMenu = AfxGetMainWnd()->GetMenu(); CMenu *ptrMenu = topMenu->GetSubMenu(0); UINT nNewID = ID_USER_MENUITEM+m_nItem; m_nItem = m_nItem+1; ptrMenu->InsertMenu(1,MF_BYPOSITION,nNewID,"&Menu Caption"); AfxGetMainWnd()->DrawMenuBar(); } Tran Ngoc Bao 80 Dai hoc Su Pham TP.HCM
  81. Thêm PopupMenu void CMyFirstMenuView::OnPopupInsert() { // TODO: Add your command handler code here CMenu *topMenu = AfxGetMainWnd()->GetMenu(); CMenu *ptrMenu = topMenu->GetSubMenu(0); //Handle của Sub Menu(0) được lưu vào *ptrMenu topMenu- >InsertMenu(1,MF_BYPOSITION,(UINT)ptrMenu- >GetSafeHmenu(),"&Menu Caption"); AfxGetMainWnd()->DrawMenuBar(); } Tran Ngoc Bao 81 Dai hoc Su Pham TP.HCM
  82. Xóa/Hủy menuItem ™ Remove 1 Popup trong MainMenu void CMyFirstMenuView::OnPopupDelete() { CMenu *topMenu = AfxGetMainWnd()->GetMenu(); topMenu->RemoveMenu(1,MF_BYPOSITION); AfxGetMainWnd()->DrawMenuBar(); } Tran Ngoc Bao 82 Dai hoc Su Pham TP.HCM
  83. Xóa/Hủy menuItem ™ Remove 1 Item trong Popup thứ nhất trong MainMenu void CMyMenuView::OnLButtonDown(UINT nFlags, CPoint point) { CMenu *topMenu = AfxGetMainWnd()->GetMenu(); CMenu *ptrMenu = topMenu->GetSubMenu(0); ptrMenu->RemoveMenu(1,MF_BYPOSITION); AfxGetMainWnd()->DrawMenuBar(); CView::OnLButtonDown(nFlags, point); } Tran Ngoc Bao 83 Dai hoc Su Pham TP.HCM
  84. Đại Học Sư Phạm Tp. Hồ Chí Minh Khoa Toán – Tin Học LẬP TRÌNH WINDOWS Toolbar - Menubar DialogBar Lập trình với Dialogbar
  85. Tạo và xử lý Dialog Bar class CMainFrame : public CFrameWnd { . CDialogBar m_wndDialogBar; }; int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (!m_wndDialogBar.Create(this,IDD_DIALOG_BAR,CBRS_TOOLTIPS | CBRS_FLYBY,IDD_DIALOG_BAR)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } m_wndDialogBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_TOP); DockControlBar(&m_wndDialogBar,AFX_IDW_DOCKBAR_TOP); } Tran Ngoc Bao 85 Dai hoc Su Pham TP.HCM
  86. Tran Ngoc Bao 86 Dai hoc Su Pham TP.HCM