方法①用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中加处理函数