带图标工具栏的创建以及提示功能的添加

来源:互联网 发布:31周胎儿发育标准数据 编辑:程序博客网 时间:2024/06/14 15:58

一、带图标工具栏的创建:

第一步:将bmp位图或是ICON图标资源加入到资源视图中:我这里是bmp资源,添加资源时要按照你想要的顺序添加


第二步,在响应的头文件中定义CToolBar对象和CImageList对象:

private:CToolBar m_ToolBar;CImageList m_ImageList;

第三步,在对话框的初始化函数中进行带图标工具栏的初始化操作:

/*****带图标工具栏的添加*****/m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);//创建图像列表CBitmap bmp;for (int i=0;i<9;i++)//向图像列表中添加图像{bmp.LoadBitmap(IDB_BITMAP1+i);m_ImageList.Add(&bmp,RGB(255,255,255));bmp.DeleteObject();}UINT BtnArray[10];//定义工具栏命令ID数组BtnArray[0]=IDB_BITMAP1;BtnArray[1]=IDB_BITMAP2;BtnArray[2]=IDB_BITMAP3;BtnArray[3]=IDB_BITMAP4;BtnArray[4]=IDB_BITMAP5;BtnArray[5]=IDB_BITMAP6;BtnArray[6]=ID_SEPARATOR;BtnArray[7]=IDB_BITMAP7;BtnArray[8]=IDB_BITMAP8;BtnArray[9]=IDB_BITMAP9;m_ToolBar.CreateEx(this);//创建工具栏,默认置顶m_ToolBar.SetButtons(BtnArray,10);m_ToolBar.SetSizes(CSize(60,60),CSize(32,32));//设置工具栏按钮大小和按钮图像大小m_ToolBar.SetButtonText(0,_T("文件管理"));//设置工具栏文本m_ToolBar.SetButtonText(1,_T("屏幕监控"));m_ToolBar.SetButtonText(2,_T("超级终端"));m_ToolBar.SetButtonText(3,_T("进程管理"));m_ToolBar.SetButtonText(4,_T("服务管理"));m_ToolBar.SetButtonText(5,_T("卸载主机"));m_ToolBar.SetButtonText(7,_T("生成客户"));m_ToolBar.SetButtonText(8,_T("程序设置"));m_ToolBar.SetButtonText(9,_T("关于软件"));m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);//设置工具栏按钮显示图标RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);//显示工具栏

进行以上三步后,带图标的工具栏就已经设置完成,如下图:



另:

1、如果你插入的是ICON图标资源不是位图资源,只是向图像列表中添加图像的方法有所改变:

m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_LINE));


二、

如果你不想要设置工具栏中图标按钮的文本,而要使用提示(ToolTip)功能,可以进行如下几步操作:


创建带图标的工具栏时,以上几步基本不变,唯一改变的是创建工具栏对象时第三个参数要添加:CBRS_TOOLTIPS样式。

m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP | CBRS_TOOLTIPS | CBRS_SIZE_DYNAMIC ,CRect(0, 0, 0, 0));

其次,在头文件中添加智能提示控件变量的声明:

CToolTipCtrl  m_pToolTipCtrl;

创建一个智能提示控件:

if( !m_pToolTipCtrl.Create(this) ) return FALSE;

其次,向智能提示控件中添加需要具有提示功能的控件,并启用目标窗口的TOOLTIP属性:

m_pToolTipCtrl.AddTool(GetDlgItem(IDI_ICON_CANCEL),LPSTR_TEXTCALLBACK);m_pToolTipCtrl.AddTool(GetDlgItem(IDI_ICON_EXIT),LPSTR_TEXTCALLBACK);m_pToolTipCtrl.AddTool(GetDlgItem(IDI_ICON_LINE),LPSTR_TEXTCALLBACK);m_pToolTipCtrl.AddTool(GetDlgItem(IDI_ICON_OK),LPSTR_TEXTCALLBACK);m_pToolTipCtrl.AddTool(GetDlgItem(IDI_ICON_PEN),LPSTR_TEXTCALLBACK);m_pToolTipCtrl.AddTool(GetDlgItem(IDI_ICON_RECT),LPSTR_TEXTCALLBACK);m_pToolTipCtrl.AddTool(GetDlgItem(IDI_ICON_SAVE),LPSTR_TEXTCALLBACK);EnableToolTips(TRUE);

最后,添加如下消息映射:

1、映射函数的定义:

afx_msg BOOL ToolTipFxn(UINT id, NMHDR *pNMHDR, LRESULT *pResult);


2、添加消息映射:

ON_NOTIFY_EX(TTN_NEEDTEXT, 0, &CClipScreenToolDlg::ToolTipFxn)


3、消息映射函数的实现:

BOOL CClipScreenToolDlg::ToolTipFxn(UINT id, NMHDR *pNMHDR, LRESULT *pResult){UNREFERENCED_PARAMETER(id);  TOOLTIPTEXT *pTTT=(TOOLTIPTEXT *)pNMHDR;  UINT_PTR nID=pNMHDR->idFrom;  if (pTTT->uFlags && TTF_IDISHWND)  {  switch (nID)  {  case IDI_ICON_LINE:pTTT->lpszText = _T("画线");break;case IDI_ICON_RECT:pTTT->lpszText = _T("矩形");break;case IDI_ICON_PEN:pTTT->lpszText = _T("画笔");break;case IDI_ICON_CANCEL:pTTT->lpszText = _T("撤销");break;case IDI_ICON_SAVE:pTTT->lpszText = _T("保存");break;case IDI_ICON_EXIT:pTTT->lpszText = _T("关闭");break;case IDI_ICON_OK:pTTT->lpszText = _T("结束");break;default:break; }  //return TRUE;}  *pResult = 0;  return TRUE;  }


以上一、二两部分的说明使用的是两个不同的例子。




0 0
原创粉丝点击