版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第3章 對話框與控件,內(nèi)容摘要: 1.使用對話框與控件 2.模態(tài)對話框 3.非模態(tài)對話框 4.進度條對話框 5.屬性頁對話框6.使用通用對話框,返回目錄,3.1 使用對話框與控件,3.1,程序的實現(xiàn)步驟利用AppWizard生成多文檔程序(Dialog )編輯口令對話框資源 添加控件關(guān)聯(lián)變量 添加代碼,返回第3章,步驟1 生成程序框架(Dialog ),項目名稱: Dialog 選擇多文檔界面應(yīng)用程序(
2、Multiple document),3.1,步驟2 編輯口令對話框資源,添加控件:IDC_STATIC Static Text Caption:請輸入口令I(lǐng)DC_STATIC Static Text Caption:口令為一個0 - 9999之間的整數(shù) Client edge、Static edge和Modal frame選中IDC_PASSWORD_EDIT
3、 Edit Box Password :選中IDOK Button Caption:確定IDCANCEL Button Caption:取消,3.1,ID: IDD_PASSWORD_DIALOG Caption: “口令”Class: CPasswordDialog,步驟3 添加控件關(guān)聯(lián)變量,3.1,IDC_PASSWORD_EDIT int m_Pass
4、word Minimum Value : 0Maximum Value : 9999,步驟4 顯示對話框,在文件Dialog.cpp的頭部,加入下面的包含語句 #include “PasswordDialog.h”,步驟4 顯示對話框,3.1,BOOL CDialogApp::InitInstance(){…… CPasswordDialog cDlg; //聲明CPas
5、swordDialog類的一個對象 if( cDlg.DoModal() == IDOK ) //用戶按了確定按鈕 {if( cDlg.m_Password != 1925 ) //口令為整數(shù)1925{ //如果口令不對,則顯示出錯信息,然后程序結(jié)束AfxMessageBox("口令錯誤,確定后將退出程序。");return F
6、ALSE;}}else //如果按下取消按鈕,程序也結(jié)束 return FALSE;return TRUE;},3.2 模態(tài)對話框,3.2,概念 模態(tài)對話框彈出后,獨占了系統(tǒng)資源,只有在關(guān)閉該對話框后才可能繼續(xù)執(zhí)行程序的其他代碼,不能夠在關(guān)閉對話框之前執(zhí)行應(yīng)用程序其他部分的代碼。模態(tài)對話框一般要求用戶做出某種選擇,如前面例程中的口令對話框
7、將一直出現(xiàn)并等待用戶輸入口令 。,返回第3章,程序的實現(xiàn)步驟,3.2,在上一節(jié)程序的基礎(chǔ)上添加菜單資源和菜單響應(yīng)函數(shù) 編輯對話框資源和創(chuàng)建對話框類 添加消息響應(yīng)函數(shù)和代碼,步驟1 添加菜單資源和菜單響應(yīng)函數(shù),在“查看(V)”菜單中添加以下菜單項 Separator ID_VIEW_MODALDIALOG 模態(tài)對話框(&M)…ID_VIEW_MODALLESSDIALOG 非模態(tài)對
8、話框(&E)…ID_VIEW_PROGRESSDIALOG進度條對話框(&R)…ID_VIEW_PROPERTIES 屬性頁對話框(&P)…ID_VIEW_COMMONDIALOG通用對話框(&C)…,3.2,步驟2 編輯對話框資源,IDC_SEX1 Radio Button Caption: 男
9、 Group:選中IDC_SEX2 Radio Button Caption: 女IDC_INSTEREST1 Check Box Caption: 登山 Group:選中IDC_INSTEREST2 Check Box Caption: 游泳IDC_INSTEREST3
10、 Check Box Caption: 看書IDC_INSTEREST4 Check Box Caption: 玩游戲IDC_COMBO Combo BoxIDC_EDIT Edit Box,3.2,ID: IDD_MODAL_DIALOGCaption: “Modal D
11、ialog”Class: CDialogModal 添加控件:,步驟3 添加控件關(guān)聯(lián)變量,3.2,IDC_COMBO CComboBoxm_Combo; IDC_SEX1 CButtonm_Radio; IDC_EDIT CString m_Edit;,步驟4 顯示對話框,1. 菜單響應(yīng)函數(shù),void CDialogView::OnViewModald
12、ialog() {CDialogModal m_Dlg;m_Dlg.DoModal();},3.2,2. 對話框響應(yīng)函數(shù),BOOL CDialogModal::OnInitDialog() {CDialog::OnInitDialog();// TODO: Add extra initialization herem_Radio.SetCheck(1); //把"男"設(shè)置
13、為默認(rèn)值m_Combo.InsertString(0,"小學(xué)"); //往Combo Box加入選項m_Combo.InsertString(1,"初中");m_Combo.InsertString(2,"高中");m_Combo.InsertString(3,"大學(xué)");m_Combo.InsertString(4,"
14、;本科以上...");m_Combo.SetCurSel(0); //把"小學(xué)"設(shè)置為默認(rèn)值return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE},void CDialogM
15、odal::OnOk() {// TODO: Add your control notification handler code hereCString str;str.Empty();if(m_Radio.GetCheck())str += "先生";elsestr += "小姐";str += "你好,你的愛好:";BOOL fl
16、ag=0;CButton *p;//得到指向IDC_INSTEREST1的指針p = (CButton *)GetDlgItem(IDC_INSTEREST1);if(p->GetCheck()) //判斷"登山"是否被選中{str += "登山 ";flag = 1;}//得到指向IDC_INSTEREST2的指針p = (CButto
17、n *)GetDlgItem(IDC_INSTEREST2);if(p->GetCheck()) //判斷"游泳"是否被選中{str += "游泳 ";flag = 1;}//得到指向IDC_INSTEREST3的指針p = (CButton *)GetDlgItem(IDC_INSTEREST3);if(p->GetCheck(
18、)) //判斷"看書"是否被選中{str += "看書 ";flag = 1;}//得到指向IDC_INSTEREST4的指針p = (CButton *)GetDlgItem(IDC_INSTEREST4);if(p->GetCheck()) //判斷"玩游戲"是否被選中{str += "玩游戲
19、";flag = 1;}if (!flag)str += "不知道";str += ",學(xué)歷:";int number;CString temp;number = m_Combo.GetCurSel(); //得到當(dāng)前被選中項的序號m_Combo.GetLBText(number,temp); //得到序號為number的項的內(nèi)
20、容str += temp;m_Edit = str;UpdateData(false); //更新文本框中的內(nèi)容},3.2,3.3 非模態(tài)對話框,3.3,概念 非模態(tài)對話框彈出后,程序可以在不關(guān)閉該對話框的情況下繼續(xù)執(zhí)行,在轉(zhuǎn)入到應(yīng)用程序其他部分的代碼時可以不需要用戶做出響應(yīng)。非模態(tài)對話框一般用來顯示信息,或者實時地進行一些設(shè)置。,返回第3章,程序的實現(xiàn)步驟,3.2,在上
21、一節(jié)程序的基礎(chǔ)上編輯對話框資源和創(chuàng)建對話框類 顯示非模態(tài)對話框 實現(xiàn)對話框的功能,步驟1 編輯對話框資源,3.3,ID: IDD_MODALLESS_DIALOG Caption: “Modalless Dialog”Class: CDialogModalless 添加控件:,步驟2 顯示非模態(tài)對話框,3.3,1.在視類中添加對話框成員指針 ,并包含對話框頭文件public:CDialogModalles
22、s* m_pModallessDlg;并包含對話框頭文件#include“DialogModalless.h”2.添加消息響應(yīng)函數(shù),3.3,void CDialogView::OnViewModallessdialog() {// TODO: Add your command handler code here//如果指針指向NULL,說明對話框還沒有創(chuàng)建,則動態(tài)創(chuàng)建if(m_pModallessDlg==NULL
23、){m_pModallessDlg=new CDialogModalless;m_pModallessDlg->Create(IDD_MODALLESS_DIALOG,this);}//顯示非模態(tài)對話框m_pModallessDlg->ShowWindow(SW_SHOW);},3.3,CDialogView::CDialogView(){// TODO: add construction
24、 code herem_pModallessDlg = NULL; //初始化指針} CDialogView::~CDialogView(){if(m_pModallessDlg != NULL){delete m_pModallessDlg; //釋放空間}},3.修改視類的構(gòu)造函數(shù)和析構(gòu)函數(shù),步驟3 實現(xiàn)對話框的功能,3.3,1.添加控件關(guān)聯(lián)變量控件
25、 變量類型 變量名IDC_LIST CListCtrl m_ListIDC_Tree CTeeCtrl m_Tree,2. 添加消息響應(yīng)函數(shù),BOOL CDialogModalless::OnInitDialog() {CDialog::OnInitDialog();// TODO: Add extra initialization here
26、//往List控件中插入一列m_List.InsertColumn(0, "文件名", LVCFMT_LEFT, 150, -1);TV_INSERTSTRUCTTreeItem;HTREEITEMhTreeItem;TreeItem.hInsertAfter = TVI_LAST;TreeItem.item.mask = TVIF_TEXT|TVIF_PARAM;//第一級C
27、String str = "D:\\";TreeItem.hParent = TVI_ROOT; //父級為根部TreeItem.item.pszText = str.GetBuffer(50); //設(shè)置字符緩沖區(qū)的大小并賦值TreeItem.item.lParam = 1; //對于根目錄,設(shè)置為1hTreeItem = m_Tree.InsertItem(&Tree
28、Item); //插入Tree控件中int number = 0; //計算文件的個數(shù)CFileFind file;BOOL bfind;CString temp;//第二級TreeItem.hParent = hTreeItem;TreeItem.item.lParam = 10;//對于子目錄,設(shè)置為10bfind = file.FindFile(&
29、quot;D:\\*.*"); //查找D:盤根目錄下的所有文件和目錄while(bfind)//如果找到{bfind = file.FindNextFile(); //查找下一個if(file.IsDirectory()) //判斷是否為目錄{//得到目錄名并拷貝字符串strcpy(TreeItem.item.pszText,file.GetFileName());h
30、TreeItem = m_Tree.InsertItem(&TreeItem); //插入Tree控件}else{//如不是目錄,插入List控件str = file.GetFileName(); //得到文件名m_List.InsertItem(number,str); //把文件名插入第number行number++;}}return TRUE; // r
31、eturn TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE},3.3,void CDialogModalless::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) {NM_TREEVIEW* pNMTree
32、View = (NM_TREEVIEW*)pNMHDR;// TODO: Add your control notification handler code hereCString temp,str;//獲取當(dāng)前被選擇的tree view項HTREEITEM CurItem = m_Tree.GetSelectedItem();TV_ITEM TreeItem;TreeItem.hItem = CurItem;
33、m_Tree.GetItem(&TreeItem); //獲取指定tree view項的屬性//獲得當(dāng)前選中項的文本temp = m_Tree.GetItemText(m_Tree.GetSelectedItem());long CurlParam = TreeItem.lParam; //當(dāng)前條目的序號if(CurlParam != 1) //如果是子目錄{//獲取當(dāng)前被選擇項的父項
34、TreeItem.hItem = m_Tree.GetParentItem(m_Tree.GetSelectedItem());m_Tree.GetItem(&TreeItem);CurItem = TreeItem.hItem;//獲得當(dāng)前選中項的文本str = m_Tree.GetItemText(CurItem);str += temp;str += "\\";}
35、elsestr = temp;m_List.DeleteAllItems(); //刪除控件中的所有項CFileFindfile;BOOLbFind;intnumber = 0;str += "*.*";bFind = file.FindFile(str); //在str目錄下查找while(bFind) //如果找到{bFind = file.Fi
36、ndNextFile();if(!file.IsDirectory()) //判斷是否為目錄{//如不是目錄,插入List控件temp = file.GetFileName(); //得到文件名m_List.InsertItem(number,temp); //把文件名插入第number行number++;}}UpdateData(false); //更新控件中的值*
37、pResult = 0;},3.3,3.4 進度條對話框,3.4,程序的實現(xiàn)步驟在上一節(jié)程序的基礎(chǔ)上編輯對話框資源和創(chuàng)建對話框類 顯示進度條對話框 實現(xiàn)對話框的功能,返回第3章,步驟1 編輯對話框資源,3.4,ID: IDD_PROGRESS_DIALOGCaption: “Progress Dialog”Class: CDialogProgress 添加控件:,步驟2 顯示進度條對話框,3.4,1.在視類
38、中包含對話框頭文件#include "DialogProgress.h"2.添加消息響應(yīng)函數(shù),void CDialogView::OnViewProgressdialog() {// TODO: Add your command handler code hereCDialogProgress dlg;dlg.DoModal();},步驟3 實現(xiàn)對話框的功能,3.4,1.添加控件關(guān)聯(lián)變量控
39、件 變量類型 變量名IDC_PERCENT_SPIN CSpinButtonCtrl m_SpinIDC_PROGRESS CProgressCtrl m_ProgreesIDC_TIME_SLIDER CSliderCtrl m_Time,2. 添加消息響應(yīng)
40、函數(shù),BOOL CDialogProgress::OnInitDialog() {CDialog::OnInitDialog();// TODO: Add extra initialization herem_Spin.SetRange(1,50); //給Spin控件設(shè)置數(shù)值范圍//把文本框的初始值設(shè)為1GetDlgItem(IDC_EDIT)->SetWindowText("1&qu
41、ot;);m_Time.SetRange( 0, 10 ); //設(shè)置滑動的數(shù)值范圍m_Time.SetPos( 1 ); //設(shè)滑動控件的初始值設(shè)為1m_Progress.SetRange( 0, 100 ); //設(shè)進度條的數(shù)值范圍return TRUE; // return TRUE unless you set the focus to a con
42、trol // EXCEPTION: OCX Property Pages should return FALSE},3.4,void CDialogProgress::OnProgressButton() {// TODO: Add your control notification handler code hereCString temp;GetDlgItem(IDC_EDIT)-&g
43、t;GetWindowText(temp); //得到文本框中的內(nèi)容int percent = atoi(temp); if( (percent 50) ) //判斷文本框中的內(nèi)容是否在設(shè)定的范圍之內(nèi){MessageBox("輸入的數(shù)據(jù)超出范圍!","Waring",MB_ICONWARNING|MB_OK);GetDlgItem(IDC_EDIT)->
44、;SetFocus(); //把焦點設(shè)在文本框上return; //中斷程序的運行,返回}int nPercent, nTime, nCurPos = 0;nPercent = m_Spin.GetPos(); //得到Spin控件的值nTime = m_Time.GetPos(); //得到滑動條上當(dāng)前的值m_Progress.SetPos( 0 ); //設(shè)置進度條當(dāng)前的位置為0
45、while( (nCurPos+=nPercent) < 100 ){m_Progress.OffsetPos( nPercent ); //在進度條上偏移nPercent位置Sleep( 1000 * nTime / 10 ); //延遲一定的時間間隔}m_Progress.SetPos( 100 ); //設(shè)置進度條當(dāng)前的位置為100},3.4,3.5 屬性頁對話框,3.5,概念
46、 屬性頁對話框?qū)⒍鄠€對話框集中起來,通過標(biāo)簽或按鈕來激活各個頁面。主要分為一般屬性頁對話框和向?qū)υ捒騼深?。在一般屬性頁對話框中,頁面的切換通過點擊不同的標(biāo)簽實現(xiàn),在向?qū)υ捒蛑校撁娴倪x擇是通過點擊“上一頁”(Back)、“下一頁”(Next)、“完成”(Finish)和“取消”(Cance)等按鈕實現(xiàn)的。,返回第3章,程序的實現(xiàn)步驟,3.5,在上一節(jié)程序的基礎(chǔ)上編輯對話框資源和創(chuàng)建對話框類 顯示屬性頁對話框 實現(xiàn)對話
47、框的功能,步驟1 編輯對話框資源,3.5,ID: IDD_TAB_DIALOG Caption: “Tab Dialog”Class: CDialogTab 添加控件:,步驟2 顯示屬性頁對話框,3.5,1.在視類中包含對話框頭文件#include "DialogTab.h"2.添加消息響應(yīng)函數(shù),void CDialogView::OnViewTab() {// TODO: Add your
48、 command handler code hereCDialogTab dlg;dlg.DoModal();},步驟3 實現(xiàn)對話框的功能,3.5,1.添加控件關(guān)聯(lián)變量控件 變量類型 變量名IDC_SCROLLBAR CScrollBar m_ScrollBar IDC_TAB
49、 CTabCtrl m_Tab,2. 添加消息響應(yīng)函數(shù),BOOL CDialogTab::OnInitDialog() {CDialog::OnInitDialog();// TODO: Add extra initialization here //對Tab控件進行初始化TC_ITEM *m_pTCItem; m_pTCItem = new T
50、C_ITEM;m_pTCItem->mask = TCIF_TEXT; //接收的值為文本m_pTCItem->pszText = "學(xué)生守則"; //標(biāo)簽的名字m_Tab.InsertItem(0,m_pTCItem); //插入一個新的標(biāo)簽m_pTCItem->pszText = "市民公約";m_Tab.InsertItem(1,m_pT
51、CItem);//顯示IDC_STATIC1、IDC_SCROLLBAR兩個控件GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW);GetDlgItem(IDC_SCROLLBAR)->ShowWindow(SW_SHOW);//隱藏IDC_STATIC2控件GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE);//對滾動
52、條進行初始化m_ScrollBar.SetScrollRange(1,10); //設(shè)置滾動條的范圍m_ScrollBar.SetScrollPos(1); //設(shè)置當(dāng)前滾動條的位置return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages sho
53、uld return FALSE},3.5,void CDialogTab::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) {// TODO: Add your control notification handler code here//當(dāng)前Tab控件所選中的標(biāo)簽if( m_Tab.GetCurSel() == 0 ){//顯示IDC_STATIC1、IDC
54、_SCROLLBAR兩個控件GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW);GetDlgItem(IDC_SCROLLBAR)->ShowWindow(SW_SHOW);//隱藏IDC_STATIC2控件GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE);}else{//隱藏IDC_STATIC1、
55、IDC_SCROLLBAR兩個控件GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE);GetDlgItem(IDC_SCROLLBAR)->ShowWindow(SW_HIDE);//顯示IDC_STATIC2控件GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW);}*pResult = 0;},3.5,voi
56、d CDialogTab::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) {// TODO: Add your message handler code here and/or call default//對滾動條進行重新定位switch(nSBCode){case SB_THUMBPOSITION: //滾動的絕對位置{pS
57、crollBar->SetScrollPos(nPos); //設(shè)置滾動條的位置break;}case SB_LINEUP: //單擊滾動條的上箭頭{//把滾動條設(shè)置為當(dāng)前位置減1的位置pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() - 1);break;}case SB_LINEDOWN: /
58、/單擊滾動條的下箭頭{//把滾動條設(shè)置為當(dāng)前位置加1的位置pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() + 1);break;}case SB_PAGEUP: //單擊滾動條當(dāng)前位置的上面{//把滾動條設(shè)置為當(dāng)前位置減5的位置pScrollBar->SetScrollPos(pScrollBar
59、->GetScrollPos() - 5);break;}case SB_PAGEDOWN: //單擊滾動條當(dāng)前位置的下面{//把滾動條設(shè)置為當(dāng)前位置加5的位置pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() + 5);break;}}CDialog::OnVScroll(nSBCode, nPos,
60、 pScrollBar);},3.5,3.6 使用通用對話框,3.6,概念 在MFC中,提供了一些通用對話框類來實現(xiàn)Windows系統(tǒng)提供的通用對話框,包括文件對話框、顏色對話框、字體對話框、打印對話框和查找與替換對話框等,這些通用對話框類都是從CCommonDialog類派生出來的。對于每個通用對話框,都可以實現(xiàn)相應(yīng)的特定功能。,返回第3章,程序的實現(xiàn)步驟,3.6,在上一節(jié)程序的基礎(chǔ)上編輯對話框資源和創(chuàng)建對話框類
61、 顯示對話框 實現(xiàn)對話框的功能,步驟1 編輯對話框資源,3.6,ID: IDD_COMMON_DIALOG Caption: “Common Dialog”Class: CDialogCommon 添加控件:,步驟2 顯示對話框,3.6,1.在視類中包含對話框頭文件#include "DialogCommon.h"2.添加消息響應(yīng)函數(shù),void CDialogView::OnViewCommo
62、ndialog() {// TODO: Add your command handler code hereCDialogCommon dlg;dlg.DoModal();},步驟3 實現(xiàn)對話框的功能,3.6,void CDialogCommon::OnOpenButton() {// TODO: Add your control notification handler code here//聲明一個C
63、FileDialog對象,并設(shè)置他的格式CFileDialog cdlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"text file(*.txt)|*.txt|All file(*.*)|*.*||", this);if(cdlg.DoModal() == IDOK) //單擊OK按鈕{//從文件
64、對話框中取得文件名并顯示在文本框中GetDlgItem(IDC_EDIT)->SetWindowText(cdlg.GetPathName());UpdateData(false); //更新}},void CDialogCommon::OnQuit() {// TODO: Add your control notification handler code hereOnOK();},3.6,返回
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++基礎(chǔ)實例教程
- visual_c++_6.0調(diào)試功能_圖解教程(3)--實例
- vb6.0圖文實例教程
- visual_c++_6.0調(diào)試功能_圖解教程(4)--實例
- visual_c++_6.0調(diào)試功能_圖解教程(2)--實例
- 中文illustrator基礎(chǔ)與實例教程電子教案
- visual studio 2012 c++ 指導(dǎo)教程
- visual c++ mfc 簡明教程
- 《dreamweaver 8基礎(chǔ)與實例教程》第12章
- 局域網(wǎng)組建與維護實例教程第5章-
- visual_c++_6.0調(diào)試功能_圖解教程(1)--快速
- tekla實例教程
- ida實例教程
- pyrosim實例教程
- 第1章 visual foxpr6.0基礎(chǔ)
- photoshop實例教程(ps教程實例)給長
- ug鈑金件實例教程
- photoshop實例教程照片漫畫插畫效果的制作-photoshop實例教程
- word基礎(chǔ)實例教程
- matlab 簡明實例教程
評論
0/150
提交評論