Building Coder(Revit 二次开发) - 翻译 Revit Tooltip

原文链接: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);
            }
        }
    }



请在此处下载完整代码。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章