文章目录
方法①用ICO组成的工具栏
在用VC做信息管理系统时,我们有时会做基于对话框的程序,在对话框中添加工具栏用以这种方法,我们可以随心添加自己想要的Ico图标到工具栏上,不受添加一个Bmp图片时想要图标没有不想要的却很多,难以找到合适的Bmp图片以对应相应的工具栏按钮从而形象的表达按钮的功能.当然能过别的图片处理工具编辑Bmp图片后也能达到程序需求,但不如这种方法方便.
先找到自己想要的Ico图标,并将这些图标依次加到程序资源中,声明一个CToolBar m_wndToolBar工具栏变量和 CImageList img变量;
// 在程序中创建工具栏如下,其中各项参数可以参考MSDN: 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_TOOLBAR1)) { TRACE0(_T("创建工具条失败\n")); } m_wndToolBar.GetToolBarCtrl().SetButtonWidth(43, 70);
// 在ImageList中加上自己想要的图标,可以设置图标使鼠标指上去时和没指上去时的图标各异,大小不同. // 比如我们用此可以把同一图标做成灰色和彩色,就可以得到想Windows工具栏那样的效果. // 以下这是鼠标指上去时图标的显示效果: Img.Create(22, 22, ILC_COLOR8|ILC_MASK,2,2); Img.SetBkColor(::GetSysColor(COLOR_BTNFACE)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON2)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON3)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON4)); m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img); img.Detach(); // 以下这是鼠标没指上去时图标的显示效果: img.Create(19, 19, ILC_COLOR8|ILC_MASK,8,8); img.SetBkColor(::GetSysColor(COLOR_BTNFACE)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON2)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON3)); img.Add(AfxGetApp()->LoadIcon(IDI_ICON4)); m_wndToolBar.GetToolBarCtrl().SetImageList(&img); img.Detach(); //以下是在工具栏按钮上添加文字和设置分隔条: m_wndToolBar.ModifyStyle(0,TBSTYLE_FLAT|CBRS_TOOLTIPS|TBBS_CHECKBOX ); m_wndToolBar.SetButtons(NULL,6); m_wndToolBar.SetButtonInfo(0, ID_FILE_NEW, TBSTYLE_BUTTON, 0); m_wndToolBar.SetButtonText(0, "打开窗体"); m_wndToolBar.SetButtonInfo(1, IDC_MSG_BUTTONSPLI, TBBS_SEPARATOR, 0); m_wndToolBar.SetButtonInfo(2, ID_FILE_PRINT, TBSTYLE_BUTTON, 1); m_wndToolBar.SetButtonText(2, "打印"); m_wndToolBar.SetButtonInfo(3, ID_PRINT_VIEW, TBSTYLE_BUTTON, 2); m_wndToolBar.SetButtonText(3, "打印预览"); m_wndToolBar.SetButtonInfo(4, IDC_MSG_BUTTONSPLI2, TBBS_SEPARATOR, 0); m_wndToolBar.SetButtonInfo(5, ID_APP_EXIT, TBSTYLE_BUTTON,3); m_wndToolBar.SetButtonText(5, "退出"); //得到按钮的大小,设置按钮的大小 CRect rectToolBar; m_wndToolBar.GetItemRect(0, &rectToolBar); m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(20,20));
以下代码让工具栏显示在对话框中:
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);在对话框中添加工具栏浮动提示用以下函数实现 ,IDC_STRING1为字符串资源先在资源窗口中设置要显示的字符串: BOOL CMainDlg::NotifyFunction( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ) { pResult = NULL ; // Not Used id = 0 ; // Not used TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct; UINT nID = pTTTStruct->idFrom; switch ( nID) { case ID_FILE_NEW: pTTT->lpszText = MAKEINTRESOURCE((LPCSTR)(IDC_STRING1)); break ; case ID_FILE_PRINT: pTTT->lpszText = MAKEINTRESOURCE((LPCSTR)(IDC_STRING2)); break ; case ID_PRINT_VIEW: pTTT->lpszText = MAKEINTRESOURCE((LPCSTR)(IDC_STRING3)); break ; case ID_APP_EXIT: pTTT->lpszText = MAKEINTRESOURCE((LPCSTR)(IDC_STRING4)); break ; } return(TRUE); }
这种方法也可在文档视图的程序中实现漂亮的工具栏效果.希望以上方法能给大家一帮助
方法②工具栏资源
1 添加工具栏资源
2 头文件中加CToolBar m_wndToolBar
3 在OnInitDialog()中加入类似以下代码:
// 1创建工具栏 if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_DLG_TOOLBAR)) { TRACE0("Failed to create dialog toolbar\n"); EndDialog( IDCANCEL ); } // 2得出控件条大小. CRect rcClientStart; CRect rcClientNow; GetClientRect(rcClientStart); RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0, reposQuery, rcClientNow); // 3放置控件条位置 CPoint ptOffset(rcClientNow.left - rcClientStart.left, rcClientNow.top - rcClientStart.top); CRect rcChild; CWnd* pwndChild = GetWindow(GW_CHILD); while (pwndChild) { pwndChild->GetWindowRect(rcChild); ScreenToClient(rcChild); rcChild.OffsetRect(ptOffset); pwndChild->MoveWindow(rcChild, FALSE); pwndChild = pwndChild->GetNextWindow(); } // 4调整对话框尺寸 CRect rcWindow; GetWindowRect(rcWindow); rcWindow.right += rcClientStart.Width() - rcClientNow.Width(); rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height(); MoveWindow(rcWindow, FALSE); // 5控件条定位 RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); // 6对框居中 CenterWindow();
4 手工添加处理函数
//afx_msg void OnBtnXXX();//CXXXDlg.h 文件中加声明 //ON_COMMAND(ID_BTN_XXX, OnDrawSquare)//CXXXDlg.cpp 文件中加宏 对应的工具条目的ID号 // void CXXXDlg::OnBtnXXX(){}//在CXXXDlg.cpp中加处理函数