文章目录

  • 1.创建皮肤DLL
  • 2.创建皮肤插件
  • 3.安装
  • 4.附加信息
  • 5.作者答疑

  本文翻译至官网,方便读者阅读。Rhino允许开发人员自定义Rhino的大部分接口,这样应用程序就像他们自己的一样。我们称之为自定义皮肤。通过自定义皮肤,您可以更改应用程序图标、启动屏幕、菜单栏、应用程序标题栏、关于框和工具栏。

  为Rhino创建自定义皮肤需要创建两个代码模块:
  <skin name>.rhs是一个常规的MFC DLL,它实现皮肤的图标、启动屏幕和可选的菜单。在本文中,我们将其称为皮肤DLL。
  <skin name>.rhp是一个Rhino实用程序插件,它实现了菜单处理程序(如果需要的话)和一个或多个定制命令。在本文中,我们将其称为皮肤插件。

1.创建皮肤DLL

  皮肤DLL是一个常规的MFC DLL,它实现皮肤的图标、启动屏幕和(可选的)菜单。要创建皮肤DLL,请启动Visual Studio并运行Rhino SDK安装的Rhino皮肤DLL向导。

Rhino Skin DLL向导创建了三个类:
  一个CWinApp-derived类。 这是DLL的入口点。
  一个CRhinoSkinDLL-derived类。 这个类允许您指定Rhino的图标、启动屏幕和菜单。关于这个类的更多信息,请参见rhinoSdkSkinDLL.h。
  CSplashWnd类。 这是一个启动屏幕类的基本实现。如果您需要更高级的东西,可以用您自己的实现替换它。
  修改项目的图标和启动画面位图。如果你的皮肤要覆盖Rhino的主菜单,那么你也需要创建你的菜单资源。记住填写在DLL’s .CPP文件顶部找到的开发人员信息块。这个模块类似于Rhino插件。

2.创建皮肤插件

  皮肤插件是实现菜单处理程序(如果需要的话)和一个或多个自定义命令的Rhino实用程序插件。
  要创建Rhino实用程序插件,请启动Visual Studio并运行Rhino SDK安装的Rhino插件向导。在选择要运行的向导时,请确保将新项目添加到开放解决方案中,而不是创建新解决方案。这样,您的皮肤项目就被组织到单个解决方案中。如果皮肤DLL提供了一个自定义菜单,那么将插件AppWizard生成的UUID复制到皮肤的CRhinoSkinDLL::SkinPlugInID()成员中。重要!这两个方法必须返回相同的UUID。这是一个关键的步骤,因为它确定了Rhino将加载的主要插件来管理其菜单和扩展Rhino命令集。 在你的CRhinoPlugIn派生类的头文件中添加以下重写:

// Skin DLL menu update handler
void OnInitPlugInMenuPopups(WPARAM wparam, LPARAM lparam);// Skin DLL menu command handler
BOOL OnPlugInMenuCommand(WPARAM wparam );// Change to CRhinoPlugIn::load_plugin_at_startup
plugin_load_time PlugInLoadTime();

  将以下定义添加到您的CRhinoPlugIn派生类的. cpp文件中。

CRhinoPlugIn::plugin_load_time CSkinPlugInSamplePlugIn::PlugInLoadTime()
{// Override to change load time to "at startup"return CRhinoPlugIn::load_plugin_at_startup;
}

  如果您的皮肤DLL提供了一个自定义菜单,那么将一个名为MenuHandler.cpp的源文件添加到插件项目中,并将CRhinoPlugIn::OnInitPlugInMenuPopups()和CRhinoPlugIn::OnPlugInMenuCommand()的定义放在这个文件中。重要!在MenuHandler.cpp中包含皮肤DLL的resource.h文件,以提供对皮肤DLL的菜单资源标识符的访问。 例如:

#include "stdafx.h"
#include "MySkinPlugIn.h"
#include "../MySkinDLL/Resource.h"// Put these to overrides in a separate CPP file so they could
// include the MySkinDLL/Resource.h file without conflicting
// with this projects resource.hvoid CSkinPlugInSamplePlugIn::OnInitPlugInMenuPopups(WPARAM wParam, LPARAM lParam)
{HMENU hMenu = (HMENU)wParam;if( NULL == hMenu )return;switch( GetMenuItemID(hMenu, LOWORD(lParam)) ){case IDM_SAMPLE_DISABLE:::EnableMenuItem( hMenu, IDM_SAMPLE_DISABLE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED );break;case IDM_SAMPLE_SUB_DISABLE:::EnableMenuItem( hMenu, IDM_SAMPLE_SUB_DISABLE, MF_BYCOMMAND|MF_DISABLED|MF_GRAYED );break;// TODO...}
}BOOL CSkinPlugInSamplePlugIn::OnPlugInMenuCommand(WPARAM wParam)
{ON_wString w;switch( (UINT)wParam ){case IDM_SAMPLE_ONE:w = L"Test Item One";break;case IDM_SAMPLE_TWO:w = L"Two";break;case IDM_SAMPLE_DISABLE:w = L"Disabled";break;case IDM_SAMPLE_SUB_A:w = L"Sub Menu A";break;case IDM_SAMPLE_SUB_B:w = L"Sub Menu B";break;case IDM_SAMPLE_SUB_DISABLE:w = L"Sub Menu Disabled";break;default:return true;}::RhinoMessageBox( w, L"OnMenu", MB_OK );return true;
}

  接着,编译皮肤插件。使用Rhino的PluginManager命令加载皮肤插件,这样它就有机会进行自我注册。

3.安装

  要安装自定义皮肤,请使用REGEDIT.EXE将scheme键添加到注册表中,该键具有皮肤DLL的路径。例如:

Item Value
Subkey HKEY_LOCAL_MACHINE\SOFTWARE\McNeel\Rhinoceros\4.0\Scheme: MySkin
Entry name SkinDLLPath
Type REG_SZ
Data value C:\Src\MySkin\MySkinDLL\Release\MySkinDLL.rhs

  现在,您可以通过使用/scheme= " <上一步中的方案名> "作为命令行参数创建Rhino可执行文件的快捷方式来测试您的自定义皮肤。例如:

"C:\Program Files\Rhinoceros 4.0\System\Rhino4.exe" /scheme=MySkin

4.附加信息

  如果用户选择不运行您的带皮肤版本的Rhino,那么您可能希望阻止加载您的带皮肤插件。可以通过检查Rhino使用的方案名是否与您的皮肤的方案名匹配来实现这一点。通过检入插件的CRhinoPlugIn::OnLoadPlugIn()成员来实现这一点。

BOOL CSkinPlugInSamplePlugIn::OnLoadPlugIn()
{ON_wString scheme = RhinoApp().RegistrySchemeName();if( scheme.CompareNoCase(L"Scheme: MySkin") != 0 )return -1; // Fail silently...// TODO...return CRhinoUtilityPlugIn::OnLoadPlugIn();
}

  合理的脚本代码可以有效的提高工作效率,减少重复劳动。

5.作者答疑


  如有疑问,请留言。

rhino插件-创建犀牛软件皮肤-rhino皮肤-界面开发-犀牛插件相关推荐

  1. illustrator插件-常用功能模块-测量路径长度-js脚本开发-AI插件

    文章目录 1.算法程序 2.作者答疑 1.算法程序   illustrator是矢量编辑软件,画板是绘制处理的重要容器,在印刷方面的一个重要功能就是测量路径长度,开发一个测量路径长度功能,以下功能仅用 ...

  2. vscode函数跳转插件_人生苦短,我们为 Cocos Creator 开发的插件和工具

    在使用 Cocos Creator 开发项目的过程中,为了提高开发效率我们开发了很多扩展插件,本文介绍常用的几款,抛砖引玉,希望给大家带来帮助. 腾讯开心鼠英语 网页扩展:运行时查看场景节点树 Coc ...

  3. 【CSDN插件测评】效率增倍,程序猿开发必备插件

    在测评活动最后一天写这篇测评,CSDN最近推出的这个Chrome浏览器插件:简洁方便,免费去广告,一键搜索和直达,搜索效率极大提升,是一款既有颜值又有料的程序猿必备插件.先分享一个实际使用场景图,看看 ...

  4. illustrator插件-拼版功能-内角线-js脚本开发-ai插件

    文章目录 1.算法程序 2.作者答疑 1.算法程序   illustrator是矢量编辑软件,画板是绘制处理的重要容器,在印刷方面的一个重要功能就是拼版,开发一个内角线模块,以下功能仅用于学习交流,请 ...

  5. 犀牛软件插件-rhino插件-visual studio-创建你的第一个插件

    文章目录 1. 插件向导 2.项目设置 3.属性表 4.样板建立 5.测试 6.添加额外的命令 7.有几件事需要考虑: 8.作者答疑   犀牛软件是一款专业的三维设计软件.简单实用方便,在三维矢量领域 ...

  6. 电脑上免费的记笔记软件怎么切换皮肤配色方案?

    随着社会的发展和科技的不断进步,很多人在工作当中所用到的笔记软件跟前些年相比有了天翻地覆的变化.对于很多年轻人来说,在选择笔记软件的时候,除了考虑他们的功能之外,对外观的要求也非常严格.免费的记笔记软 ...

  7. SkinFiner(人像磨皮软件)官方中文版V4.0 | skinfiner插件下载 | skinfiner安装教程

    skinfiner是什么软件: SkinFiner是一款优秀高效的全自动专业高品质人像磨皮软件,具有智能磨皮.快速均匀肤色.自然肤色润饰以及快速批量处理等强大功能,可以帮助用户以最简单和最快捷的方式磨 ...

  8. 犀牛软件无边框编辑设计,提高模型中的工作速度

    犀牛软件无边框编辑设计,提高模型中的工作速度 犀牛是设计专业设计师的软件工程师之一,允许用户设计问题,因为他们做不同类型的模型.在犀牛中建立等级的原则是建立边缘.为了在犀牛环境中建模,在空间中创建一个 ...

  9. C#面向插件级别的软件开发 - 开源研究系列文章

    在现在的面向对象的分析与设计软件开发过程中,最开始就是面向对象的软件开发.但是,在实际的软件开发过程中,很多都是面向接口的开发方式,这种是一种面向对象开发的模式.但是,今天笔者给大家带来的是面向插件的 ...

  10. illustrator条形码_Barcode Producer for Mac(创建条形码软件)

    Barcode Producer for Mac版是一款全新.实用的Mac版创建条形码软件,能轻松的为零售包装.标签.书籍.包装等创建完美的条形码.不仅如此,Barcode Producer for ...

最新文章

  1. php定时执行代码漏洞_【漏洞风险提示】Drupal任意PHP代码执行漏洞通告
  2. Microsoft Dynamics CRM 2011 JS操作集锦
  3. python与excel做数据可视化-我在工作中是怎么玩数据的—数据可视化系列教程—Python篇...
  4. python啥意思-python是什么意思
  5. snpeff注释变异(variants)
  6. MongoDB 访问控制
  7. IE从服务器上获取json后转为下载提示的bug
  8. java annotation list_Java 注解 (Annotation)你可以这样学
  9. 任务调度之Quartz2
  10. 【Python】忘记登录密码?遍历数字字母组合密码+模拟提交表单
  11. 腾讯云 mysql 密码_腾讯云mysql重新设置密码解决办法
  12. Java将一个对象的属性值copy给另一个相同的对象
  13. Shell脚本实现模拟并发及并发数控制
  14. linux安装tomcat_Linux云服务器安装jdk、Tomcat、MySQL5.7 - 咸鱼落成
  15. C#两个窗体间的相互通信(转)
  16. 华为盒子EC6108V9/V9U/V92/V97-HI3798MV100(免拆机-通刷固件)卡刷固件及教程
  17. 好用的5款火狐浏览器必备插件,每一款都很实用
  18. Git的cherry-pick等一些小知识
  19. 图片加水印怎么操作?来试试这几个简单的方法
  20. xml文件中的红叉号问题

热门文章

  1. DS18B20温度传感器使用详解
  2. Python怎么安装jieba库?
  3. java编程详解 pdf_Java高并发编程详解:多线程与架构设计 高清pdf扫描版[154MB]
  4. OpenCV python下载和安装
  5. 【接口测试用例设计思路】
  6. iOS dSYM详解和分析crash,ips文件
  7. HNOI2015解题报告
  8. adapterview android,[Android]ListView+AdapterView
  9. delphi问题归档(转载摘录)
  10. USB Server助力广汽埃安U盾远程安全管控