当前位置:文档之家› Proe应用ProTOOLKIT二次开发

Proe应用ProTOOLKIT二次开发

手把手教你开发Pro/TOOLKIT应用程序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 + VS2010、Creo2.0 + VS2010。

2一、准备1.Pro/TOOLKIT在安装Pro/E时,默认是不安装Pro/TOOLKIT的,必须选中【API工具包】节点下的Pro/TOOLKIT选项。

可以通过运行:[Pro/E安装目录]/bin/ptcsetup.bat 查看有无安装Pro/TOOLKIT。

2.VS2008VS2008中文版下载地址:最好安装下VS2008 SP1补丁,否则编译Debug版本时常会报错。

VS2008 SP1中文版下载地址:如果你需要开发64位的Pro/TOOLKIT程序,请确保安装X64 Compilers andTools,如下图所示:3二、新建工程点击【文件】->【新建】->【项目】菜单命令,创建MFC DLL工程。

输入工程名称:test_wf5。

单击【确定】,然后在弹出的对话框中单击【下一步 >】DLL类型:使用共享 MFC DLL单击【完成】完成创建工程。

4三、配置工程属性1.新增64位编译平台注意:如果只编译32位程序,请跳过此步骤。

单击【生成】->【配置管理器】菜单命令,然后依照下图操作。

如果没有x64选项,那说明安装VS2008时,没有安装X64 Compilers and Tools,重新安装此选项即可。

2.新增头文件路径单击【项目】->【属性】菜单命令,添加如下头文件路径。

【Pro/E安装目录】\prodevelop\includes【Pro/E安装目录】\protoolkit\includes注意:请先选择平台是Win32还是x64。

3.新增库文件路径32位:【Pro/E安装目录】\prodevelop\i486_nt\obj 【Pro/E安装目录】\protoolkit\i486_nt\obj64位:【Pro/E安装目录】\prodevelop\x86e_win64\obj 【Pro/E安装目录】\protoolkit\x86e_win64\obj4.添加附加依赖项mpr.libwsock32.lib psapi.libprotk_dllmd.lib prodev_dllmd.lib netapi32.lib5.设置工程字符集推荐优先采用Unicode。

5四、添加Pro/TOOLKIT代码在test_wf5.cpp文件的最后添加以下Pro/TOOLKIT代码。

该段代码的功能是:在Pro/E的【帮助】菜单后新增一个菜单【TestMenu】,然后在【TestMenu】下新增两个菜单项【Test】和【ShowCurrModelName】。

分别实现弹出测试对话框和获取当前模型的名称并弹窗显示。

注意:先只要大体理解代码的整体思路即可,本教程会在第三篇:手把手教你开发Pro/TOOLKIT应用程序(三) 中具体阐明代码的所有细节,在学习完本篇和第二篇后,再去学习第三篇会比较好。

// 包含常用头文件#include <ProToolkit.h>#include <ProUtil.h>#include <ProMenuBar.h>#include <ProMenu.h>#include <ProMode.h>1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344 // 包含常用头文件#include <ProToolkit.h>#include <ProUtil.h>#include <ProMenuBar.h>#include <ProMenu.h>#include <ProMode.h>#include <ProMdl.h>#include <ProSolid.h>#include <ProAsmcomp.h>#include <ProArray.h>#include <ProModelitem.h>#include <ProLayer.h>// 函数声明uiCmdAccessState TestAccess(uiCmdAccessMode access_mode); uiCmdAccessState ShowCurrModelName_Access(uiCmdAccessMode access_mode);int Test(uiCmdCmdId command,uiCmdValue *p_value,void *p_push_command_data);int ShowCurrModelName(uiCmdCmdId command,uiCmdValue *p_value,void *p_push_command_data);// Pro/TOOLKIT入口函数extern "C" int user_initialize(){ProError err;// 信息文件名称ProFamilyName MsgFile;ProStringToWstring(MsgFile, "Test_Msg.txt");// 添加菜单:TestMenuerr = ProMenubarMenuAdd("TestMenu", "TestMenu", "Help", PRO_B_TRUE, MsgFile);// 添加命令和菜单项// 测试命令uiCmdCmdId cmd_id1;err = ProCmdActionAdd("Test", Test, uiCmdPrioDefault, TestAccess, PRO_B_FALSE, PRO_B_FALSE, &cmd_id1);err = ProMenubarmenuPushbuttonAdd("TestMenu", "Test", "Test","Test_Help",4546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 NULL, PRO_B_TRUE, cmd_id1, MsgFile);// 显示并输出当前模型的名称uiCmdCmdId cmd_id2;err = ProCmdActionAdd("ShowCurrModelName", ShowCurrModelName, uiCmdPrioDefault,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/TOOLKIT结束时调用的函数extern "C" void user_terminate(){}// 测试命令响应函数int Test(uiCmdCmdId command,uiCmdValue *p_value,void *p_push_command_data){AfxMessageBox(_T("Just For Test"));return 0;}// 命令:获取当前模型的名称并显示int ShowCurrModelName(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;}89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 // 获取当前模型名称并显示ProName name;err = ProMdlNameGet(mdl, name);MessageBoxW(NULL, name, L"wf5 test", MB_OK);return 0;}// 测试命令 菜单权限函数// 任何情况下菜单都有效uiCmdAccessState TestAccess(uiCmdAccessMode access_mode){return ACCESS_AVAILABLE;/*ProError err;ProMode mode;err = ProModeCurrentGet(&mode);if (err != PRO_TK_NO_ERROR){return ACCESS_UNAVAILABLE;}if (mode == PRO_MODE_PART|| mode == PRO_MODE_ASSEMBLY){return ACCESS_AVAILABLE;}else{return ACCESS_UNAVAILABLE;}*/}// 获取当前模型名称并显示 菜单权限函数// 只有在当前打开的模型为PART 档,ASM 档或Drawing 档时菜单才有效uiCmdAccessState ShowCurrModelName_Access(uiCmdAccessMode access_mode) {ProError err;ProMode mode;err = ProModeCurrentGet(&mode);if (PRO_TK_NO_ERROR != err)133 134 135 136 137 138 139 140 141 142 143 {return ACCESS_UNAVAILABLE;}if (mode == PRO_MODE_PART|| mode == PRO_MODE_ASSEMBLY|| mode == PRO_MODE_DRAWING){return ACCESS_AVAILABLE;}else{return ACCESS_UNAVAILABLE;}}代码说明:1. user_initialize()为Pro/TOOLKIT 应用程序的入口函数,每个Pro/TOOLKIT 程序在被Pro/E 加载时,首先执行此函数。

相关主题