原文連結: Translate Revit Tooltips
由于 AutoDesk 已經将其大部分産品的底層架構統一了,是以 Kean Walmsley (譯者注:AutoCAD二次開發部落客 Through the Interface) 對 AutoCAD 界面定制的研究對于 Revit 同樣有效。本文從定制 Tooltip 入手,介紹如何利用 AdWindows.dll 定制化翻譯 Revit 的 Tooltip 文本。
AdWindows.dll 提供的命名空間 Autodesk.Windows 中提供了部分 Ribbon 使用者界面的定制接口。為了捕獲 Revit 顯示的 Tooltip,需要注冊針對所有 Tooltip 都會觸發的
Autodesk.Windows.ComponentManager.TooltipOpened 事件。
當然,僅僅是實作設定 Tooltip 的語言,我們也可以使用獨立應用程式調用 AdWindows.dll 的方式來實作。但是顯然使用 Revit Add-in 的方式會更加直覺(譯者注:因為我目前項目要求将一個數字平台與 Revit 環境無縫綁定,是以插件形式是必選。而且通過 AdWindows.dll,我可以實作将 Revit 環境标志位我自己的數字平台的效果)。
下面這段代碼展示的是主要邏輯:
Autodesk.Windows.ComponentManager.ToolTipOpened += ( s, e ) =>
{
Autodesk.Internal.Windows.ToolTip tt = s as Autodesk.Internal.Windows.ToolTip;
if (tt != null)
{
if (tt.Content is RibbonToolTip)
{
RibbonToolTip rtt = (RibbonToolTip)tt.Content;
if (rtt.Content == null && rtt.ExpandedContent == null)
{
// 防止關閉 Revit 中的浏覽器控件 Tooltip
if (!rtt.Title.Contains(" : "))
{
CloseAndReshowTooltip(tt);
}
}
else
{
rtt.Content =TranslateIfString(rtt.Content, GetId(rtt));
TranslateObjectContent(rtt.Content, GetId(rtt));
// 翻譯擴充内容(添加ID到結尾來将其與基本内容區分開)
rtt.ExpandedContent = TranslateIfString(rtt.ExpandedContent, GetExpandedId(GetId(rtt)));
TranslateObjectContent(rtt.ExpandedContent, GetExpandedId(GetId(rtt)));
// 強制為特定控件顯示 Tooltip(目前是寫死位移,更好的方式是基于目前滑鼠的尺寸)
tt.Show(System.Windows.Forms.Cursor.Position.X, System.Windows.Forms.Cursor.Position.Y + 16);
}
}
else if (tt.Content is UriKey)
{
// 針對需要系統解析的 Tooltip 将顯示交給系統延時處理
CloseAndReshowTooltip(tt);
}
else
{
// 基本的隻包含文本的 Tooltip
tt.Content = TranslateIfString(tt.Content, null);
}
}
}
請在 此處下載下傳完整代碼。