Creo 二次开发-UI 开发(2)常用控件

2023-12-21 17:08

本文主要是介绍Creo 二次开发-UI 开发(2)常用控件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

uifcPushButton

常用动作:

  • OnActivate()——点击按钮触发
  • OnMouseEnter()——鼠标悬停触发
  • OnMouseExit()——鼠标离开触发
  1. 按钮可以在 UI Editor 中创建,toolkit 中直接用 uifcPushButtonFind()获取句柄。
uifcPushButton_ptr btn_workdir = uifcPushButtonFind(DialogName, "btn_workdir");
btn_workdir->AddActionListener(new SelectDir("ip_workdir", true));
class SelectDir : public uifcDefaultPushButtonListener
{
private:xstring name;bool flag; //是否更改工作目录public:SelectDir(xstring component, bool changed = false){name = component;flag = changed;}public:void OnActivate(uifcPushButton_ptr handle){pfcSession_ptr session = pfcGetProESession();pfcDirectorySelectionOptions_ptr options;options = pfcDirectorySelectionOptions::Create();try{xstring dir = session->UISelectDirectory(options);if (dir != xstring()){uifcInputPanel_ptr MyInputPanel = uifcInputPanelFind(handle->GetDialog(), name);MyInputPanel->SetTextValue(dir);if (flag){session->ChangeDirectory(dir);}}}OTK_EXCEPTION_PRINT_LOG}};
  1. 按钮也可以在 toolkit 中直接创建
uifcPushButton_ptr MyCreatePushButton(xstring DialogName, xstring ButtonName,xstring text,xint grid_c, xint grid_r,uifcPushButtonListener_ptr listener = new MyButtonListener())
{uifcDialog_ptr Dialog = uifcDialogFind(DialogName, DialogName);uifcGridData_ptr Btn1_Grid = uifcGridData::Create(grid_c, grid_r);uifcPushButton_ptr Btn = uifcPushButtonDefine(ButtonName);Dialog->InsertChild((uifcComponent_ptr)Btn, Btn1_Grid);uifcPushButton_ptr Btn1 = uifcPushButtonFind(DialogName, ButtonName);Btn1->SetText(text);Btn1->AddActionListener(listener);return Btn1;
}

uifcCheckButton

创建方法和 uifcPushButton 类似。GetCheckedState()可以获取当前的选定状态,分为 Set、Unset 和 Mixed 三种,其中 Set 和 Unset 分别为选中和不选中,而 Mixed 按用户手册的解释是一种既不是选中也不是不选中的状态,具体有什么用处暂时还没有发现。

uifcRadioGroup 和 uifcOptionMenu

  1. 想获取 RadioGroup 的选定项需要先用 GetSelectedItemNameArray()获取选定项的名称数组,返回值为 xstringsequence_ptr,通常该数组只有一个元素,不知道会不会存在意外情况,目前没有遇到过。uifcRadioGroupItemFind()可以通过名称获取 RadioGroupItem,通过该对象可以获取选定项相关信息。
  2. OptionMenu 和 RadioGroup 使用上类似,也是要先获得 ItemName,在通过 ItemName 获取 Item,然后再或许相关信息。
  3. OptionMenu 的监听器中有一个成员函数 OnItemHover(),当鼠标滑过选项时触发。

uifcInputPanel

uifcDefaultInputPanelListener 的成员函数中有 OnChange(),按字面意思就是在输入框内容更改时触发。手动更改输入框内容确认可以触发该函数,但是在程序内通过按键触发动作来修改输入框内容的时候,该函数不会被触发。

uifcList

  1. uifcList 中的 ListType 可以设置 List 中是否显示表头和复选框。List 可以有多列,再 ColumnsHeaderText 中可以设置表头,多列用 tab 隔开。不过这个表头没有任何动作,也不能实现排序。
  2. uifcList 的监听器中 OnItemActivate()在双击选项时触发。利用该函数可以实现双击选项选定复选框功能,配合 ItemSelectionPolicy 的 Extended 选项,可以实现多选项同时更改复选框状态。但是目前有一个 bug,在多个选项通过双击更改选定状态时,需要按住 ctrl。因为当 ItemSelectionPolicy 为 Extended,仅单击鼠标只能选择一个选项,也就是在双击的时候不按 ctrl,就只能改变当前选项状态。
    void OnItemActivate(uifcList_ptr handle)
    {xstringsequence_ptr SelectedName = handle->GetSelectedItemNameArray();bool flag = true;for (int i = 0; i < SelectedName->getarraysize(); i++){uifcListItem_ptr ListItem = uifcListItemFind(handle->GetDialog(),handle->GetComponent(),SelectedName->get(i));if (ListItem->GetCheckedState() == uifcCHECK_STATE_UNSET){flag = false;break;}}for (int i = 0; i < SelectedName->getarraysize(); i++){uifcListItem_ptr ListItem = uifcListItemFind(handle->GetDialog(),handle->GetComponent(),SelectedName->get(i));if (flag)ListItem->SetCheckedState(uifcCHECK_STATE_UNSET);elseListItem->SetCheckedState(uifcCHECK_STATE_SET);}
    }
    
  3. ItemSelectionPolicy 可以设置选项的选择方式:
  • Single——可以不选或选择一个
  • Browse——只能选择一个
  • Multiple——可以选择多个
  • Extended——配合 shift 和 ctrl 进行多选
  • None——不能选择
  1. 列表写入时,需要先创建 uifcItemPositionData 对象,设置待写入内容在类表中的位置。再创建 uifcListItem 对象,SetText()设置内容,SetCheckedState()设置复选框状态,SetIsSelected()设置当前项选定状态。

    //清空列表
    if (list_content)list_export->DeleteItemsByName(list_content);int count = models->getarraysize();
    if (count > 0)
    {for (int i = 0; i < count; i++){pfcModel_ptr model = models->get(i);uifcItemPositionData_ptr ItemPos = uifcItemPositionData::Create();ItemPos->SetIndex(i);ItemPos->SetIsBefore(xfalse);xstring istr = to_string(i).c_str();uifcListItem_ptr ListItem = uifcListItemDefine(istr);ListItem->SetText(model->GetFileName());ListItem->SetCheckedState(uifcCHECK_STATE_SET);ListItem->SetIsSelected(xtrue);list_export->InsertItem(ListItem, ItemPos);}
    }
    

layout 和 grid

Creo6.0 中有 layout 和 grid 两个布局工具,暂时没有发现二者在使用上有何区别。layout 自身带属性,grid 自身没有任何属性。而且这两个东西应该是 Creo4 以后的产物。Creo6.0 创建的 UI 文件在 Creo3.0 中存在异常,经过摸索发现以下几处不同:

  1. Creo6.0 生成的.res 文件中出现(.ResourceHints “Version:Creo4”),Creo3.0 中没有,推测是 Creo4 以后的版本加入的
  2. Creo3.0 中没有 grid 工具
  3. Creo6.0 中元素可以占据多个网格,Creo3.0 中一个元素只能占一个网格。.res 文件中出现(Size 1 9),对应的就是 Creo6.0 中元素所占用的网格数

只要在 Creo6.0 中不使用 grid 且每个元素仅占一个网格,然后删掉.res 文件中的版本标志,UI 文件可以在 Creo3.0 中正常使用

sash

也可以作为布局工具。在 sash 中的元素可以随意拖拽外形大小。sash 只能放两个元素,且只能横向布置,真的就像两扇窗户一样。

uifcProgressBar

SetMaximumIntegerValue()和 SetMinimumIntegerValue()分别设置进度条的最大值和最小值,SetIntegerValue()设置当前值。

实例 1.2BatchExport

批量导出工具,可以批量导出 stp 和 pdf,批量迁移 drw。otk 似乎没有 dwg 导出函数,dxf 的导出参数太少,导出质量较差。这个有时间再继续研究。
待开发功能:

  • stp 导出增加添加文件功能
  • 设置导出文件名称功能
  • stp 导出附带表格,生成导出文件信息并附带截图功能

源代码:1.2BatchExport
源代码通过 makefile 编译,VS2012+Creo3.0 编译通过。
内置 Install.exe 自动生成 creotk.dat 文件

这篇关于Creo 二次开发-UI 开发(2)常用控件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/520818

相关文章

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom