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

显示菜单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));

         }

}

最终软件界面:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值