在Dialog中使用Menu和Toolbar
作者:xujian
我們先建立一個基於Dialog 的程序
我給他起了個名字叫:DlgMenuToolbar
一
如何往基於Dialog的程序添加菜單
[] 先添加菜單(IDR_MENU
)資源
並加上需要的菜單項
[] 編輯對話框資源IDD_DLGMENUTOOLBAR_DIALOG的屬性
在屬性對話框中選擇IDR_MENU
即可
[] 假如您不希望在對話框屬性中直接設置菜單
而通過代碼在程序中動態生成可以采用如下方法:
[]在CDlgMenuToolbarDlg類聲名中添加成員變量CMenu m_menu
再在CDlgMenuToolbarDlg::OnInitDialog() 中添加如下代碼 //加載菜單m_menuLoadMenu(IDR_MENU);//設置當前菜單SetMenu(&m_menu);//當你不需要菜單時可以用 SetMenu(NULL);來取消當前菜單
二
如何往基於Dialog的程序添加工具欄
[] 先添加工具欄(IDR_TOOLBAR
)資源
並畫好各個按鈕
[] 在CDlgMenuToolbarDlg類聲名中添加成員變量 CToolBar m_wndtoolbar;
[] 在CDlgMenuToolbarDlg::OnInitDialog() 中添加如下代碼
//添加一個平面工具條if (!m_wndtoolbarCreateEx( thisTBSTYLE_FLAT WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS CRect()) || !m_wndtoolbarLoadToolBar(IDR_TOOLBAR) ){ TRACE("failed to create toolbar\n"); return FALSE;}m_wndtoolbarShowWindow(SW_SHOW);RepositionBars(AFX_IDW_CONTROLBAR_FIRST AFX_IDW_CONTROLBAR_LAST );
三
為工具欄添加工具提示
[
] 在CDlgMenuToolbarDlg類定義中手工添加消息映射函數的定義
如下黑體部分
//{{AFX_MSG(CDlgMenuToolbarDlg) virtual BOOL OnInitDialog(); afx_msg void OnPaint(); afx_msg BOOL OnToolTipText(UINT NMHDR* pNMHDR LRESULT* pResult); //}}AFX_MSG DECLARE_MESSAGE_MAP()
[
] 在CDlgMenuToolbarDlg
cpp添加函數的實現代碼
//工具欄提示BOOL CDlgMenuToolbarDlg::OnToolTipText(UINT NMHDR* pNMHDR LRESULT* pResult){ ASSERT(pNMHDR>code == TTN_NEEDTEXTA || pNMHDR>code == TTN_NEEDTEXTW); // UNICODE消息 TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; //TCHAR szFullText[]; CString strTipText; UINT nID = pNMHDR>idFrom; if (pNMHDR>code == TTN_NEEDTEXTA && (pTTTA>uFlags & TTF_IDISHWND) || pNMHDR>code == TTN_NEEDTEXTW && (pTTTW>uFlags & TTF_IDISHWND)) { // idFrom為工具條的HWND nID = ::GetDlgCtrlID((HWND)nID); } if (nID != ) //不為分隔符 { strTipTextLoadString(nID); strTipText = strTipTextMid(strTipTextFind(;;\n;;)+); #ifndef _UNICODE if (pNMHDR>code == TTN_NEEDTEXTA) { lstrcpyn(pTTTA>szText strTipText sizeof(pTTTA>szText)); } else { _mbstowcsz(pTTTW>szText strTipText sizeof(pTTTW>szText)); }#else if (pNMHDR>code == TTN_NEEDTEXTA) { _wcstombsz(pTTTA>szText strTipTextsizeof(pTTTA>szText)); } else { lstrcpyn(pTTTW>szText strTipText sizeof(pTTTW>szText)); }#endif *pResult = ; // 使工具條提示窗口在最上面 ::SetWindowPos(pNMHDR>hwndFrom HWND_TOP SWP_NOACTIVATE| SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); return TRUE; } return TRUE;}
[
] 在CDlgMenuToolbarDlg
cpp中添加消息映射
請看如下代碼中的黑體部分
BEGIN_MESSAGE_MAP(CDlgMenuToolbarDlg CDialog) //{{AFX_MSG_MAP(CDlgMenuTo
From:http://tw.wingwit.com/Article/program/c/201401/30258.html