軟件的可用性改善:善用幫助信息
當我們吭哧吭哧的開發(fā)功能性模塊的時候,也需要回頭思考一下軟件的可用性。今天的主題就是使用幫助信息來改善軟件的可用性,讓軟件不僅”能用”,也更”好用”。
幫助信息,也叫工具提示(Tooltip)。當用戶的鼠標懸停在一段文字或者控件上時,會自動顯示相關(guān)的幫助信息。例如,如果一個控件上的字符串沒有足夠的控件顯示,當鼠標懸停在控件上時,可以通過工具提示來顯示完整的字符串。
實現(xiàn)工具提示的一個關(guān)鍵點是對 TTN_SHOW 通知消息的處理,此消息可以用來在工具提示顯示之前設置它的顯示位置。
另外一個要處理的消息是 TTM_ADJUSTRECT,它可以用來設置工具提示的精確顯示位置。
下面是一段例子代碼,其中添加了對工具提示的支持。
代碼解析
我們聲明了一些變量之后,我們來深入看看創(chuàng)建窗口的過程。首先,我們調(diào)用 CreateWindowEx 創(chuàng)建工具提示窗口,將主窗口設置為工具提示窗口的所有者(這一點對于獲得正確的 Z 順序行為非常重要)。
然后,我們獲取字體并將其設置到工具提示控件中,以便工具提示以與我們相同的字體呈現(xiàn)。
然后,我們測量目標字體中的文本,并將 g_rcText 矩形設置為該文本的尺寸。我們使用該矩形在工具提示控件中建立工具的邊界。
通過設置 TTF_SUBCLASS 標志,我們指示工具提示控件應子類化我們的窗口以攔截鼠標消息。這是一種靈活的方法,可以避免我們不得不使用 TTM_RELAYEVENT 消息手動轉(zhuǎn)發(fā)鼠標消息。
繪制工具提示就比較簡單了,我們只需要選擇字體和繪制文本就可以了。
運行這個例子,我們將鼠標懸停在文本上。我們可以看到工具提示會顯示出來,但它顯示到了錯誤的位置。
不過,除此之外,事情正在按預期進行。工具提示具有正確的字體,僅當鼠標懸停在文本本身上時觸發(fā),當鼠標離開文本時關(guān)閉。讓我們來解決工具提示顯示位置的問題,代碼如下圖所示:
TTN_SHOW 通知消息在即將顯示工具提示時發(fā)送。我們通過將文本矩形映射到屏幕坐標并使用 TTM_ADJUSTRECT 消息擴展矩形以包含工具提示控件將在文本周圍放置的所有邊距和邊框來響應通知。
這樣,當我們將工具提示放置在該位置時,邊距和邊框會精確匹配,并且文本將顯示在所需位置。
返回 TRUE 以向工具提示控件指示我們已負責定位窗口,并且它不應執(zhí)行其默認定位,這一點很重要。
我們再次運行例子程序,你會發(fā)現(xiàn)還有另一個問題:工具提示動畫仍在進行,如果動畫是幻燈片動畫,則尤其會分散注意力。這很容易解決:調(diào)整我們創(chuàng)建工具提示控件的方式。
TTS_NOANIMATE 樣式可以用來禁止動畫,這意味著工具提示只是彈出來并不再顯示動畫,這正是我們想要的。
大功告成!
以上就是實現(xiàn)工具提示的基礎知識。
當然,可能你想處理更多細節(jié),例如僅在字符串被剪切時才顯示工具提示。但是這些問題與工具提示無關(guān),因此我不會在這里討論它們,可能在以后的時間我們會來探討這個問題。
總結(jié)
如果時常以用戶的角度來使用軟件,你會發(fā)現(xiàn):工具提示真的是一個十分十分好用的特性。
那么,現(xiàn)在立即就在你的軟件里加上這個功能吧!