工具提示控制是一個小窗口,在其中顯示單行文字用以描述應用程序中的工具的用途。這裡的工具所指的既可以是窗口(如工具欄上的按鈕),也可以是一個固定的區域。大家都知道利用APPWIZARD生成 的應用程序中工具欄帶有提示,當你將鼠標放在工具欄某一個按鈕上時,將顯示一個小提示框告訴你按鈕的功能,這種功能方便了軟件的使用者。但是在視圖區如何實現提示,這方面介紹的資料較少,我是在開發一個圖像處理程序的時候遇到這個問題,當時我是想當鼠標放在圖像上時,顯示圖像上對應像素點的灰度值,後來查了一些資料,終於將它解決了,現在將這個方法介紹給大家,希望對朋友們有所幫助。
首先聲明一個CtoolTipCtrl類的變量,調用Create函數創建工具通用提示,並將它附在CtoolTipCtrl對象上,然後調用CtoolTipCtrl類的AddTool函數注冊工具提示控制,從而為光標放在規定的窗口或區域內時顯示工具提示做准備。該函數的原形為:BOOL AddTool( CWnd* pWnd,LPCTSTR lpszText, LPCRECT lpRectTool, UINT nIDTOOL );其中pWnd為指向包含工具提示控制的窗口指針,lpszText為所要在工具提示中顯示的文字,lpRectTool為工具書提示所對應的窗口或規定區域,nIDTOOL為工具提示的標志號。在調用CtoolTipCtrl類的Active函數激活提示。最後要作的工作是重載工具提示父窗口的WindowPorc函數,調用CtoolTipCtrl類的RelayEvent函數將鼠標消息傳遞給工具提示控制對象。以在視圖區顯示對應點的坐標為例,給出了實現代碼:
// TestView.cpp : implementation of the CTestVIEw class
………..
//在文件頭定義的全局變量
CToolTipCtrl m_ToolTip;//工具提示對象
char string[50];//用來存放提示文字
CRect rect;//用來存放工具提示所對應的窗口的尺寸
#define IDC_CONST 12345//定義的工具提示標志號,注意不要和系統沖突
void CTestVIEw::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
wsprintf(string,"%d,%d",point.x,point.y);
GetClIEntRect(&recty);
m_ToolTip.AddTool(this,string,&rect,IDC_CONST);
m_ToolTip.Activate(TRUE);
CVIEw::OnMouseMove(nFlags, point);
}
LRESULT CTestVIEw::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(message)
{case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_LBUTTONUP:
case WM_MBUTTONUP:
case WM_RBUTTONUP:
case WM_MOUSEMOVE:
{MSG msg;
msg.hwnd=m_hWnd;
msg.message=message;
msg.wParam=wParam;
msg.lParam=lParam;
m_ToolTip.RelayEvent(&msg);
}
}
return CVIEw::WindowProc(message, wParam, lParam);
}