顯示菜單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),
¶msBalloon);
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),
¶ms);
return;
}
if(m_nType == 3)
{
theApp.GetTooltipManager()->SetTooltipParams (
AFX_TOOLTIP_TYPE_ALL,
RUNTIME_CLASS(CMyTooltip));
}
}
最終軟件界面: