九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
UG NX二次開發(fā)之使用MFC創(chuàng)建dll程序

    NX自帶的UI控件也有不少,但是有很多功能受限,但是在Windows用用程序中的控件確有很多,而且功能強(qiáng)大,但是也有一個(gè)缺點(diǎn),就是界面風(fēng)格與NX的不一樣,有種另類的感覺。本文介紹一下用MFC來做NX的二次開發(fā)。

我開發(fā)時(shí)的配置如下:

VS2010+NX8.5

下面說一下大概的過程:

1、VS2010中新建項(xiàng)目,選擇MFC DLL,輸入名稱nx_mfc01,選擇項(xiàng)目位置,如下圖

在下一步中選擇“應(yīng)用程序設(shè)置”,把DLL類型設(shè)置為“帶靜態(tài)鏈接的MFC的規(guī)則DLL(R)”,然后點(diǎn)【完成】

如下圖

VS自動(dòng)使用模板生成若干個(gè)文件,如下圖

目前生成的這些文件只是一框架,什么也沒做,連個(gè)對話框也沒有。下面就新建一個(gè)對話框。

VS菜單中選擇【視圖】【資源視圖】,在資源視圖中點(diǎn)開nx_mfc01可以看到項(xiàng)目中的資源只有一個(gè)VS_VERSION_INFO,在這個(gè)文件里面可以修改生成的dll程序的屬性,這里可以設(shè)置也可以不設(shè)置,如果對程序的管理比圖正規(guī),這里就要修改一下啦。本次介紹就隨便修改一下,如下圖

在資源視圖中右擊nx_mfc01,選擇【添加】【資源】,也可以直接在菜單中添加

在彈出的對話框中選擇Dialog,添加其它的東西也可以,然后選擇“新建”按鈕

然后VS自動(dòng)切換到一個(gè)對話框而已界面,在這個(gè)界面上可以自己設(shè)計(jì)想要的對話框樣式。如下圖

本次在界面上布局如下

做到這里后,項(xiàng)目里面只是有了一個(gè)對話框資源,還沒有處理對話框的程序。下面給對話框添加一個(gè)類來做交互。

在對話框主界面上右擊,選擇【添加類】,在彈出的對話框中輸入類名為mfcDlg”,其它默認(rèn)就可以了,如下圖

然后再在Listview控制上右擊,選擇【添加變量】,在彈出的對話框中輸入變量名“m_list_var

如下圖

然后雙擊對話框布局上的確定按鈕,VS自動(dòng)切換到這個(gè)按鈕的消息處理函數(shù)上。如下圖

如果對MFC比較熟悉,后面這做法就是按MFC程序設(shè)計(jì)的方法來做。但是到現(xiàn)在為止這個(gè)項(xiàng)目還不能在UG中使用,下面來介紹如何把UG的入口函數(shù)添加進(jìn)來。

先在項(xiàng)目的屬性中添加NX的頭文件路徑和鏈接庫

如下:

C/C++,【常規(guī)】選項(xiàng)中設(shè)置“附加包含目錄”為“$(UGII_BASE_DIR)\ugopen

【鏈接器】,【常規(guī)】選項(xiàng)中設(shè)置“附加庫目錄”為“$(UGII_BASE_DIR)\ugopen

【鏈接器】,【輸入】選項(xiàng)中設(shè)置“附加依賴項(xiàng)”如下

libufun.lib

libnxopencpp.lib

libnxopencpp_annotations.lib

libnxopencpp_assemblies.lib

libnxopencpp_bodydes.lib

libnxopencpp_cae.lib

libnxopencpp_cam.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_mechatronics.lib

libnxopencpp_modldirect.lib

libnxopencpp_motion.lib

libnxopencpp_optimization.lib

libnxopencpp_options.lib

libnxopencpp_pdm.lib

libnxopencpp_physmat.lib

libnxopencpp_positioning.lib

libnxopencpp_preferences.lib

libnxopencpp_routing.lib

libnxopencpp_shapesearch.lib

libnxopencpp_sheetmetal.lib

libnxopencpp_sim.lib

libnxopencpp_tooling.lib

libnxopencpp_userdefinedobjects.lib

libnxopencpp_validate.lib

libnxopencpp_visualreporting.lib

libnxopencpp_weld.lib

libugopenint.lib

libnxopenuicpp.lib

然后在項(xiàng)目源文件下新建一個(gè)nxInterface.cpp文件。在這個(gè)源文件中寫入調(diào)用對話框的代碼

#include 'stdafx.h'#include <uf.h>#include <uf_ui.h>#include <uf_exit.h>#include 'mfcDlg.h'#include 'resource.h'

#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))
static int report_error( char *file, int line, char *call, int irc){ if (irc) { char err[133], msg[133];
sprintf(msg, '*** ERROR code %d at line %d in %s:\n+++ ', irc, line, file); UF_get_fail_message(irc, err);
UF_print_syslog(msg, FALSE); UF_print_syslog(err, FALSE); UF_print_syslog('\n', FALSE); UF_print_syslog(call, FALSE); UF_print_syslog(';\n', FALSE);
if (!UF_UI_open_listing_window()) { UF_UI_write_listing_window(msg); UF_UI_write_listing_window(err); UF_UI_write_listing_window('\n'); UF_UI_write_listing_window(call); UF_UI_write_listing_window(';\n'); } }
return(irc);}
mfcDlg *dlg = NULL;
extern DllExport void ufusr( char *parm, int *returnCode, int rlen ){ AFX_MANAGE_STATE(AfxGetStaticModuleState()); /* Initialize the API environment */ if( UF_CALL(UF_initialize()) ) { /* Failed to initialize */ return; } /* TODO: Add your application code here */ if(dlg == NULL) { dlg = new mfcDlg; dlg->Create(IDD_DIALOG1); } if(dlg) { dlg->ShowWindow(SW_NORMAL); } /* Terminate the API environment */ UF_CALL(UF_terminate());}
extern int ufusr_ask_unload( void ){ //return( UF_UNLOAD_IMMEDIATELY ); return (UF_UNLOAD_UG_TERMINATE);}
extern void ufusr_cleanup (void){ //釋放申請的內(nèi)存 if (dlg) { delete dlg; dlg = NULL; } return;}

代碼說明:

#include 'stdafx.h',一定要放在最前面,不然很可能會(huì)出錯(cuò)

nxInterface.cpp文件中用使用是的非模態(tài)對話框,對于非模太對話框,要把對話框的指針dlg申明為全局變量,而且ufusr_ask_unload()一定要返回UF_UNLOAD_UG_TERMINATE才行,不然加載對話框程序后會(huì)閃退。如果是顯示一個(gè)模態(tài)對話框,就沒有這些限制。

下面為對話框添加一些動(dòng)作,將前面確定按鈕的消息回調(diào)函數(shù)修改為下面

void mfcDlg::OnBnClickedOk(){  // TODO: 在此添加控件通知處理程序代碼  this->m_list_var.InsertColumn(0,_T('列1'),0,100);  this->m_list_var.InsertColumn(1,_T('列2'),0,100);  this->m_list_var.InsertItem(0,_T('行1列1'));  this->m_list_var.SetItemText(0,1,_T('行1列2'));  this->m_list_var.InsertItem(1,_T('行2列1'));  this->m_list_var.SetItemText(1,1,_T('行2列2'));  uc1601('設(shè)置列表視圖',1);  //CDialogEx::OnOK();}

最后編譯運(yùn)行,如下圖

前面修改的屬性版本等信息的結(jié)果如下圖

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
在DLL中使用資源(一)
如何將MFC生成的exe轉(zhuǎn)換為DLL
基于NX軟件下汽車模具智能化制造的開發(fā)與應(yīng)用
UG NX5.0的工程圖尺寸標(biāo)識工具的開發(fā)
MFC 如何自動(dòng)刷新對話框?
Halcon10.0與MFC混合編程(配置)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服