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

点击新建,选择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
然后点确定
添加头文件

添加ufusr入口函数和卸载方式

extern "C" DllExport void ufusr(char *param, int *retcod, int param_len)
{ if (UF_initialize())
{
/* Failed to initialize */
return;
}
// The following method shows the dialog immediately UF_terminate();
} extern "C" DllExport int ufusr_ask_unload()
{
return (UF_UNLOAD_UG_TERMINATE);
//return (UF_UNLOAD_IMMEDIATELY);
//return UF_UNLOAD_SEL_DIALOG;
}
将项目改成64位的
打开配置管理器



编译项目,成功

添加对话框,找到资源视图,右键添加资源

选择Dialog,点新建


添加类
对话框右键-添加类
随便取名字,CFirstMFCDialog,点完成


编译项目成功
添加对话框初始化虚函数
对话框点右键-添加类向导

然后点确定

在编译项目成功
添加头文件

在去ufusr入口函数里获取UG窗口句柄,设置对话框。写的内容固定格式

AFX_MANAGE_STATE(AfxGetStaticModuleState());
HWND UGHwnd = (HWND)UF_UI_get_default_parent();//获取UG窗口句柄
CWnd *ugwindow = CWnd::FromHandle(UGHwnd);
CFirstMFCDialog *dlg = new CFirstMFCDialog(ugwindow);
if (dlg != NULL)
{
BOOL ret = dlg->Create(IDD_DIALOG1, ugwindow);
dlg->ShowWindow(SW_SHOW);
//dlg->SetWindowPos(ugwindow, 300, 220, 200, 200, SWP_NOSIZE);//设置对话框固定位置
}
在编译项目成功
打开UG去调对话框就出来了

提示,因为选择的卸载方式,需求每次修改代码重新编译,都要关闭UG。来卸载掉。
截止到这个MFC+NX二次开发的这个环境搭建就结束了
下面做一个实例。
选择位置,创建块。(大概演示,不在详细写步骤)
对话框

对话框初始化代码
BOOL CFirstMFCDialog::OnInitDialog()
{
CDialogEx::OnInitDialog(); // TODO: 在此添加额外的初始化 //对话框初始值
m_edit1.SetWindowText("");
m_edit2.SetWindowText("");
m_edit3.SetWindowText(""); return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
点构造器代码
void CFirstMFCDialog::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码 UF_initialize(); UF_UI_lock_ug_access(UF_UI_FROM_CUSTOM);//对话框加锁 char sCue[] = "点构造器";
UF_UI_POINT_base_method_t base_method = UF_UI_POINT_INFERRED;
tag_t tPoint = NULL_TAG;
double sBasePoint[];
int iResponse;
UF_UI_point_construct(sCue, &base_method, &tPoint, sBasePoint, &iResponse); UF_UI_unlock_ug_access(UF_UI_FROM_CUSTOM);//对话框解锁 UF_terminate();
}
点确定的代码
void CFirstMFCDialog::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CDialogEx::OnOK(); UF_initialize(); //获取对话框里的输入值
CString length;
m_edit1.GetWindowTextA(length); CString width;
m_edit2.GetWindowTextA(width); CString high;
m_edit3.GetWindowTextA(high); //转换
//CString转char*
USES_CONVERSION;
char* length1 = T2A(length.GetBuffer());
length.ReleaseBuffer(); char* width1 = T2A(width.GetBuffer());
width.ReleaseBuffer(); char* high1 = T2A(high.GetBuffer());
high.ReleaseBuffer(); UF_FEATURE_SIGN sign = UF_NULLSIGN;
char * edge_len[] = { length1, width1, high1 };
tag_t blk_obj_id = NULL_TAG;
UF_MODL_create_block1(sign, sBasePoint, edge_len, &blk_obj_id); UF_terminate();
}

Caesar卢尚宇
2019年7月13日
NX二次开发CreateDialog函数在UI.hxx文件和WinUser.h中的冲突【转载】
https://www.cnblogs.com/nxopen2018/p/11811708.html
NX二次开发-基于MFC界面对话框与NX交互的开发的更多相关文章
- NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))
NX二次开发API里没有对EXCAL读写操作的相关函数,市面上有很多种方法去实现,比如UFUN调KF,ODBC,OLE(COM组件)等等.这里我是用的OLE(COM组件)方式去做的,这种在VC上创建的 ...
- vs2012开发基于MFC的ActiveX控件
1.新建工程 2.一直点击下一步,直到出现一下界面,注意红色标注选项,点击完成. 3.进入工程的属性界面,设置工程属性 4.添加对话框资源及其他控件,添加对话框类, 5.设置对话框属性 6.设置Dia ...
- NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))
在看这个博客前,请读者先去完整看完:NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))https://ufun-nxopen.blog.csdn.net/article ...
- 最全的基于MFC的ActiveX控件开发教程
浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...
- NX二次开发-BlockUI对话框嵌套MFC对话框制作进度条
半年前在一些QQ群看到有大神NX二次开发做出了进度条,那个时候我还不会弄,也不知道怎么弄得,后来断断续续得研究了一下,直到今天我把它做出来了.内心还是很喜悦的!回想自己这两年当初从没公司肯给我做NX二 ...
- NX二次开发-Block UI C++界面关于 在Block UI中UF_initialize();和UF_terminate();的使用
关于 在Block UI中UF_initialize();和UF_terminate();的使用 用Block UI作NX二次开发的时候,不需要在使用UFUN函数的时候加UF_initialize() ...
- 基于MFC开发的指纹识别系统.
MFC-FingerPrint 基于MFC开发的指纹识别系统. 效果图如下: 在第12步特征入库中,会对当前指纹的mdl数据与databases中所有的mdl进行对比,然后返回识别结果. 一.载入图像 ...
- 基于MFC的ActiveX控件开发教程------------浏览器插件之ActiveX开发
浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...
- NX二次开发-C#使用DllImport调用libufun.dll里的UF函数(反编译.net.dll)调用loop等UF函数
在写这篇文章的时候,我正在头晕,因为下班坐车回家,有些晕车了.头疼的要死.也吃不下去饭. 版本:NX11+VS2013 最近这一年已经由C++过度到C#,改用C#做应用程序开发和NX二次开发. C#在 ...
随机推荐
- Mybatis基于XML配置SQL映射器(三)
Mybatis之动态SQL mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: if choo ...
- MFC不同窗口之间传递数据
问题的由来: 最近在学习串口通信编程,参考的例子大多数都是在一个对话框中同时完成对串口的配置及数据收发的功能.这种方式不太适合于写自己的应用程序(会使得程序界面比较混乱,无法突出程序的重点),因此想让 ...
- [CSP-S模拟测试]:斯诺(snow)(数学+前缀和+树状数组)
题目传送门(内部题37) 输入格式 第一行一个整数$n$,表示区间的长度. 第二行一个长度为$n$的只包含$0,1,2$的字符串,表示给出的序列. 输出格式 一行一个整数,表示革命的区间的数量. 样例 ...
- [NOIP模拟测试30]题解
A.Return 出题人大概是怕自己的中文十级没人知道,所以写了这么一个***题面.可能又觉得这题太水怕全场A掉后自己面子过不去,于是又故意把输出格式说的含糊不清.(鬼知道"那么输出-1&q ...
- 项目集成swagger,并暴露指定端点给swagger
项目集成swagger 一:思考: 1.swagger解决了我们什么问题? 传统开发中,我们在开发完成一个接口后,为了测试我们的接口,我们通常会编写单元测试,以测试我们的接口的可用性,或者用postm ...
- c# DataTable select 过滤返回新DataTable
Select(); Select("id>='3' and name='3--hello'");//支持and Select("id>='3' or id=' ...
- upc组队赛5 Hunter’s Apprentice 【判断多边形边界曲线顺逆时针】
Hunter's Apprentice 题目描述 When you were five years old, you watched in horror as a spiked devil murde ...
- Example of dynamic programmatic description
- Suppose there are some itineraries in the Itinerary page, and you want to check on all of them. Se ...
- mysql 内连接和外连接查询
一.内连接查询 (笛卡儿积) 内联接查询inner join,mysql可以简写为join 二.外连接查询 左外联接查询left outer join,mysql可以简写为left join右外联接查 ...
- 实用maven笔记二-信息&依赖管理
目前我经历的公司的主要项目管理工具都是maven,maven除了是一个实用的构建工具外,也是一个功能强大的项目管理工具.其管理功能分为信息管理和依赖管理.通过pom.xml文件实现. 信息管理 信息管 ...