Bài giảng 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

pdf86 trang | Chuyên mục: Visual C++ | Chia sẻ: dkS00TYs | Lượt xem: 2209 | Lượt tải: 1download
Tóm tắt nội dung Bài giảng Lập trình Windows - Toolbar - Menubar DialogBar, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Popup Menu
Popup Menu
Tran Ngoc Bao 53 Dai hoc Su Pham TP.HCM
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 54 Dai hoc Su Pham TP.HCM
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 55 Dai hoc Su Pham TP.HCM
Menubar - Tạo ứng dụng bằng AppWizard
Kết quả chạy chương trình tạo menu bar bằng AppWizard
Menubar
mặc định
(Child Menu)
Tran Ngoc Bao 56 Dai hoc Su Pham TP.HCM
Menubar - Tạo ứng dụng bằng AppWizard
Kết quả chạy chương trình tạo menu bar bằng AppWizard
Menubar
mặc định
(Main Menu)
Tran Ngoc Bao 57 Dai hoc Su Pham TP.HCM
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 58 Dai hoc Su Pham TP.HCM
Thêm mới Menu resource
Menu resource
Chọn mục Insert Menu để 
thêm mới Menu resource 
vào ứng dụng
Tran Ngoc Bao 59 Dai hoc Su Pham TP.HCM
Thêm mới Menu resource (tt)
New Menu
resource
Tran Ngoc Bao 60 Dai hoc Su Pham TP.HCM
Thêm mới Menu resource (tt)
Tran Ngoc Bao 61 Dai hoc Su Pham TP.HCM
Thêm mới Menu resource (tt)
Resource editor
Tran Ngoc Bao 62 Dai hoc Su Pham TP.HCM
Thêm mới Menu resource (tt)
ID Menu
Popup
Separator
Menu Item
Tran Ngoc Bao 63 Dai hoc Su Pham TP.HCM
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 64 Dai hoc Su Pham TP.HCM
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 65 Dai hoc Su Pham TP.HCM
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 66 Dai hoc Su Pham TP.HCM
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 67 Dai hoc Su Pham TP.HCM
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
};
Xử lý CheckBox button (tt)
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 68 Dai hoc Su Pham TP.HCM
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 69 Dai hoc Su Pham TP.HCM
class CAddNewTooBarView : public CView
{
//
public:
int m_nToolSelected; //Lưu trữ trạng thái button đang chọn
};
Xử lý Radio button (tt)
CAddNewTooBarView ::CAddNewTooBarView
{
m_nToolSelected = -1; //Trạng thái ban đầu chưa có button nào được 
chọn
};
Tran Ngoc Bao 70 Dai hoc Su Pham TP.HCM
Thay đổi Menu trong ứng dụng
Yêu cầu
Chương trình cho phép người dùng chọn hiển thị menu
Tiếng Anh/Tiếng Việt như hình
Menu tiếng Anh Menu tiếng Việt
Tran Ngoc Bao 71 Dai hoc Su Pham TP.HCM
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);
}
Thay đổi Menu trong ứng dụng (tt)
Cách 1:
Thay đổi thuộc tính Text trong mỗi MenuItem trong Menu
Tran Ngoc Bao 72 Dai hoc Su Pham TP.HCM
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);
}
Thay đổi Menu trong ứng dụng (tt)
Cách 1:
Thay đổi thuộc tính Text trong mỗi MenuItem trong Menu
Tran Ngoc Bao 73 Dai hoc Su Pham TP.HCM
Thay đổi Menu trong ứng dụng (tt)
Cách 2:
Thiết kế 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 74 Dai hoc Su Pham TP.HCM
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 75 Dai hoc Su Pham TP.HCM
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 76 Dai hoc Su Pham TP.HCM
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 77 Dai hoc Su Pham TP.HCM
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 78 Dai hoc Su Pham TP.HCM
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 79 Dai hoc Su Pham TP.HCM
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 80 Dai hoc Su Pham TP.HCM
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 81 Dai hoc Su Pham TP.HCM
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 82 Dai hoc Su Pham TP.HCM
Xóa/Hủy menuItem 
void CMyFirstMenuView::OnPopupDelete() 
{
CMenu *topMenu = AfxGetMainWnd()->GetMenu();
topMenu->RemoveMenu(1,MF_BYPOSITION);
AfxGetMainWnd()->DrawMenuBar();
}
™ Remove 1 Popup trong MainMenu
Tran Ngoc Bao 83 Dai hoc Su Pham TP.HCM
Xóa/Hủy menuItem 
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);
}
™ Remove 1 Item trong Popup thứ nhất trong MainMenu
Đại Học Sư Phạm Tp. Hồ Chí Minh
Khoa Toán – Tin Học LẬP TRÌNH WINDOWS
Lập trình với Dialogbar
Toolbar - Menubar
DialogBar
Tran Ngoc Bao 85 Dai hoc Su Pham TP.HCM
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 86 Dai hoc Su Pham TP.HCM

File đính kèm:

  • pdfBài giảng Lập trình Windows - Toolbar - Menubar DialogBar.pdf