版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 前言本教程采用VS2008 + Pro/E Wildfire5.0来讲解怎样开发Pro/TOOLKIT应用程序。开发Pro/TOOLKIT应用程序时,Pro/E和Visual Studio的版本需对应,否则很难搭建开发环境,其对应关系如下:· Wildfire 4.0 <> VS2008· Wildfire 5.0 <> VS2008· Creo 1.0 <> VS2010· Creo 2.0 <> VS2010本教程所述的方法完全适用于Wildfire4.0 + VS2008、Creo1.0 + VS
2、2010、Creo2.0 + VS2010。2 一、准备/TOOLKIT在安装Pro/E时,默认是不安装Pro/TOOLKIT的,必须选中【API工具包】节点下的Pro/TOOLKIT选项。可以通过运行:Pro/E安装目录/bin/ptcsetup.bat 查看有无安装Pro/TOOLKIT。VS2008中文版下载地址:最好安装下VS2008 SP1补丁,否则编译Debug版本时常会报错。VS2008 SP1中文版下载地址:如果你需要开发64位的Pro/TOOLKIT程序,请确保安装X64 Compilers and Tools,如下图所示:3 二、新建工程点击【文件】->【新建】-&g
3、t;【项目】菜单命令,创建MFC DLL工程。输入工程名称:test_wf5。单击【确定】,然后在弹出的对话框中单击【下一步 >】DLL类型:使用共享 MFC DLL单击【完成】完成创建工程。4 三、配置工程属性注意:如果只编译32位程序,请跳过此步骤。单击【生成】->【配置管理器】菜单命令,然后依照下图操作。如果没有x64选项,那说明安装VS2008时,没有安装X64 Compilers and Tools,重新安装此选项即可。单击【项目】->【属性】菜单命令,添加如下头文件路径。【Pro/E安装目录】prodevelopincludes【Pro/E安装目录】protool
4、kitincludes注意:请先选择平台是Win32还是x64。32位:【Pro/E安装目录】prodevelopi486_ntobj【Pro/E安装目录】protoolkiti486_ntobj64位:【Pro/E安装目录】prodevelopx86e_win64obj【Pro/E安装目录】protoolkitx86e_win64obj推荐优先采用Unicode。5 四、添加Pro/TOOLKIT代码在test_wf5.cpp文件的最后添加以下Pro/TOOLKIT代码。该段代码的功能是:在Pro/E的【帮助】菜单后新增一个菜单【TestMenu】,然后在【TestMenu】下新增两个菜单项
5、【Test】和【ShowCurrModelName】。分别实现弹出测试对话框和获取当前模型的名称并弹窗显示。注意:先只要大体理解代码的整体思路即可,本教程会在第三篇:手把手教你开发Pro/TOOLKIT应用程序(三) 中具体阐明代码的所有细节,在学习完本篇和第二篇后,再去学习第三篇会比较好。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818
6、28384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143/ 包含常用头文件#include <>#include <>#include <>#include <>#include <>#include <>#include <>#incl
7、ude <> #include <>#include <>#include <> / 函数声明uiCmdAccessStateTestAccess(uiCmdAccessModeaccess_mode);uiCmdAccessStateShowCurrModelName_Access(uiCmdAccessModeaccess_mode); int Test(uiCmdCmdId command,uiCmdValue *p_value,void &
8、#160; *p_push_command_data);intShowCurrModelName(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data); / Pro/TOOLKIT入口函数extern "C" intuser_initialize()ProError err; / 信息文件名称ProFamilyNameMsgFile;Pr
9、oStringToWstring(MsgFile, "Test_Msg.txt"); / 添加菜单:TestMenuerr = ProMenubarMenuAdd("TestMenu", "TestMenu", "Help", PRO_B_TRUE, MsgFile); / 添加命令和菜单项/ 测试命令uiCmdCmdId cmd_id1;err = ProCmdActionAdd("Test", Test, uiCmdPrioDefault, TestAccess, PRO
10、_B_FALSE, PRO_B_FALSE, &cmd_id1);err = ProMenubarmenuPushbuttonAdd("TestMenu", "Test", "Test", "Test_Help",NULL, PRO_B_TRUE, cmd_id1, MsgFile); / 显示并输出当前模型的名称uiCmdCmdId cmd_id2;err = ProCmdActionAdd("ShowCurrModelName", ShowCurrModelName, ui
11、CmdPrioDefault, ShowCurrModelName_Access, PRO_B_FALSE, PRO_B_FALSE, &cmd_id2);err = ProMenubarmenuPushbuttonAdd("TestMenu", "ShowCurrModelName", "ShowCurrModelName", "ShowCurrModelName_Help", NULL, PRO_B_TRUE, cmd_id2, MsgFile); return 0; / Pro/T
12、OOLKIT结束时调用的函数extern "C" void user_terminate() / 测试命令响应函数int Test(uiCmdCmdId command,uiCmdValue *p_value,void *p_push_command_data)AfxMessageBox(_T("Just For Test");return 0; / 命令:获取当前模型的名称并显示intSho
13、wCurrModelName(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data)ProError err; / 获取当前模型ProMdl mdl;err = ProMdlCurrentGet(&mdl);if (PRO_TK_NO_ERROR != err)return -1; / 获取当前模型名称并显示ProName name;err = Pro
14、MdlNameGet(mdl, name);MessageBoxW(NULL, name, L"wf5 test", MB_OK); return 0; / 测试命令 菜单权限函数/ 任何情况下菜单都有效uiCmdAccessStateTestAccess(uiCmdAccessModeaccess_mode)return ACCESS_AVAILABLE;/*ProError err;ProMode mode; err = ProModeCurrentGet(&mode);if (err != PRO_TK_NO
15、_ERROR)return ACCESS_UNAVAILABLE; if (mode = PRO_MODE_PART | mode = PRO_MODE_ASSEMBLY)return ACCESS_AVAILABLE;elsereturn ACCESS_UNAVAILABLE;*/ / 获取当前模型名称并显示 菜单权限函数/ 只有在当前打开的模型为PART档,ASM档或Drawing档时菜单才有效uiCmdAccessStateShowCurrModelName_Access(uiCmdAccessModeaccess_mode)ProError err;ProMode&
16、#160; mode; err = ProModeCurrentGet(&mode);if (PRO_TK_NO_ERROR != err)return ACCESS_UNAVAILABLE; if (mode = PRO_MODE_PART | mode = PRO_MODE_ASSEMBLY| mode = PRO_MODE_DRAWING)return ACCESS_AVAILABLE;elsereturn ACCESS_UNAVAILABLE;代码说明:1. user_initialize()为Pro/TOOLKIT应用程序的入口函数,每个Pro/
17、TOOLKIT程序在被Pro/E加载时,首先执行此函数。2. user_terminate()是Pro/TOOLKIT程序被Pro/E卸载时执行的函数。3. ProMenubarMenuAdd为Pro/TOOLKIT程序添加菜单。4. ProCmdActionAdd为Pro/TOOLKIT程序添加一个命令,一般在添加菜单项时会将命令和菜单项关联,这样在单击菜单项时,就会执行对应的命令。5. ProMenubarmenuPushbuttonAdd为菜单添加菜单项。6. 以上代码添加了两个命令:test - 直接弹出测试对话框。ShowCurrModelName - 获取当前模型的名称并显示。6
18、五、编译程序1.选择需要编译Win32还是x64版本,以及Debug还是Release版本。2.单击【生成】->【生成解决方案】即可编译生成DLL文件:test_wf5.dll。注意:如果你的VS2008没有安装SP1补丁,编译Debug版本时常会报错,即使编译成功,Pro/E也无法加载生成的test_wf5.dll。在编写信息文件前,首先在工程文件夹下新建Bin文件夹,然后将第五步生成的test_wf5.dll拷贝到Bin文件夹下。 6.1 六、编写信息文件信息文件是用来定义Pro/TOOLKIT程序菜单及菜单项显示信息的文本文件。其内容以四行为一组,每行代表的意义如下:
19、183; 菜单或菜单项的名称· 菜单或菜单项的英文显示· 菜单或菜单项的中文显示或其他语言版本的显示· #加载Pro/TOOLKIT程序时,会读取信息文件,并根据菜单或菜单项的名称,匹配出菜单或菜单项的显示字符串。信息文件必须位于text目录下。操作步骤如下:1. 首先在Bin文件夹下新建text文件夹。2. 然后在text文件夹下新建两个子文件夹:chinese_cn、usascii,分别代表当Pro/E的语言版本为简体中文时,会读取chinese_cn文件夹下的信息文件。当Pro/E的语言版本为英文时,会读取usascii文件夹下的信息文件。3. 在chine
20、se_cn文件夹下新建如下内容的文本文件:Test_Msg.txt。1234567891011121314151617181920TestMenuTest测试菜单#TestTest测试#Test_HelpJust ForTest测试#ShowCurrModelNameShowCurrModelName显示模型名称#ShowCurrModelName_HelpShow Current Model Name显示模型名称#4. 在usascii文件夹下新建如下内容的文本文件:Test_Msg.txt。1234567891011121314151617181920TestMenuTest#TestTe
21、st#Test_HelpJust ForTest#ShowCurrModelNameShowCurrModelName#ShowCurrModelName_HelpShow Current Model Name#6.2 七、编写注册文件注册文件包含Pro/TOOLKIT应用程序的路径,text文件夹的路径等信息,Pro/E通过注册文件中包含的信息,找到Pro/TOOLKIT程序并加载。在Bin文件夹下新建文本文件protk.dat,并输入如下内容。1234567name Test_wf5startup
22、; dllexec_file .Test_wf5.dlltext_dir .revision Wildfireallow_stop TRUEend含义如下:o name:Pro/TOOLKIT应用程序标识名称o startup:Pro/TOOLKIT应用程序与Pro/E的交互方式,一般为dllo exec_file:Pro/TOOLKIT程序的路径,可以是绝对路径,也可以使相对路径o text_dir:text文件夹路径o revision:版本o allow_stop:是否允许手动终止Pro/TOOL
23、KIT程序o end:结束标志6.3 八、自动加载Pro/TOOLKI程序在Bin文件夹下新建一批处理文件GoProE.bat,输入命令:call Pro/E全路径例如在我的电脑上输入以下命令即可:1call"C:PTCproeWildfire 5.0binproe1.bat"双击GoProE.bat运行,将会启动Pro/E并自动加载我们编写的Pro/TOOLKIT程序。这是因为我们通过GoProE.bat来启动Pro/E,那么Pro/E的启动目录就为当前的Bin文件夹,Pro/E启动时,会自动读取启动目录下,名为protk.dat的注册文件,来加载Pro/TOOLKIT程
24、序。6.4 九、测试程序1.单击【测试】菜单项,会弹出以下对话框。一档案:零件档、组立档或工程图。单击【显示模型名称】菜单项,会弹出窗口,显示当前模型的名称。6.5 十、手动加载Pro/TOOLKIT程序我们也可以手动加载Pro/TOOLKIT程序。在手动加载Pro/TOOLKIT程序之前,我们需要先修改之前创建的注册文件protk.dat。将exec_dir和text_dir指定的相对路径改为绝对路径,否则手动加载时会由于找不到相对路径指定的文件而报错的。示例如下:1234567name Test_wf5startup&
25、#160; dllexec_file D:WangYaoTest_wf5BinTest_wf5.dlltext_dir D:WangYaoTest_wf5Binrevision Wildfireallow_stop TRUEend通过桌面上的快捷方式来启动Pro/E。单击【工具】->【辅助应用程序】1.单击【注册】,在弹出的对话框中选择Bin文件夹下的protk.dat文件。2.选中加载进来的Pro/TOOLKIT程序。3.单击【启动】。这篇主要讲解第一篇中Pro/TOOLKIT代码的
26、具体含义。Line 112包含Pro/TOOLKIT常用的头文件。Line 1524函数声明。Line 2655 user_initializeuser_initialize为Pro/TOOLKIT程序的初始化函数,每个Pro/TOOLKIT程序(DLL)都必须定义该函数。一般在该函数中添加菜单和菜单项。Line 3032定义了宽字符数组变量MsgFile用于存储信息文件的名称:Test_Msg.txt。ProFamilyName为宽字符(wchar_t)数组。ProStringToWstring函数将char字符串转换为wchar_t字符串。Line 35在Pro/E【帮助】菜单之
27、后添加菜单【TestMenu】。123456ProErrorProMenubarMenuAdd(ProMenuItemNamemenu_name,ProMenuItemLabeluntranslated_menu_label,ProMenuItemName neighbor,ProBooleanadd_after_neighbor,ProFileName filename);· menu_name:菜单名称,必须唯一。· untranslated_menu_label:菜单文本,该文本用于匹配信息文件中的内容。· neighbor:相邻的菜单名。"Hel
28、p"为【帮助】菜单。· add_after_neighbor:是否位于相邻菜单的右侧。PRO_B_TRUE表明位于右侧,否则位于左侧。· filename:信息文件名。Line 3941添加命令:Test。12345678ProErrorProCmdActionAdd(char *action_name, uiCmdCmdActFn
29、; action_cb, uiCmdPriority priority, uiCmdAccessFn access_func, ProBoolean allow_in_non_active_window, ProBoolean
30、 allow_in_accessory_window, uiCmdCmdId *action_id);· action_name:命令名称,必须唯一。· action_cb:命令的响应函数。· priority:命令的优先级,一般为uiCmdPrioDefault。· access_func:命令的访问权限函数。该函数的返回值关系到和命令关联的菜
31、单项的状态,具体如下:12345678typedefenum ACCESS_REMOVE = -1, / 移除菜单项 ACCESS_INVISIBLE, / 菜单项不可见 ACCESS_UNAVAILABLE, / 菜单项灰化不可选 ACCESS_DISALLOW, / 菜单项
32、不可选 ACCESS_AVAILABLE / 菜单项可选 uiCmdAccessState;· allow_in_non_active_window:是否在非激活窗口中显示命令关联的菜单项,一般为PRO_B_FALSE。· allow_in_accessory_window:是否在附属窗口中显示命令关联的菜单项,一般为PRO_B_FALSE。· action_id:命令ID。Line 4243添加菜单按钮:Test。123456789ProErrorProMenubarm
33、enuPushbuttonAdd(ProMenuItemName parent_menu, ProMenuItemName push_button_name, ProMenuItemLabel push_button_label, ProMenuLineHelp one_line_help, ProMenuItemName neighbor, ProBoolean
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025国机集团北京共享服务中心有限公司招聘参考考试试题及答案解析
- 深度解析(2026)《GBT 26882.4-2024粮油储藏 粮情测控系统 第4部分:信息交换接口协议》
- 深度解析(2026)《GBT 25966-2010带电辅助能源的家用太阳能热水系统技术条件》(2026年)深度解析
- 2025江西省信航航空科技有限公司招聘20人参考考试试题及答案解析
- 2025贵州遵义市仁怀市公共交通服务有限公司招聘公交驾驶员附管理人员招聘141人参考笔试题库附答案解析
- 2025年云南建投第一建设有限公司社会招聘(1人)参考考试题库及答案解析
- 公共利益条款滥用风险控制中的“程序性公共利益”机制
- 2025年合肥市招聘劳务派遣制机场消防员7名二次参考考试题库及答案解析
- 2026福建三明市沙县区紧缺急需学科教育人才引进7人参考笔试题库附答案解析
- 2026天津医科大学口腔医院人事代理制(第二批)招聘19人备考笔试题库及答案解析
- 北京信息科技大学《宏观经济学B》2023-2024学年第二学期期末试卷
- 新媒体环境下品牌IP形象构建与跨文化传播策略研究
- 关于支付生活费协议书
- 购买牛饲料合同协议
- 2025年中国两轮电动车行业研究报告
- 禽类屠宰与分割车间设计规范
- 2025重庆市建筑安全员《C证》考试题库及答案
- 必修2 第一单元 from problems to solutions
- 高中主题班会 梁文锋和他的DeepSeek-由DeepSeek爆火开启高中第一课-高中主题班会课件
- 污水处理设施运维服务投标方案(技术标)
- 椎弓根钉术后护理
评论
0/150
提交评论