熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> C編程 >> 正文

在Dialog中使用Menu和Toolbar

2022-06-13   來源: C編程 

  在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()


     [] 在CDlgMenuToolbarDlgcpp添加函數的實現代碼

  //工具欄提示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;}

[] 在CDlgMenuToolbarDlgcpp中添加消息映射請看如下代碼中的黑體部分

  BEGIN_MESSAGE_MAP(CDlgMenuToolbarDlg CDialog) //{{AFX_MSG_MAP(CDlgMenuTo    


From:http://tw.wingwit.com/Article/program/c/201401/30258.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.