VS2010 ------ 显示菜单Tooltip编程

来源:互联网 发布:oracle数据库pdf下载 编辑:程序博客网 时间:2024/05/21 17:58

显示菜单Tooltip编程

菜单的Tooltip是给菜单给出相应的提示信息,可以关闭也可以打开,当然为了Tooltip相关的色彩显示,专门建立了以CMFCTooltipCtrl为基类的继承类

首先以CMFCTooltipCtrl为基础,建立类CMyToolTipCtrl,并重载相关的属性函数OnFillBackground(), OnDrawSeparator( ),绘制Tooltip的背景、图标及文本的颜色。

voidCMyTooltip::OnDrawSeparator( CDC* pDC, int x1,   int x2,  int y )

{

         ASSERT_VALID (pDC);

         CDrawingManager dm (*pDC);

         CRect rect (x1, y, x2, y + 1);

         dm.FillGradient(rect, RGB (255, 201, 109), RGB (255, 247, 225), FALSE);

}

voidCMyTooltip::OnFillBackground( CDC* pDC, CRect rect,  COLORREF& clrText,  COLORREF& clrLine )

{

         ASSERT_VALID(pDC);

 

         CDrawingManager dm(*pDC);

         dm.FillGradient2(rect,RGB (104, 165, 225), RGB (37,92, 222), 90);

         clrLine= RGB (113, 166, 246);

         clrText= RGB (255, 255, 255);

}

  随后重载OnMenuButtonToolHitTest()函数,以便获得鼠标点击菜单或者图标的消息,以便显示Tooltip。

BOOL CMainFrame::OnMenuButtonToolHitTest(CMFCToolBarButton* pButton, TOOLINFO* pTI)

{

         ASSERT_VALID(pButton);

         ASSERT(pTI != NULL);

         if (!theApp.m_bTTInPopupMenus ||   pButton->m_nID == 0 ||    pButton->m_nID == (UINT)-1)

         {

                  return FALSE;

         }

         CStringstrText = pButton->m_strText;

         strText.Remove(_T('&'));

         if (strText.IsEmpty ())

         {

                  return FALSE;

         }

         if (pTI)

         {

                   pTI->lpszText= (LPTSTR) ::calloc ((strText.GetLength () + 1),sizeof(TCHAR));

                  if (pTI->lpszText)

                   {

                            lstrcpy(pTI->lpszText, strText);

                   }

         }

         return TRUE;

}

  然后再在视类中加入不同类型的Tooltip处理程序

voidCTooltipViewView::OnApplyTooltip()

{

 

         afxGlobalData.m_nMaxToolTipWidth= 200;

         theApp.m_bTTInPopupMenus= TRUE;

         if (m_nType == 0)      // Standard tooltip

         {

                   theApp.GetTooltipManager()->SetTooltipParams (

                            AFX_TOOLTIP_TYPE_ALL,

                            NULL,

                            NULL);

                  return;

         }

         if (m_nType == 1)      // Balloon tooltip

         {

                   CMFCToolTipInfoparamsBalloon;

                   paramsBalloon.m_bBalloonTooltip= TRUE;

                   theApp.GetTooltipManager()->SetTooltipParams (

                            AFX_TOOLTIP_TYPE_ALL,

                            RUNTIME_CLASS(CMFCToolTipCtrl),

                            &paramsBalloon);

                  return;

         }

         if(m_nType == 2)

         {

                   CMFCToolTipInfoparams;

                   params.m_bBoldLabel= TRUE;

                   params.m_bDrawDescription= TRUE;

                   params.m_bDrawIcon= TRUE;

                   params.m_bRoundedCorners= TRUE;

                   params.m_bDrawSeparator= TRUE;

                   params.m_clrFill= RGB (255, 255, 255);

                   params.m_clrFillGradient= RGB (228, 228, 240);

                   params.m_clrText= RGB (61, 83, 80);

                   params.m_clrBorder= RGB (144, 149, 168);

                   theApp.GetTooltipManager()->SetTooltipParams (

                            AFX_TOOLTIP_TYPE_ALL,

                            RUNTIME_CLASS(CMFCToolTipCtrl),

                            &params);

                  return;

         }

         if(m_nType == 3)

         {

                   theApp.GetTooltipManager()->SetTooltipParams (

                            AFX_TOOLTIP_TYPE_ALL,

                            RUNTIME_CLASS(CMyTooltip));

         }

}

最终软件界面: