半年前在一些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对话框制作进度条的更多相关文章

  1. NX二次开发-BlockUI的Tree树控件

    关于BlockUI的Tree树控件只要研究UGOPEN里西门子官方的那个例子在结合去查NXOPEN的帮助基本就可以了.[不过我是看唐工的视频学会的,没办法自己领悟性不太强] //=========== ...

  2. NX二次开发-UFUN多选菜单对话框uc1605

    NX11+VS2013 #include <uf.h> #include <uf_ui.h> UF_initialize(); //多选菜单对话框 char sPromptSt ...

  3. NX二次开发-UFUN多按钮模态对话框UF_UI_message_dialog

    NX11+VS2013 #include <uf.h> #include <uf_ui.h> UF_initialize(); //多按钮模态对话框 ; char title_ ...

  4. NX二次开发-UFUN拾取草图尺寸对话框UF_UI_select_sketch_dimensions

    #include <uf.h> #include <uf_ui.h> #include <uf_sket.h> UF_initialize(); //拾取草图尺寸对 ...

  5. NX二次开发-UFUN按类选择对话框UF_UI_select_with_class_dialog

    #include <uf.h> #include <uf_ui.h> UF_initialize(); //按类选择对话框 char sCue[] = "按类选择对话 ...

  6. 【NX二次开发】常用的标准对话框

    1.uc1601 单按钮模态对话框 1 //来自"王牌飞行员_里海"的测试源码(qq群753801561) 2 extern DllExport void ufusr(char * ...

  7. NX二次开发-UFUN单按钮模态对话框窗口打印uc1601用法

    NX9+VS2012 #include <uf.h> #include <uf_ui.h> UF_initialize(); //方法1(uc1601) uc1601();// ...

  8. NX二次开发-基于MFC界面对话框与NX交互的开发

    打开VS2013 点击新建,选择MFC DLL 点击确定 点下一步 什么都不改,直接点完成 进来之后先编译一下,看是否编译成功 打开项目属性,更改这几处 $(UGII_BASE_DIR)\ugopen ...

  9. NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))

    NX二次开发API里没有对EXCAL读写操作的相关函数,市面上有很多种方法去实现,比如UFUN调KF,ODBC,OLE(COM组件)等等.这里我是用的OLE(COM组件)方式去做的,这种在VC上创建的 ...

随机推荐

  1. RealsenseD415/D435深度相机常用资料汇总

    1.Realsense SDK 2.0 Ubuntu 16.04 安装指导网址https://github.com/IntelRealSense/librealsense/blob/master/do ...

  2. BZOJ 4619: [Wf2016]Swap Space(贪心)

    传送门 解题思路 首先肯定是先处理\(b>a\)的,这样可以获得更多空间.处理时要先处理\(a\)比较小的,再处理\(a\)比较大的,因为要求最小值,而\(b>a\)的总量是确定的,那么就 ...

  3. [CSP-S模拟测试47]反思+题解

    打开题面,T3似乎被换过了.(那我就更有理由直接弃掉了) T1是我最害怕的乱搞题,赶紧扔了看T2.发现是个sb板子?雨天的尾巴弱化版? 然而线段树合并早忘干净了(最近几道可以线段树合并的题都是用别的方 ...

  4. java对象属性为date oracle数据库字段为Timestamp 处理方式

    解决方案 SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); java.util.Date da ...

  5. 2018 ICPC Asia Singapore Regional A. Largest Triangle (计算几何)

    题目链接:Kattis - largesttriangle Description Given \(N\) points on a \(2\)-dimensional space, determine ...

  6. js中继承的实现,原型链的知识点归纳,借用构造函数,组合继承(伪经典继承)

    博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/10/31/js%e4%b8%ad%e7%bb%a7%e6%89%bf%e7%9a%84%e ...

  7. SpringMVC_HandlerMethodArgumentResolver 实践

    HandlerMethodArgumentResolver  是什么? 就是用于解析参数的一个接口,springMVC(4.1)会直接调用这个接口的方法,对参数进行一定的解析.比如会在 Invocab ...

  8. Python中反射的简单应用

    ● 共两个文件:userInfo,reflex.py alex|123456|Manager hezewei|666|Student taibai|2222|Teachar userInfo #!/u ...

  9. 43-python基础-python3-字符串-常用字符串方法(一)-upper()-lower()-isupper()-islower()

    请注意, 这些方法没有改变字符串本身,而是返回一个新字符串. 如果你希望改变原来的字符串,就必须在该字符串上调用 upper()或 lower(),然后将这个新字符串赋给保存原来字符串的变量.   1 ...

  10. 2018-2-13-win10-安装Mpi

    title author date CreateTime categories win10 安装Mpi lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:23: ...