MFC 在对话框中添加工具条

来源:互联网 发布:红色警戒3mac版下载 编辑:程序博客网 时间:2024/05/16 00:56

1.在ResourceView里加入Toolbar资源,命名IDR_TOOLBAR1

2.在主程序的.h文件中加入变量:

               CToolBar m_wndtoolbar;//添加工具栏               CImageList m_ilToolBar;//使工具栏图标显示256色

3.在主程序的.h文件中加入函数:

afx_msg BOOL OnToolTipText(UINT NID, NMHDR* pNMHDR, LRESULT* pResult);//使工具栏显示提示信息

4.在主程序的.h文件中的BEGIN_MESSAGE_MAP(CDetectorDlg, CDialog)函数里加入:

     ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipText )//使工具栏显示提示信息

5.在主程序的.cpp文件中,在初始化的地方(OnCreate或者OnInitDialog)加入:

//添加一个平面工具栏

if (!m_wndtoolbar.CreateEx( this,TBSTYLE_FLAT ,  WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS,CRect(4,4,0,0)) ||!m_wndtoolbar.LoadToolBar(IDR_TOOLBAR1) ){         TRACE0("failed to create toolbar\n");         return FALSE;}m_wndtoolbar.ShowWindow(SW_SHOW);RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
//使工具栏图标显示256色HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_TOOLBAR1), //加载IDB_TOOLBARIMAGE_BITMAP, //按位图格式0,0, // cx,cyLR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS );CBitmap bm;bm.Attach(hbm);m_ilToolBar.Create(24,24,ILC_COLOR8, 4, 4);m_ilToolBar.Add(&bm,(CBitmap*)NULL);m_wndtoolbar.GetToolBarCtrl().SetImageList(&m_ilToolBar);

6.在主程序的.cpp文件中编译函数OnToolTipText//使工具栏显示提示信息

BOOL CDetectorDlg::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[512];         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 != 0) //不为分隔符         {                   strTipText.LoadString(nID);                   strTipText = strTipText.Mid(strTipText.Find('\n',0)+1);#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,   strTipText,sizeof(pTTTA->szText)); } else {  lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); }#endif                   *pResult = 0;   // 使工具条提示窗口在最上面   ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE|    SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);     return TRUE; }     return TRUE;}

7.在ResourceView的String资源里,将工具栏中每个按钮的ID都对应上希望显示的提示信息即可,例如:

toolbar中有一按钮的ID是IDC_OPENFILE,希望显示的提示信息为“打开文件” 那么,你需要做的就是在string资源中加入一条ID同样是IDC_OPENFILE, 内容是: 打开文件

在运行的时候,将鼠标放在按钮上面就会提示 “打开文件”了

这样就完成了所有的步骤。

1 0