【文章內(nèi)容簡介】
l 動作命令(Action mand)啟動菜單按鈕執(zhí)行的一組指令;l 選項命令(Option mand)基于界面元素的狀態(tài)執(zhí)行的一組指令。該命令由菜單篩選按鈕和菜單單選按鈕組啟動。本設(shè)計要求所設(shè)計的菜單風(fēng)格與Pro/ENGINEER一致,即將菜單添加到Pro/ENGINEER的菜單欄,在其下拉菜單項菜單中要求有各種類型的彈簧,每種類型彈簧的下級子菜單中包含其相應(yīng)的彈簧類型,如圓柱螺旋彈簧包括圓截面圓柱螺旋壓縮彈簧、圓柱螺旋拉伸彈簧等。 編寫菜單信息資源文件信息資源文件用于提供菜單的標(biāo)簽文本(包括其他語言版本的標(biāo)簽)和幫助信息,如果要向Pro/ENGINEER中添加菜單,就必須使用信息資源文本,否則所添加的菜單不會在Pro/ENGINEER菜單欄中出現(xiàn)。信息資源文件是一種ASCII碼文件,用來定義菜單項、菜單項提示等信息,可以用記事本和寫字板等文字處理軟件建立,也可在VC的集成開發(fā)環(huán)境中建立,但必須與純文本格式保存。在信息文件中以4行為一組,其含義為:第1行:Pro/ENGINEER系統(tǒng)可以識別的關(guān)鍵字。該關(guān)鍵字必須與使用該信息文件函數(shù)中的相關(guān)字符串相同。第2行:在菜單項或菜單項提示上顯示的英語文本。第3行:另一種語言的譯文或為空。這里為中文。第4行:當(dāng)前的Pro/ENGINEER版本為空,“”號。按第2行或第3行的語言取決于系統(tǒng)環(huán)境變量lang的設(shè)置。本設(shè)計中將向Pro/ENGINEER界面的頂部菜單欄中添加一個名為“彈簧”的Menu bar類型的菜單,下屬兩個菜單項:圓柱螺旋彈簧和非圓柱螺旋彈簧。名為“圓柱螺旋彈簧”的下級子菜單又包含了:圓截面壓縮彈簧、矩形截面壓縮彈簧、圓柱螺旋拉伸彈簧三個菜單項。名為“非圓柱螺旋彈簧”的下級子菜單包含了:截錐螺旋彈簧、等節(jié)距中凹形螺旋彈簧、等節(jié)距中凸形螺旋彈簧、方形螺旋彈簧四個菜單項。最終結(jié)果如圖42(a)、42 (b)所示。圖42(a) “圓柱螺旋彈簧”菜單圖42(b) “非圓柱螺旋彈簧”菜單圖42所示菜單的資源文件如下:UserMenuUseramp。Menu彈簧(amp。E)SubMenu1SubMenu1圓柱螺旋彈簧SubMenu2SubMenu2非圓柱螺旋彈簧PushButton1PushButton1圓截面壓縮彈簧Adding a push button to the ProE menu barAdding a push button to the ProE menu bar圓截面壓縮彈簧PushButton2PushButton2矩形截面壓縮彈簧Adding another push button to the ProE menu barAdding another push button to the ProE menu bar矩形截面壓縮彈簧PushButton3PushButton3圓柱螺旋拉伸彈簧Adding the third push button to the ProE menu barAdding the third push button to the ProE menu bar圓柱螺旋拉伸彈簧PushButton4PushButton4截錐螺旋彈簧Adding the forth push button to the ProE menu barAdding the forth push button to the ProE menu bar截錐螺旋彈簧PushButton5PushButton5等節(jié)距中凹形螺旋彈簧Adding the fifth push button to the ProE menu barAdding the fifth push button to the ProE menu bar等節(jié)距中凹形螺旋彈簧PushButton6PushButton6等節(jié)距中凸形螺旋彈簧Adding the sixth push button to the ProE menu barAdding the sixth push button to the ProE menu bar等節(jié)距中凸形螺旋彈簧PushButton7PushButton7方形螺旋彈簧Adding the seven push button to the ProE menu barAdding the seven push button to the ProE menu bar方形螺旋彈簧在記事本編輯完以上資源后,保存為純文本格式(.txt),并且命名為Message。\Release\text\chinese_目錄下。 編寫菜單操作源程序編寫完菜單信息資源文本后,還須使用Pro/TOOLKIT提供的菜單操作函數(shù)來實現(xiàn)每個菜單的功能,即編寫菜單項菜單的動作函數(shù)。具體設(shè)計步驟如下:(1) 進(jìn)入Visual C++,選擇“File/New...”選項,啟動 “New”對話框。在“New”對話框中選擇“Projects”選項卡,選擇MFC AppWizard(dll)項。在“Project name:”輸入工程文件名“Text”,在“Location”輸入框中輸入路徑。單擊OK按鈕。(2) 在“MFC AppWizard”對話框中選擇“Regular DLL using shared MFC DLL”單選框,使Pro/TOOLKIT應(yīng)用程序使用共享的MFC。單擊Finish按鈕,進(jìn)入New Project Information窗口后,單擊OK按鈕,完成工程文件框架的建立。(3) 選擇FileView,打開VC應(yīng)用程序向?qū)ё詣由沙绦蛭募?。、def模塊定義文件以及rc資源文件等。在VC環(huán)境下編寫完程序后,需要對其進(jìn)行編譯和連接,包括文件路徑的設(shè)置、庫文件路徑設(shè)置、庫文件的連接等。Pro/TOOLKIT頭文件位于protoolkit\includes文件夾中。在Visual C++,在彈出的“Option”對話框中選擇“Directorise”選項卡,在“Show directories for:”下拉列表框中選擇“Includes”,加入“...\PROTOOLKIT\INCLUDES”一項,設(shè)置Pro/TOOLKIT頭文件所在文件夾,如圖43所示。圖43 包含文件路徑設(shè)置在“Show Directorise for:”下拉列表中選擇“Library files”,加入“...\PROTOOLKIT\I486_NT\OBJ”一項,設(shè)置如圖44。圖44 庫文件路徑設(shè)置選擇Project/Settings...菜單,選擇“Link”選項卡,在“Category:”下拉列表中選擇General,在“Object/Library modules” ,并且去掉“Generate debug into”和“Link incrementaily”兩個選項。具體設(shè)置如圖45。圖45 庫文件設(shè)置在菜單Project/Settings的“Link”選項頁中選擇Category下拉列表中的“Customize”設(shè)置強(qiáng)制文件輸出,即選中“Force file output”的復(fù)選框,如圖46所示。 external symbol連接錯誤均可忽略,并可生成在Pro/ENGINEER系統(tǒng)正常運行的Pro/TOOLKIT應(yīng)用程序。,警告有19個。在“Project Settings”中的“C/C++”選項頁中選擇“Generate browse info”復(fù)選框,并且在“Debug info:”下拉列表中選擇“None”,具體設(shè)置如圖47。圖46 強(qiáng)制輸出設(shè)置圖47 語言設(shè)置在“Project Settings”中選擇General選項,將“Output directories”輸出目錄改為“Release”,這樣VC創(chuàng)建的DLL文件將存放入“Release”文件夾中,設(shè)置如圖48所示。圖48 輸出路徑設(shè)置對Visual C++,便可以編寫程序了。圖42菜單對應(yīng)源程序代碼見附錄Ⅲ菜單操作源程序部分。首先,必須列出VC程序?qū)⒂玫降南嚓P(guān)頭文件,如includeincludeincludeinclude 其次,必須對用到的函數(shù)進(jìn)行聲明,否則將會出錯,如int Spring1Fn()。int Spring2Fn()。int Spring3Fn()。int Spring4Fn()。int Spring5Fn()。int Spring6Fn()。int Spring7Fn()。static uiCmdAccessState AccessAvailable (uiCmdAccessMode)。最后才編寫程序主體部分。下面介紹說明菜單程序中用到的Pro/TOOLKIT函數(shù)。user_initializ()函數(shù)是Pro/TOOLKIT應(yīng)用程序的初始化函數(shù),主要用來對同步模式的Pro/TOOLKIT應(yīng)用程序進(jìn)行初始化,任何同步模式的應(yīng)用程序要在Pro/ENGINEER系統(tǒng)中加載都必須包含該函數(shù)。其格式如上程序所示。user_terminate()函數(shù)在Pro/ENGINEER終止同步模式的Pro/TOOLKIT應(yīng)用程序時調(diào)用(如退出Pro/ENGINEER將終止應(yīng)用程序的運行),該函數(shù)由用戶定義,其中可以不執(zhí)行任何動作。ProMenubarMenuAdd()函數(shù)的作用是向Pro/ENGINEER添加所需的菜單,包含頭文件為:include。函數(shù)的返回值類型為ProError,調(diào)用成功返回PRO_TK_NO_ERROR(0),否則返回PRO_TK_GENERAL_ERROR(1)。函數(shù)如下:ProMenubarMenuAdd (UserMenuBar, UserMenu, Utilities, PRO_B_TRUE, MsgFile)其中UserMenuBar為菜單項名,作為調(diào)用其他菜單函數(shù)的輸入?yún)?shù);UserMenu為菜單標(biāo)簽名,即該菜單條的關(guān)鍵字。必須與信息文件該 段的標(biāo)識關(guān)鍵字相同。Utilities, PRO_B_TRUE表示該菜單加在“工 具”菜單的右側(cè)。MsgFile為菜單信息文件名,這里定為Message。ProMenubarmenuMenuAdd()函數(shù)的作用是向菜單添加下級子菜單。注意,在生成的下級子菜單中必須至少包含一項菜單項,否則將不顯示下級子菜單。該函數(shù)可以創(chuàng)建多層下級子菜單,只需用不同層次的菜單名標(biāo)識作為們菜單名即可。其函數(shù)如下:ProMenubarmenuMenuAdd(UserMenuBar, SubMenu1, SubMenu1, NULL, PRO_B_TRUE, MsgFile)UserMenuBar表示這個下級菜單是掛接在此菜單項名下。SubMenu1為菜單標(biāo)簽名,必須與信息文件中對應(yīng)標(biāo)識關(guān)鍵字相同。ProCmdActionAdd()函數(shù)的作用是設(shè)置菜單按鈕的動作函數(shù)。其函數(shù)如下:ProCmdActionAdd(PushButtonAct1,(uiCmdCmdActFn)Spring1Fn, uiCmdPrioDefault,AccessAvailable, PRO_B_TRUE,PRO_B_TRUE,amp。PushButton_cmd_id1)Spring1Fn為該按鈕的動作函數(shù),即當(dāng)單擊此按鈕,便調(diào)用此函數(shù),產(chǎn)生相應(yīng)動作。ProMenubarmenuPushbuttonAdd()函數(shù)的作用是添加菜單按鈕。其函數(shù)如下:ProMenubarmenuPushbuttonAdd(SubMenu1,PushButton1,PushButton1, Adding a push button to the ProE menu bar, NULL, PRO_B_TRUE, PushButton_cmd_id1, MsgFile)SubMenu1表示此菜單是菜單名為“SubMenu1”的下級子菜單,PushButton1是菜單標(biāo)簽名,與信息文件中對應(yīng)一致。Adding a push button to the ProE menu bar是提示信息,必須與信息文件中一致。程序中用到了菜單條、菜單條菜單、下級子菜單、菜單按鈕等。將上面編輯的資源信息文件放入“Text\Release\text\chinese_”文件夾內(nèi)。 注冊運行編寫調(diào)試完應(yīng)用程序后,將整個VC工程文件拷貝到工作目錄下,用記事本編寫注冊文件,并保存為“”。注冊文件內(nèi)容如圖49所示。圖49 注冊文件這里的“.\”代表相對路徑方式,即起始目錄為Pro/ENGINEER的工作目錄。用相對路徑方式的優(yōu)點在于具有可移植性。即此二次開發(fā)程序只要存放在Pro/ENGINEER設(shè)置的工作目錄下,便能自動運行,而不要求用戶更改設(shè)置,大大地方便了用戶的使用。圖49中各字段及其意義如表41所示。表41 注冊表字段及意義字段名意義Name外部程序標(biāo)識名,該標(biāo)識名不一定要與可執(zhí)行程序名相同Exec_file可執(zhí)行程序名(包括路徑)Text_dir指定外部程序的text目錄樹的全路徑Startup這里取dll(動態(tài)連接庫)Allow_stop如設(shè)為TRUE,在Pro/ENGINEER工作時可以終止應(yīng)用程序,如設(shè)為FALSE則不能終止應(yīng)用程序Delay_start若設(shè)為TRUE, Pro/ENGINEER在啟動時不調(diào)用P