NX二次開發-基於MFC界面對話框與NX交互的開發


打開VS2013

點擊新建,選擇MFC DLL

點擊確定

 

點下一步

 

什么都不改,直接點完成

進來之后先編譯一下,看是否編譯成功

 

打開項目屬性,更改這幾處

 

 1 $(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入口函數和卸載方式

 

 1 extern "C" DllExport void  ufusr(char *param, int *retcod, int param_len)
 2 {
 3 
 4     if (UF_initialize())
 5     {
 6         /* Failed to initialize */
 7         return;
 8     }
 9     // The following method shows the dialog immediately
10     
11 
12 
13     UF_terminate();
14 }
15 
16 extern "C" DllExport int ufusr_ask_unload()
17 {
18     return (UF_UNLOAD_UG_TERMINATE);
19     //return (UF_UNLOAD_IMMEDIATELY);
20     //return UF_UNLOAD_SEL_DIALOG;
21 }

將項目改成64位的

打開配置管理器

 

編譯項目,成功

 

添加對話框,找到資源視圖,右鍵添加資源

 

選擇Dialog,點新建

 

添加類

對話框右鍵-添加類

隨便取名字,CFirstMFCDialog,點完成

 

編譯項目成功

添加對話框初始化虛函數

對話框點右鍵-添加類向導

然后點確定

在編譯項目成功

添加頭文件

 

在去ufusr入口函數里獲取UG窗口句柄,設置對話框。寫的內容固定格式

 

 1     AFX_MANAGE_STATE(AfxGetStaticModuleState());
 2 
 3  
 4 
 5     HWND UGHwnd = (HWND)UF_UI_get_default_parent();//獲取UG窗口句柄
 6 
 7     CWnd *ugwindow = CWnd::FromHandle(UGHwnd);
 8 
 9  
10 
11     CFirstMFCDialog *dlg = new CFirstMFCDialog(ugwindow);
12 
13     if (dlg != NULL)
14 
15     {
16 
17         BOOL ret = dlg->Create(IDD_DIALOG1, ugwindow);
18 
19         dlg->ShowWindow(SW_SHOW);
20 
21         //dlg->SetWindowPos(ugwindow, 300, 220, 200, 200, SWP_NOSIZE);//設置對話框固定位置
22 
23     }

在編譯項目成功

打開UG去調對話框就出來了

提示,因為選擇的卸載方式,需求每次修改代碼重新編譯,都要關閉UG。來卸載掉。

截止到這個MFC+NX二次開發的這個環境搭建就結束了

下面做一個實例。

選擇位置,創建塊。(大概演示,不在詳細寫步驟)

對話框

 

對話框初始化代碼

 1 BOOL CFirstMFCDialog::OnInitDialog()
 2 {
 3     CDialogEx::OnInitDialog();
 4 
 5     // TODO:  在此添加額外的初始化
 6 
 7     //對話框初始值
 8     m_edit1.SetWindowText("100");
 9     m_edit2.SetWindowText("50");
10     m_edit3.SetWindowText("25");
11 
12     return TRUE;  // return TRUE unless you set the focus to a control
13     // 異常:  OCX 屬性頁應返回 FALSE
14 }

點構造器代碼

 1 void CFirstMFCDialog::OnBnClickedButton1()
 2 {
 3     // TODO:  在此添加控件通知處理程序代碼
 4 
 5     UF_initialize();
 6 
 7     UF_UI_lock_ug_access(UF_UI_FROM_CUSTOM);//對話框加鎖
 8 
 9     char sCue[] = "點構造器";
10     UF_UI_POINT_base_method_t base_method = UF_UI_POINT_INFERRED;
11     tag_t tPoint = NULL_TAG;
12     double sBasePoint[3];
13     int iResponse;
14     UF_UI_point_construct(sCue, &base_method, &tPoint, sBasePoint, &iResponse);
15 
16     UF_UI_unlock_ug_access(UF_UI_FROM_CUSTOM);//對話框解鎖
17 
18     UF_terminate();
19 }

點確定的代碼

 1 void CFirstMFCDialog::OnBnClickedOk()
 2 {
 3     // TODO:  在此添加控件通知處理程序代碼
 4     CDialogEx::OnOK();
 5 
 6     UF_initialize();
 7 
 8     //獲取對話框里的輸入值
 9     CString length;
10     m_edit1.GetWindowTextA(length);
11 
12     CString width;
13     m_edit2.GetWindowTextA(width);
14 
15     CString high;
16     m_edit3.GetWindowTextA(high);
17 
18     //轉換
19     //CString轉char*
20     USES_CONVERSION;
21     char* length1 = T2A(length.GetBuffer(0));
22     length.ReleaseBuffer();
23 
24     char* width1 = T2A(width.GetBuffer(0));
25     width.ReleaseBuffer();
26 
27     char* high1 = T2A(high.GetBuffer(0));
28     high.ReleaseBuffer();
29 
30     UF_FEATURE_SIGN sign = UF_NULLSIGN;
31     char * edge_len[3] = { length1, width1, high1 };
32     tag_t blk_obj_id = NULL_TAG;
33     UF_MODL_create_block1(sign, sBasePoint, edge_len, &blk_obj_id);
34 
35     UF_terminate();
36 }

Caesar盧尚宇

2019年7月13日

 

NX二次開發CreateDialog函數在UI.hxx文件和WinUser.h中的沖突【轉載】

https://www.cnblogs.com/nxopen2018/p/11811708.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM