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));

         }

}

最終軟件界面:

 

 

發佈了26 篇原創文章 · 獲贊 11 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章