NX二次开发-BlockUI对话框嵌套MFC对话框制作进度条
半年前在一些QQ群看到有大神NX二次开发做出了进度条,那个时候我还不会弄,也不知道怎么弄得,后来断断续续得研究了一下,直到今天我把它做出来了。内心还是很喜悦的!回想自己这两年当初从没公司肯给我做NX二次开发的机会,在到去专业NX二次开发公司上班又混不下去,最后去干画图仔,但我没放弃这行,每晚坚持那份热爱,现在技术也终究有了些进步了。【如果有写得不对的地方,各位可以给我留言批评指正】
先上两张图片
将MFC进度条嵌套在NX窗口左下角

将MFC进度条嵌套在BlockUI对话框里


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
做这个东西,还是有些太复杂了,东改一下,西改一下,写了这么久博客,到现在我也不知道,这种很长的,复杂的内容,光一堆代码是说不清楚的,这种要怎么有条理的去写博客说清楚?
凑合看吧
【选择写博客,并不是为了分享。只是想让自己十年如一日的去坚持做一件事。】另外技术水平在高,如果不能形成产品变现,代码也只能烂在手里。
我觉得NX二次开发工程师真正的竞争并不是技术水平,而是谁能把技术转化成商业化产品盈利。那才是高手!毕竟赚钱才是头等大事,研究技术只是爱好。
NX11+VS2013
首先创建一个BlockUI对话框,添加一个绘图区控件,设置对话框可调整大小。

更改绘图区参数,把对话框撑大。

生成代码语言改成C++,然后保存。

把对话框文件放到二次开发Application文件夹里,后面我们要执行调用。
下面创建一个MFC DLL的项目



更改项目属性,多字节。$(UGII_BASE_DIR)\ugopen

添加附加包含目录,附加库目录


设置附加依赖项
libufun.lib
libufun_cae.lib
libufun_cam.lib
libufun_die.lib
libufun_vdac.lib
libufun_weld.lib
libnxopencpp.lib
libnxopencpp_annotations.lib
libnxopencpp_assemblies.lib
libnxopencpp_bodydes.lib
libnxopencpp_cae.lib
libnxopencpp_cam.lib
libnxopencpp_diagramming.lib
libnxopencpp_diagramminglibraryauthor.lib
libnxopencpp_die.lib
libnxopencpp_display.lib
libnxopencpp_drafting.lib
libnxopencpp_drawings.lib
libnxopencpp_facet.lib
libnxopencpp_features.lib
libnxopencpp_fields.lib
libnxopencpp_formboard.lib
libnxopencpp_gateway.lib
libnxopencpp_geometricanalysis.lib
libnxopencpp_geometricutilities.lib
libnxopencpp_issue.lib
libnxopencpp_layer.lib
libnxopencpp_layout2d.lib
libnxopencpp_markup.lib
libnxopencpp_mechanicalrouting.lib
libnxopencpp_mechatronics.lib
libnxopencpp_mfg.lib
libnxopencpp_modldirect.lib
libnxopencpp_motion.lib
libnxopencpp_openxml.lib
libnxopencpp_optimization.lib
libnxopencpp_options.lib
libnxopencpp_partfamily.lib
libnxopencpp_pdm.lib
libnxopencpp_physmat.lib
libnxopencpp_placement.lib
libnxopencpp_plas.lib
libnxopencpp_positioning.lib
libnxopencpp_preferences.lib
libnxopencpp_report.lib
libnxopencpp_routing.lib
libnxopencpp_shapesearch.lib
libnxopencpp_sheetmetal.lib
libnxopencpp_shipdesign.lib
libnxopencpp_sim.lib
libnxopencpp_tooling.lib
libnxopencpp_userdefinedobjects.lib
libnxopencpp_userdefinedtemplate.lib
libnxopencpp_validate.lib
libnxopencpp_visualreporting.lib
libnxopencpp_weld.lib
libugopenint.lib
libugopenint_cae.lib
libugopenint_cam.lib
libnxopenuicpp.lib

然后确定。
设置项目为64位

编译项目,生成成功。

下面我们把BlockUI的hpp和cpp加到我们的MFC项目里。

在UG二次开发中,若使用MFC库,一旦加上#include<Afx.h>头文件,下面这句话就报错
theDialog = GetPoints::theUI->CreateDialog(theDlxFileName);
解决CreateDialog函数在UI.hxx文件和WinUser.h中的冲突
在windows API中已经将CreateDialog定义为宏 CreateDialogW
当编译到UI.hxx中时,CreateDialog函数背当作CreateDialogW函数,从而产生矛盾
解决方法是在UI.hxx中加上一句 #undef CreateDialog,意为取消CreateDialog的宏定义
详细请看https://www.cnblogs.com/nxopen2018/p/11811708.html


然后编译,生成成功。

下面去MFC里面创建个资源对话框



设置对话框样式

将两边距离拖一拖,不留距离

下面创建对话框的hpp和cpp



下面设置对话框初始化


添加进度条控件,工具箱里拖过去

双击进度条,进入到代码。

然后在回到对话框,下面双击确定,我们去添加代码

添加头文件


定义一个全局变量


去apply_cb里写代码

//方式1,将MFC进度条固定到NX界面左下角
//打开MFC窗口
AFX_MANAGE_STATE(AfxGetStaticModuleState()); HWND UGHwnd = (HWND)UF_UI_get_default_parent();//获取UG窗口句柄
CWnd *ugwindow = CWnd::FromHandle(UGHwnd); CRect rect;
ugwindow->GetWindowRect(&rect);//获取UG矩形窗口的左上角坐标点和右下角坐标点 dlg = new FirstMFCDialog(ugwindow);
if (dlg != NULL)
{
BOOL ret = dlg->Create(IDD_DIALOG1, ugwindow);//创建对话框
dlg->ShowWindow(SW_SHOW);//显示对话框
dlg->SetWindowPos(ugwindow, rect.left, rect.bottom - , , , SWP_NOSIZE);//设置对话框固定位置
//rect.bottom-30为减去对话框的高度
}
//调用MFC确定按钮
dlg->OnBnClickedOk(); //卸载
delete dlg;
编译,生成成功。

下面去MFC的OK回调里添加代码

再次编译成功。
下面去更改NX的卸载方式

在去入口函数里添加初始化和终止

再去MFC对话框界面
因为我们希望弹出来的MFC只有进度条,不要有确定和取消的按钮,我们需要给这两个按钮添加变量,然后在MFC初始化代码里面去隐藏他们俩。



//隐藏确定和返回按钮
m_ok.ShowWindow(FALSE);
m_close.ShowWindow(FALSE);
最后我们再去拖MFC对话框,拖窄一点。类似这样

OK,到这里结束,我们编译项目,生成成功。直接去UG里执行。

下面在做一下,嵌套到BlockUI对话框里面的
先注释第一种方法的代码

在initialize_cb上面添加一段新代码

//枚举子窗口回调函数原型
HWND UIHwnd;
static int child_num;
static BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)//回调函数
{
if (hwnd) //如果子窗口存在
{
child_num++;//记录子窗口的数目
LPTSTR child_buffer_1 = new char[];//子窗口的标题名称
LPTSTR child_buffer_2 = new char[];//子窗口的类名
GetWindowText(hwnd, child_buffer_1, );//则开始获取窗口的标题
GetClassName(hwnd, child_buffer_2, );//则开始获取窗口的类名 if (strcmp(child_buffer_2, "#32770") == )//判断子窗口类名是否是#32770
{ //UF_UI_open_listing_window();
//UF_UI_write_listing_window(child_buffer_2);
//UF_UI_write_listing_window("\n"); UIHwnd = hwnd;//保存UI父句柄
//return FALSE;
}
} return TRUE;
}
去dialogShown_cb里添加新代码

UIHwnd = GetForegroundWindow(); //返回前台窗回的句柄,如果你调了UI或MFC界面那么会获得UI或MFC界面的窗口句柄
if (UIHwnd)//如果UI窗口句柄不为空
{
//GetWindowText(UIHwnd, pub_data->parent_buffer_1, 255); //获取UI窗口的标题
//GetClassName(UIHwnd, pub_data->parent_buffer_2, 255); //获取UI窗口的类名
EnumChildWindows(UIHwnd, (WNDENUMPROC)EnumChildProc, (LPARAM)NULL); //枚举子窗口
}
else
{
uc1601("提示!对话框初始化错误...", ); } AFX_MANAGE_STATE(AfxGetStaticModuleState());
dlg = new CFirstMFCDialog();
CWnd *UG_pWnd = CWnd::FromHandle(UIHwnd);//句柄转换
dlg->Create(IDD_DIALOG1, UG_pWnd); //创建一个非模态对话框
dlg->SetParent(UG_pWnd);
dlg->ShowWindow(SW_SHOW); //显示非模态对话框
dlg->UpdateWindow(); CPoint c_point;
CRect rect[]; int mfc_size[];// ui_size[2];
GetWindowRect(dlg->m_hWnd, rect[]);//获取MFC尺寸
mfc_size[] = rect[].Width();//宽度
mfc_size[] = rect[].Height();//高度 GetWindowRect(UIHwnd, rect[]);//获取ui尺寸
//c_point = rect[1].left;//ui左上角坐标
dlg->MoveWindow(, , rect[].Width(), rect[].Height());
去apply_cb里添加新代码

然后编译去执行代码

2019年11月20日
NX二次开发-BlockUI对话框嵌套MFC对话框制作进度条的更多相关文章
- NX二次开发-BlockUI的Tree树控件
关于BlockUI的Tree树控件只要研究UGOPEN里西门子官方的那个例子在结合去查NXOPEN的帮助基本就可以了.[不过我是看唐工的视频学会的,没办法自己领悟性不太强] //=========== ...
- NX二次开发-UFUN多选菜单对话框uc1605
NX11+VS2013 #include <uf.h> #include <uf_ui.h> UF_initialize(); //多选菜单对话框 char sPromptSt ...
- NX二次开发-UFUN多按钮模态对话框UF_UI_message_dialog
NX11+VS2013 #include <uf.h> #include <uf_ui.h> UF_initialize(); //多按钮模态对话框 ; char title_ ...
- NX二次开发-UFUN拾取草图尺寸对话框UF_UI_select_sketch_dimensions
#include <uf.h> #include <uf_ui.h> #include <uf_sket.h> UF_initialize(); //拾取草图尺寸对 ...
- NX二次开发-UFUN按类选择对话框UF_UI_select_with_class_dialog
#include <uf.h> #include <uf_ui.h> UF_initialize(); //按类选择对话框 char sCue[] = "按类选择对话 ...
- 【NX二次开发】常用的标准对话框
1.uc1601 单按钮模态对话框 1 //来自"王牌飞行员_里海"的测试源码(qq群753801561) 2 extern DllExport void ufusr(char * ...
- NX二次开发-UFUN单按钮模态对话框窗口打印uc1601用法
NX9+VS2012 #include <uf.h> #include <uf_ui.h> UF_initialize(); //方法1(uc1601) uc1601();// ...
- NX二次开发-基于MFC界面对话框与NX交互的开发
打开VS2013 点击新建,选择MFC DLL 点击确定 点下一步 什么都不改,直接点完成 进来之后先编译一下,看是否编译成功 打开项目属性,更改这几处 $(UGII_BASE_DIR)\ugopen ...
- NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))
NX二次开发API里没有对EXCAL读写操作的相关函数,市面上有很多种方法去实现,比如UFUN调KF,ODBC,OLE(COM组件)等等.这里我是用的OLE(COM组件)方式去做的,这种在VC上创建的 ...
随机推荐
- POJ 2387 Til the Cows Come Home (dijkstra模板题)
Description Bessie is out in the field and wants to get back to the barn to get as much sleep as pos ...
- element-uI隐藏表格头部
1.表格结构定义 :show-header="hiddenTableHeader" 2. data里面定义 hiddenTableHeader:false,
- imp需要
导入全部: imp user/password@10.10.10.10:1521/orcl file = C:\Users\Administrator\Desktop\20170404230000.d ...
- Github上的SlidingMenu菜单的使用方法
GitHub上的SlidingMenu的配置方法 1. 首先明确SlidingMenu是什么? 2. 如何使用SlidingMenu框架呢? GitHub上的SlidingMenu的配置方法 1. 首 ...
- JAVA学习之面向对象
面向对象是相对面向过程而言面向过程:强调的是功能行为面向对象:将功能封装进对象,强调具备了功能的对象 不论面向对象还是面向过程都是一种开发思想而已.举一个例子来理解面向对象和面向过程把大象装进冰箱分三 ...
- spring+freemarker 乱码解决办法
这样应该可以了~ <!-- freemarker config --> <bean id="freemarkerConfig" class="org.s ...
- find php.ini 和 php的执行目录 bin目录
有的时候一台新服务器,有些软件的目录和文件的位置我们不知道在哪里,我们可以用find来寻找 找php.ini find / -name php.ini 找php的执行目录 find / -name p ...
- 爬虫(三)—— BeautifulSoup模块获取元素
目录 BeautifulSoup 一.BeautifulSoup简介 二.安装模块 三.解析器 四.Beautiful Soup的使用 五.查找元素 1.遍历文档树 2.搜索文档树 Beautiful ...
- editplus 正则表达式 分组替换
editplus :zz正则表达式替换 /开头的api+换行符 替换为 /开头的api+空格 \1后有空格 editplus :zz正则表达式替换 行首两个数字+换行符 替换为 行首两个数字+空 ...
- jumpserver注意事项以及报错处理
需要注意下面亮点 在使用jumpserver过程中,有一步是系统用户推送,要推送成功,client(后端服务器)要满足以下条件: 后端服务器需要有python.sudo环境才能使用推送用户,批量命令等 ...