複製鏈接
請複製以下鏈接發送給好友

工具提示控件

鎖定
工具提示是當鼠標在某特定區域上停留時顯示的一個矩形窗口。工具提示窗口包含一些編程者想要顯示的文本。在這點上,工具提示同狀態欄的作用是一樣的,所不同的是工具提示當單擊或者遠離指定區域的時候就會消逝,你可能熟悉與工具欄相關聯的工具提示,那些提示是工具欄控件提供的便利。如果你想要在其它窗口、控件中顯示工具提示的話,就不得不自己創建他們。
中文名
工具提示控件
類    型
術語
創建步驟
既然已經瞭解了什麼是工具提示,就讓我們來看看如何創建他們.大致步驟如下:
用CreateWindowEx函數創建工具提示控件. 定義一個工具提示控件將要監視鼠標移動的區域. 將區域傳遞給工具提示控件 將傳遞區域的鼠標消息轉送給工具提示控件.(這步或許更早,具體依據轉播消息的方法) 下面我們就來詳細的討論每一步.
工具提示控件的創建工具提示控件是一種通用控件.同樣,要在源代碼某處調用InitCommonControls以便MASM能夠將你的程序和comctl32.dll連接. 用CreateWindowEx創建工具提示控件,典型代碼如下:
.data
TooltipClassName db "Tooltips_class32",0
.code
.....
invoke CreateWindowEx, NULL, addr TooltipClassName, NULL, TIS_ALWAYSTIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL注意窗口風格:TIS_ALWAYSTIP指定了工具提示不管包含指定區域的窗口狀態如何,當鼠標移過指定區域的時候,工具提示總是顯示.簡單的説就是,即使窗口處於非激活狀態,鼠標移過工具提示指定區域的時候,工具提示也會出現.
你不必在CreateWindowEx中包括WS_POPUPWS_EX_TOOLWINDOW風格,因為工具提示處理過程會自動加上,你也不必指定工具提示窗口的座標和寬高,控件會依據要顯示的文字自動調節.四個參數,均使用CW_USEDEFAULT ,其餘的參數都不太重要.
指定工具工具提示控件創建了但還沒有顯示,我們想要當鼠標指針在某個區域之上時顯示工具提示窗口.現在需要指定這個區域.我們稱這樣的區域為"工具",“工具”就是工具提示控件監視鼠標指針是否移過的位於窗口客户區的一個方形區域.如果鼠標指針移過"工具",工具提示窗口就顯示."工具"可覆蓋整個客户區或者僅僅是它的一部分.因此我們把"工具"分成兩種類型,一種是作為一個窗口,另一種則是某窗口客户區的一部分.兩種各有所用.覆蓋整個客户區的"工具"通常用於按鈕、編輯控件等,你不必指定焦點域的座標和大小:它被假定為窗口的整個客户區.僅覆蓋窗口客户區一部分的"工具"在你想把窗口客户區分成幾個部分但又不想使用子窗口時特別有用,但需要指定左上角的座標和寬高.
使用如下的TOOLINFO 結構定義"工具":
TOOLINFOSTRUCT
cbSize DWORD ?
uFlags DWORD ?
hWnd DWORD ?
uId DWORD ?
rect RECT <>
hInst DWORD ?
lpszText DWORD ?
lParam LPARAM ?
總言之,你需要將TOOLINFO結構傳遞給工具提示控件之前填充填充好,它描述了你期望的"工具"屬性. 向工具提示控件註冊"工具"填充完TOOLINFO結構後, 必須將其傳遞給控件 . 一個工具提示控件可以控制很多"工具",因此不必為一個窗口創建很多控件,為了註冊"工具",向控件發送TTM_ADDTOOL消息 wParam不使用,lParam必須包含要註冊的TOOLINFO結構的指針
.data?
ti TOOLINFO <>
.......
.code
.......
<fill the TOOLINFO structure>
.......
invoke SendMessage, hwndTooltip, TTM_ADDTOOL, NULL, addr ti成功返回 TRUE,否則返回 FALSE.
發送 TTM_DELTOOL消息取消註冊.
向工具提示控件轉發鼠標消息以上步驟完畢之後,控件知道了應當監視那一塊區域和應該在提示窗口顯示什麼.唯一缺乏的就是激發機制. 想想看:"工具"指定的其它窗口的客户區的區域.控件如何截取發送向該窗口的消息呢?實際中需要截取消息以便了解鼠標停留了多長時間,當指定時間流逝以後,控件顯示提示窗口.有兩種方法: 一種需要包含"工具"窗口的合作,另一種則不需要.
包含"工具"的窗口必須向控件發送 TTM_RELAYEVENT 以轉發消息. lParam是指向要轉發消息MSG指針 控件僅處理如下鼠標消息 : WM_LBUTTONDOWN WM_MOUSEMOVE WM_LBUTTONUP WM_RBUTTONDOWN WM_MBUTTONDOWN WM_RBUTTONUP WM_MBUTTONUP 其它消息全被忽略,因此包含"工具"的窗口的處理過程必須包含像這樣的選擇: WndProc proc hWnd:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
.......
if uMsg==WM_CREATE
.............
elseif uMsg==WM_LBUTTONDOWN || uMsg==WM_MOUSEMOVE || uMsg==WM_LBUTTONUP || uMsg==WM_RBUTTONDOWN || uMsg==WM_MBUTTONDOWN || uMsg==WM_RBUTTONUP || uMsg==WM_MBUTTONUP
invoke SendMessage, hwndTooltip, TTM_RELAYEVENT, NULL, addr msg
..........
.你可以在TOOLINFO結構的uFlags成員指定 TTF_SUBCLASS標誌。此標誌告訴控件子類化包含"工具"的窗口以便無需窗口的協作便可捕獲鼠標消息。由於除了控件自己處理截獲的鼠標消息和指定TTF_SUBCLASS標誌之外不用編寫多餘的代碼,因此很易於使用。 就是這些了,到這步為止,控件已經全功能了.還有幾個你應當知道的相關消息.
TTM_ACTIVATE.如果你想動態的允許或者禁止工具提示控件,這個小消息就是為你而備.wParam值為TRUE,允許控件.若為FALSE,禁止控件.控件初始創建的時候無需發送消息激活他,便被自動設為允許狀態. TTM_GETTOOLINFO and TTM_SETTOOLINFO. 如果你想在把TOOLINFO結構傳遞給控件之後獲得或者改變其值,使用此消息.你需要用正確的uId and hWnd值指定要改變的"工具".如果你只想改變rect成員的值,使用TTM_NEWTOOLRECT 消息,如果僅想改變提示文本,使用TTM_UPDATETIPTEXT消息. TTM_SETDELAYTIME. 使用此消息指定控件顯示提示文本時的時間延遲.
ASP .NET Wijmo的工具提示控件:
ASP .NET Wijmo的工具提示控件 ASP .NET Wijmo的工具提示控件
用與上下文相關的工具提示給最終用户提供一個更好的UX。ComponentOne為ASP .NET Wijmo出品的工具提示控件可以將HTML內容加載並顯示在Web應用程序中。也可以對工具提示的外觀具有完全的控制權。