找回密码
 注册
查看: 852|回复: 2

[分享] ProE二次开发 Creo二次开发 菜单创建

[复制链接]
发表于 2015-6-11 10:11:28 | 显示全部楼层 |阅读模式
ProE二次开发 Creo二次开发 菜单创建
www.mcadex.com
QQ:910361522

CreoToolkit交互主要通过菜单和Tab按钮实现.其中菜单需要两部分组成:1.菜单资源文件;2.菜单创建代码

菜单资源文件在源码文件夹下创建text文件夹,特别强调,此文件夹名称必须为text,在text文件夹内创建不同语言资源文件夹, chinese_cn为简体中文资源文件夹, chinese_tw为繁体资源文件夹, usascii为英文资源文件夹.


Creo可根据系统环境加载不同语言的资源文件.当前以简体中文系统加以说明.
在chinese_cn中创建名称为CreoTKMenu.txt的文本文件

打开CreoTKMenu.txt,编辑内容如下

菜单资源文件格式为4行一组,每组的第一行为ID,第二行为本地语言显示内容,第三、四行为英文的”#”
菜单创建代码实现步骤打开”CreoTk.cpp”文件

在CreoTk.cpp文件的最后面,编辑如下代码

uiCmdAccessState UsrActiveButton ( uiCmdAccessMode access_mode )为控制菜单按钮有效性的函数,返回值有以下几种类型
ACCESS_REMOVE 移除菜单按钮,菜单按钮及关联将不可显示
ACCESS_INVISIBLE不可见菜单按钮, 菜单按钮将不可显示
ACCESS_UNAVAILABLE禁止菜单按钮,菜单按钮变灰,不可用
ACCESS_DISALLOW不可用菜单按钮,菜单按钮可用,但不执行动作函数
ACCESS_AVAILABLE激活菜单按钮,菜单按钮可用,可执行动作函数


void UsrActionCreoTk()为菜单按钮的动作函数,我们期望执行的命令就放到该函数内

extern "C" int user_initialize(int argc,char *argv[])为Creo调用程序时的接口函数,在Creo调用TK时会识别此函数
ProMenubarMenuAdd为菜单栏添加函数

ProCmdActionAdd菜单按钮动作函数设置
ProMenubarmenuPushbuttonAdd添加菜单按钮

extern "C"  void user_terminate()为Creo退出程序时的接口函数,扫尾工作将在这里处理

实现代码:
#include "ProToolkit.h"
#include "ProMenu.h"
#include "ProMenuBar.h"
#include "ProUtil.h"
//指定菜单按钮的有效性
uiCmdAccessState UsrActiveButton ( uiCmdAccessMode access_mode )
{
    return ACCESS_AVAILABLE;
}
//菜单按钮动作函数
void UsrActionCreoTk()
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
}
extern "C" int user_initialize(int argc,char *argv[])
{
    ProError err;

    //指定菜单资源文件名称,Creo会自动找到位于text文件夹中对应语言文件夹下的资源文件
    ProFileName pMenuFileName;
    ProStringToWstring(pMenuFileName, "CreoTKMenu.txt");

    //添加菜单栏
    //CreoTKMenubarID为菜单栏ID, CreoTKMenubar为菜单资源ID,
    //Help表示邻近菜单栏的ID, PRO_B_TRUE表示放在Help的后面,反之放在Help的前面
    err = ProMenubarMenuAdd("CreoTKMenubarID", "CreoTKMenubar", "Help", PRO_B_TRUE, pMenuFileName);
    if (err != PRO_TK_NO_ERROR)
        return err;

    //定义菜单按钮动作函数
    //ActionIdCreoTKMenuBtn为动作名称,UsrActionCreoTk为动作函数,uiProeImmediate为优先权设置
    //UsrActiveButton设置菜单按钮的有效性,两个PRO_B_TRUE是用来设置某些状态窗口是否可用,设置为PRO_B_TRUE即可
    //uiCmdCmdIdCreoTKMenuBtn动作ID是动作函数与菜单资源之间的连接
    uiCmdCmdId  uiCmdCmdIdCreoTKMenuBtn;
    err = ProCmdActionAdd("ActionIdCreoTKMenuBtn",(uiCmdCmdActFn)UsrActionCreoTk, uiProeImmediate, UsrActiveButton ,PRO_B_TRUE, PRO_B_TRUE, &uiCmdCmdIdCreoTKMenuBtn);
    //定义菜单按钮显示内容
    //CreoTKMenubarID表示该菜单按钮挂在CreoTKMenubarID之下
    //CreoTKMenuBtnID为此菜单按钮的ID,CreoTKMenuBtn为此菜单按钮显示内容的资源ID,CreoTKMenuBtnHelp为此菜单按钮的帮助说明资源ID
    //NULL用来定义邻近按钮,若放在最后面直接NULL即可,PRO_B_TRUE表示放在邻近菜单按钮后面,否则放在前面
    err = ProMenubarmenuPushbuttonAdd("CreoTKMenubarID", "CreoTKMenuBtnID", "CreoTKMenuBtn" , "CreoTKMenuBtnHelp", NULL, PRO_B_TRUE, uiCmdCmdIdCreoTKMenuBtn, pMenuFileName);

    return PRO_TK_NO_ERROR;
}
extern "C"  void user_terminate()
{

}
Tab制作方法
Tab按钮制作之前需要先将TK程序加载运行,加载方法见后面的《注册程序》介绍。
程序成功加载运行后,选择文件->选项

选中自定义功能区,在”从下列位置选取命令”中选择”TOOLKIT”命令,此时会自动显示出新建的菜单按钮名称
通过”新建选项卡”等按钮可创建编辑选项卡、组等,并可将菜单按钮拖入
设计完毕后,导出界面文件到CreoTk程序的text文件夹中

将导出的文件改名为toolkitribbonui.rbn
启动Creo并加载CreoTK可看到效果如下:




发表于 2018-8-30 14:14:08 | 显示全部楼层
楼主你好,我想问下按照你发的代码debug 会有错,都是显示未**的标识符,比如pro_B_ture, usrActioncreoTK,usractivebutton
回复 支持 反对

使用道具 举报

发表于 2018-10-29 08:30:29 | 显示全部楼层
每天学习一个钟。。。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

本站无意传播任何侵权软件与信息,部分资源为网友搜集或发布,仅供学习和研究使用,请支持正版。站内所发布的资源,如有侵犯你的权益,请联系我们,本站将立即改正或删除。

QQ|Archiver|手机版|小黑屋|联系我们|中华设计论坛 ( 苏ICP备20023187号-1

GMT+8, 2024-11-27 04:56

Powered by Discuz! X3.5

© 2006-2024 Daliang Team.

快速回复 返回顶部 返回列表