版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第6章框架窗口界面設(shè)計章框架窗口界面設(shè)計 6.16.1框架窗口框架窗口 6.26.2菜單菜單 6.36.3工具欄工具欄 6.46.4狀態(tài)欄狀態(tài)欄 6.56.5交互對象的動態(tài)更新交互對象的動態(tài)更新 6.66.6圖標(biāo)和光標(biāo)圖標(biāo)和光標(biāo) 6.16.1框架窗口框架窗口 6.1.1單文檔和多文檔程序框架窗口單文檔和多文檔程序框架窗口 文檔應(yīng)用程序的文檔應(yīng)用程序的MFC類結(jié)構(gòu)類結(jié)構(gòu) 如圖是單文檔應(yīng)用程序Ex_SDI和多文檔應(yīng)用程序Ex_MDI的MFC類結(jié)構(gòu)。 CAboutDlg是每一個應(yīng)用程序框架都有的,用來顯示本程序的有關(guān)信息。 CEx_SDIApp和CEx_MDIApp是應(yīng)用程序類,是從CWinApp
2、類派生而來,負(fù)責(zé)應(yīng)用程序創(chuàng)建、運(yùn)行和終止,每一個應(yīng)用程序都需要這樣的類。 CEx_SDIDoc和CEx_MDIDoc是文檔類,它們是從CDocument類派生而來,負(fù)責(zé)應(yīng)用程序文檔數(shù)據(jù)管理。 CEx_SDIView和CEx_MDIView是視圖類,它們既可以從基類CView派生,也可以從CView派生類派生,負(fù)責(zé)數(shù)據(jù)的顯示、繪制和其他用戶交互。 CMainFrame類是用來負(fù)責(zé)主框架窗口的顯示和管理,包括工具欄和狀態(tài)欄等界面元素的初始化。對于單文檔應(yīng)用程序來說,主框架窗口類是從CFrameWnd派生而來的,而對于多文檔應(yīng)用程序程序,主框架窗口是從CMDIFrameWnd派生的。 6.16.1框
3、架窗口框架窗口 CChildFrame類是從CMDIChildWnd派生而來,專門用來管理多文檔應(yīng)用程序中的文檔窗口。無論是CMDIChildWnd還是CMDIFrameWnd類,它們都是從CFrameWnd派生而來的。 對于基于對話框的應(yīng)用程序,一般有CAboutDlg類、應(yīng)用程序類和對話框類。 上述MFC類之間的繼承和派生關(guān)系如圖6.2所示。 圖6.2 MFC類的基本層次結(jié)構(gòu)CCmdTargetCWndCDocumentCFrameWndCObjectCWinTreadCWinAppCViewCDialog及控件CMDIChildWndCMDIFrameWndCMiniFrameWnd6.
4、16.1框架窗口框架窗口 項(xiàng)目的文件組織項(xiàng)目的文件組織 項(xiàng)目中源文件都是采用文件夾的方式進(jìn)行管理的,將項(xiàng)目名作為文件夾名,此文件夾下包含源程序代碼文件、項(xiàng)目文件以及項(xiàng)目工作區(qū)文件等。每一個類的源代碼均保存同名的h和cpp文件。其他一些文件類型的含義:.opt 關(guān)于開發(fā)環(huán)境的參數(shù)文件,如工具條位置等信息 .aps(AppStudio File)資源輔助文件,二進(jìn)制格式.clw ClassWizard信息文件.dsp(DeveloperStudio Project)項(xiàng)目文件.plg 編譯信息文件.mdp(Microsoft DevStudio Project)舊版本的項(xiàng)目文件.bsc 用于瀏覽項(xiàng)目
5、信息.map 執(zhí)行文件的映像信息紀(jì)錄文件.pch(Pre-Compiled File)預(yù)編譯文件,可以加快編譯速度,但是文件非常大.pdb(Program Database)記錄程序有關(guān)的一些數(shù)據(jù)和調(diào)試信息.ncb 無編譯瀏覽文件(no compile browser) 還有相應(yīng)的Debug(調(diào)試)、Res(資源)等子文件夾。用應(yīng)用程序向?qū)?chuàng)建項(xiàng)目時,系統(tǒng)自動為項(xiàng)目創(chuàng)建Win32 Debug版本的運(yùn)行程序,并使用相應(yīng)的默認(rèn)配置。程序編連后,用于該項(xiàng)目的可執(zhí)行文件以及其他調(diào)試的信息文件都安放在Debug文件夾中。 程序項(xiàng)目有一個Win32 Release版本,與Release的區(qū)別在于:Debu
6、g版本的運(yùn)行程序有相應(yīng)的調(diào)試信息碼,Release版本的運(yùn)行程序沒有,但Release版本的運(yùn)行程序經(jīng)過代碼的優(yōu)化,其程序的運(yùn)行效率被最大提升。 選擇“編譯”“配置”菜單命令,在“配置”對話框?qū)㈨?xiàng)目設(shè)置成Win32 Release版本。 6.16.1框架窗口框架窗口 主框架窗口和文檔窗口主框架窗口和文檔窗口 主框架窗口是直接放置在桌面(DeskTop)上的那個窗口,每個應(yīng)用程序只能有一個主框架窗口。主框架窗口負(fù)責(zé)管理各個用戶交互對象并根據(jù)用戶操作相應(yīng)地創(chuàng)建或更新文檔窗口及其視圖。 文檔窗口對SDI程序來說,和主框架窗口是一致的,主框架窗口就是文檔窗口;對于MDI程序,文檔窗口是主框架窗口的子窗
7、口,如圖。 文檔窗口一般都有相應(yīng)的可見邊框,它的客戶區(qū)(除了窗口標(biāo)題欄、邊框外的區(qū)域)是由相應(yīng)的視圖來構(gòu)成的,因此可以說視圖是文檔窗口內(nèi)的子窗口。文檔窗口時刻跟蹤當(dāng)前處于活動狀態(tài)的視圖的變化,并將用戶或系統(tǒng)產(chǎn)生的消息傳遞給當(dāng)前活動視圖。 6.16.1框架窗口框架窗口 6.1.2窗口狀態(tài)的改變窗口狀態(tài)的改變 MFC AppWizard為每個窗口設(shè)置了相應(yīng)的大小和位置。 運(yùn)行程序時,會自動調(diào)用框架內(nèi)部的WinMain函數(shù),并自動查找該應(yīng)用程序類的全局變量theApp,然后自動調(diào)用用戶應(yīng)用程序類的虛函數(shù)InitInstance,該函數(shù)會進(jìn)一步調(diào)用相應(yīng)的函數(shù)來完成主窗口的構(gòu)造和顯示工作,代碼:BOOL
8、 CEx_SDIApp:InitInstance()m_pMainWnd-ShowWindow(SW_SHOW);/ 顯示窗口m_pMainWnd-UpdateWindow();/ 更新窗口return TRUE; m_pMainWnd是主框架窗口指針變量,ShowWindow是CWnd類的成員函數(shù),用來按指定的參數(shù)顯示窗口。 6.16.1框架窗口框架窗口 通過指定ShowWindow函數(shù)的參數(shù)值可以改變改變窗口顯示狀態(tài)。例如下面的代碼是將窗口的初始狀態(tài)設(shè)置為“最小化”:BOOL CEx_SDIApp:InitInstance().m_pMainWnd-ShowWindow(SW_SHOWMI
9、NIMIZEDSW_SHOWMINIMIZED);m_pMainWnd-UpdateWindow();return TRUE; 6.16.1框架窗口框架窗口 6.1.3窗口風(fēng)格的設(shè)置窗口風(fēng)格的設(shè)置 窗口風(fēng)格窗口風(fēng)格 通常有一般和擴(kuò)展兩種形式??稍诤瘮?shù)CWnd:Create或CWnd:CreateEx參數(shù)中指定,CreateEx函數(shù)可同時支持以上兩種風(fēng)格,CWnd:Create只能指定窗口的一般風(fēng)格。控件和對話框的窗口風(fēng)格可直接通過其屬性對話框來設(shè)置。 除了上述風(fēng)格外,框架窗口還有以下三個自己的風(fēng)格。它們都可以在PreCreateWindow重載函數(shù)的CREATESTRUCT結(jié)構(gòu)中指定。 FWS
10、_ADDTOTITLEFWS_ADDTOTITLE 該風(fēng)格指定相關(guān)的信息如文檔名添加到框架窗口標(biāo)題的后面。 FWS_PREFIXTITLEFWS_PREFIXTITLE 該風(fēng)格使得框架窗口標(biāo)題中的文檔名顯示在應(yīng)用程序名之前。 FWS_SNAPTOBARS 該風(fēng)格用來調(diào)整窗口的大小,使它剛好包含了框架窗口中的控制欄。 6.16.1框架窗口框架窗口 在在MFC AppWizard中進(jìn)行修改中進(jìn)行修改 (1)(1)選擇“文件”“新建”,選擇“工程”,選擇MFC AppWizard(exe)的項(xiàng)目類型,指定項(xiàng)目工作文件夾位置,輸入項(xiàng)目名Ex_SDI,單擊確定按鈕。 (2)(2)在向?qū)У牡谝徊街?,將?yīng)用
11、程序類型選為“單個文檔”(SDI)。 (3)(3)單擊下一個,如圖,可以選擇程序中是否加入數(shù)據(jù)庫的支持。 (4)(4)單擊下一個,出現(xiàn)向?qū)У牡谌綄υ捒?,如圖,允許在程序中加入復(fù)合文檔、自動化、ActiveX控件的支持。 6.16.1框架窗口框架窗口 (5)(5)單擊下一個,如圖,對話框的前幾項(xiàng)依次確定對浮動工具條、打印與預(yù)覽以及通信網(wǎng)絡(luò)等特性的支持。對話框的最后兩項(xiàng)是最近文件列表數(shù)目的設(shè)置(默認(rèn)時為4)和一個高級按鈕 。6.16.1框架窗口框架窗口 (6)(6)在第四步對話框中,單擊高級,如圖,分別用于文檔模板字串資源內(nèi)容和窗口風(fēng)格的修改。 6.16.1框架窗口框架窗口 (7) (7)單擊關(guān)
12、閉,單擊下一個,如圖??蛇x擇:應(yīng)用程序的主窗口是MFC標(biāo)準(zhǔn)風(fēng)格還是窗口左邊有切分窗口的瀏覽器風(fēng)格,在源文件中是否加入注釋用來引導(dǎo)用戶編寫程序代碼,是使用動態(tài)鏈接庫(DLL)還是靜態(tài)鏈接庫。 (8)(8)單擊下一個按鈕,出現(xiàn)如圖6.9所示的對話框。在這里,用戶可以對MFC AppWizard提供的默認(rèn)類名、基類名、各個源文件名進(jìn)行修改。 6.16.1框架窗口框架窗口(9)(9) 單擊完成,單擊確定,回到主界面。在向?qū)е凶鞒龅倪x擇,有部分內(nèi)容反映在CEx_SDIApp:InitInstance函數(shù)中,代碼:BOOL CEx_SDIApp:InitInstance()/ 若用戶在MFC AppWiz
13、ard的第三步中,選中了“ActiveX Controls”,/ 則表示所創(chuàng)建的應(yīng)用程序支持ActiveX控件AfxEnableControlContainer();/ 若用戶在MFC AppWizard的第四步中,選中了“3D controls”/ 則表示所創(chuàng)建的應(yīng)用程序支持3D控件風(fēng)格#ifdef _AFXDLLEnable3dControls();/ 使用MFC動態(tài)鏈接庫的3D控件#elseEnable3dControlsStatic();/ 使用MFC靜態(tài)鏈接庫的3D控件#endif/ 在Windows系統(tǒng)注冊表中登記應(yīng)用程序的主鍵值,以便將一些與應(yīng)用程序/ 相關(guān)的參數(shù)存放在該主鍵值下
14、SetRegistryKey(_T(Local MFC AppWizard-Generated Applications);/ 從注冊表中調(diào)入應(yīng)用程序的一些標(biāo)準(zhǔn)參數(shù)值,其中包括最近文件列表的文件名LoadStdProfileSettings(); return TRUE; 6.16.1框架窗口框架窗口 修改修改CREATESTRUCT結(jié)構(gòu)結(jié)構(gòu) 窗口創(chuàng)建前,自動調(diào)用PreCreateWindow虛函數(shù)。用MFC AppWizard創(chuàng)建文檔應(yīng)用程序結(jié)構(gòu)時,MFC已為主窗口或文檔窗口類自動重載了該虛函數(shù)??梢栽诖撕瘮?shù)中通過修改CREATESTRUCT結(jié)構(gòu)來設(shè)置窗口的絕大多數(shù)風(fēng)格。 對于多文檔應(yīng)用程序
15、,文檔窗口的風(fēng)格可用下列的代碼更改:BOOL CChildFrame:PreCreateWindow(CREATESTRUCT& cs) / 創(chuàng)建不含有最大化按鈕的子窗口cs.style &= WS_MAXIMIZEBOX; / 調(diào)用基類的PreCreateWindow函數(shù)return CMDIChildWnd:PreCreateWindow(cs); 6.16.1框架窗口框架窗口 使用使用ModifyStyle和和ModifyStyleEx ModifyStyleEx可更改窗口的擴(kuò)展風(fēng)格。兩個函數(shù)具有相同的參數(shù),含義。BOOL ModifyXXXX( DWORD dwRemo
16、ve, DWORD dwAdd, UINT nFlags = 0 );參數(shù)dwRemove指定需要刪除的風(fēng)格,dwAdd指定需要增加的風(fēng)格,nFlags表示SetWindowPos的標(biāo)志。 框架窗口設(shè)定擴(kuò)展風(fēng)格只能通過調(diào)用ModifyStyle函數(shù)來進(jìn)行。例如用MFC ClassWizard為一個多文檔應(yīng)用程序Ex_MDI的子文檔窗口類CChildFrame添加OnCreateClient消息處理,并增加下列代碼:BOOL CChildFrame:OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) ModifyStyle(
17、0, WS_VSCROLL, 0);return CMDIChildWnd:OnCreateClient(lpcs, pContext); 6.16.1框架窗口框架窗口 6.1.4改變窗口的大小和位置改變窗口的大小和位置 CWnd類的成員函數(shù)SetWindowPos或MoveWindow可以改變窗口的大小和位置。 SetWindowPos可以改變窗口的大小、位置,還可以改變所有窗口在堆棧排列的次序(Z 次序),這個次序是根據(jù)它們在屏幕出現(xiàn)的先后來確定的。BOOL SetWindowPosBOOL SetWindowPos( const CWndconst CWnd* * pWndInsertA
18、fter, int int x, int int y, int int cx, intint cy, UINTUINT nFlags ); 參數(shù)pWndInsertAfter表示窗口對象指針,下列預(yù)定義窗口對象的地址:wndBottom將窗口放置在Z次序中的底層wndTop 將窗口放置在Z次序中的頂層wndTopMost 設(shè)置最頂窗口 wndNoTopMost 將窗口放置在所有最頂層的后面,若此窗口不是最頂窗口,則此標(biāo)志無效。 x和y表示窗口新的左上角坐標(biāo),cx和cy分別表示表示窗口新的寬度和高度,nFlags表示窗口新的大小和位置方式。 6.16.1框架窗口框架窗口 函數(shù)CWnd:MoveW
19、indow也可用來改變窗口的大小和位置,必須在MoveWindow函數(shù)中指定窗口的大小。void MoveWindowvoid MoveWindow( intint x, int int y, int int nWidth, int int nHeight, BOOLBOOL bRepaint = TRUE= TRUE );void MoveWindowvoid MoveWindow( LPCRECTLPCRECT lpRect, BOOLBOOL bRepaint = TRUE= TRUE ); 參數(shù)x和y表示窗口新的左上角坐標(biāo),nWidth和nHeight表示窗口新的寬度和高度,bRepa
20、int用于指定窗口是否重繪,lpRect表示窗口新的大小和位置。 例如,在CEx_SDIApp:InitInstance中return TRUE語句之前添加下列代碼,可以使主框架窗口移動到屏幕的(100,100)處:/ 若使用SetWindowPos函數(shù),則可以有m_pMainWnd-SetWindowPos(NULL,100,100,0,0,SWP_NOSIZE|SWP_NOZORDER);/ 或使用MoveWindow函數(shù),則有CRect rcWindow;m_pMainWnd-GetWindowRect(rcWindow);m_pMainWnd-MoveWindow(100,100,rc
21、Window.Width(),rcWindow.Height(),TRUE); CRect是一個矩形類,GetWindowRect是一個CWnd類的成員函數(shù),用來獲取窗口在屏幕的位置和大小。 6.2菜單菜單 許多程序員對于菜單的設(shè)計都遵循下列一些規(guī)則:l 若選擇某菜單項(xiàng)會彈出一對話框,那么在該菜單項(xiàng)文本后有“”。l 若某項(xiàng)菜單有子菜單,那么在該菜單項(xiàng)文本后有“”。l 若菜單項(xiàng)需要助記符,用括號將帶下劃線的字母括起來。助記符與Alt構(gòu)成一個組合鍵,當(dāng)按住“Alt”鍵不放,敲擊該字母時,對應(yīng)的菜單項(xiàng)就會被選中。l 若某項(xiàng)菜單需要快捷鍵的支持,則一般將其列在相應(yīng)菜單項(xiàng)文本之后。所謂“快捷鍵”是一個組
22、合鍵,如Ctrl+N,使用時是先按下“Ctrl”健不放,然后再按“N”鍵。任何時候按下快捷鍵,相應(yīng)的菜單命令都會被執(zhí)行。 圖6.11 菜單樣例子 6.2菜單菜單 6.2.1更改應(yīng)用程序菜單更改應(yīng)用程序菜單 菜單“文件”“打開工作區(qū)”。在工作區(qū)中選擇ResourceView頁面,雙擊資源“Menu”中的IDR_MAINFRAME,通過菜單編輯器修改菜單資源IDR_MAINFRAME ,可以為程序重新指定一個菜單,下面的示例過程: (1)(1)打開前面的單文檔應(yīng)用程序Ex_SDI。 (2)(2)按快捷鍵Ctrl+R,在資源類型中選定“Menu”,如圖。 (3)(3)單擊新建,如圖。 6.2菜單菜單
23、 (4) (4)在Menu的ID_MENU1上右擊鼠標(biāo),選擇“Properties”命令,如圖,可以重新指定菜單資源ID,設(shè)置菜單資源的語言和條件,這個條件用來決定菜單資源包含到哪個環(huán)境中,例如當(dāng)指定條件為_DEBUG,則菜單資源只存在于Debug編譯環(huán)境中。 (5)(5)菜單ID_MENU1添加一個頂層彈出菜單項(xiàng)“測試(&T)”,并在該菜單下添加一個子菜單項(xiàng)“返回(&R)”,ID設(shè)為ID_TEST_RETURN,如圖。 (6)(6)打開Ex_SDI程序菜單資源IDR_MAINFRAME,在“查看”菜單的最后添加一個子菜單項(xiàng)“顯示測試菜單(&M)”,ID設(shè)為ID_VIE
24、W_TEST。 (7)(7)為CMainFrame類添加一個CMenu類型的成員變量m_NewMenu,CMenu類是用來處理菜單的一個MFC類。 6.2菜單菜單 (8) (8)按快捷鍵Ctrl+W,切換到Message Maps頁面,從“Class name”列表中選擇CMainFrame,分別為菜單項(xiàng)ID_VIEW_TEST和ID_TEST_RETURN添加COMMAND消息映射,使用默認(rèn)的消息映射函數(shù)名,并添中下列代碼:void CMainFrame:OnViewTest() m_NewMenu.Detach();/ 使菜單對象和菜單句柄分離m_NewMenu.LoadMenu( IDR
25、_MENU1 ); SetMenu(NULL); / 清除應(yīng)用程序菜單SetMenu( &m_NewMenu ); / 設(shè)置應(yīng)用程序菜單void CMainFrame:OnTestReturn() m_NewMenu.Detach();m_NewMenu.LoadMenu( IDR_MAINFRAME );SetMenu(NULL);SetMenu( &m_NewMenu ); LoadMenu裝載菜單資源,Detach使菜單對象與菜單句柄分離。調(diào)用LoadMenu后,菜單對象m_NewMenu就擁有一個菜單句柄,再次調(diào)用LoadMenu時,發(fā)生運(yùn)行時錯誤,當(dāng)菜單對象與菜單句柄
26、分離后,就可以再創(chuàng)建菜單。SetMenu是CWnd類的一個成員函數(shù),用來設(shè)置應(yīng)用程序的菜單。 (9)(9)編譯運(yùn)行并測試。 6.2菜單菜單 6.2.2使用鍵盤快捷鍵使用鍵盤快捷鍵 通過上述的菜單系統(tǒng),可以選擇幾乎所有可用的命令和選項(xiàng),保證了菜單命令系統(tǒng)的完整性,菜單系統(tǒng)操作效率不高。對于那些反復(fù)使用的命令,有必要進(jìn)一步提高效率,于是加速鍵應(yīng)運(yùn)而生。 一個加速鍵就是一個按鍵或幾個按鍵的組合,用于激活特定的命令。加速鍵也是一種資源。 例如:為前面兩個菜單ID_VIEW_TEST和ID_TEST_RETURN定義鍵盤快捷鍵: (1)(1)打開上例的工作區(qū)窗口中Accelerator的資源項(xiàng),雙擊ID
27、R_MAINFRAME,如圖。 6.2菜單菜單 (2) (2)建立一新的加速鍵,雙擊加速鍵列表的最下端的空行,彈出如圖的“Accel Properities”(加速鍵屬性)對話框,可設(shè)置的屬性如表。 6.2菜單菜單 (3) (3)選擇Ex_SDI添加的“顯示測試菜單”菜單項(xiàng)ID_VIEW_TEST作為要聯(lián)用的加速鍵的ID號,然后單擊下一鍵按鈕,并按下Ctrl+1作為此加速鍵的鍵值。 (4)(4)按同樣的方法,為菜單項(xiàng)ID_TEST_RETURN添加加速鍵Ctrl+2。需要說明的是,為了使其他用戶能查看并使用該加速鍵,還需在相應(yīng)的菜單項(xiàng)文本后面添加加速鍵內(nèi)容。例如,可將ID_VIEW_TEST菜
28、單項(xiàng)的標(biāo)題改成“顯示測試菜單(&M)tCtrl+1”,其中“t”是將后面的“Ctrl+1”定位到一個水平制表位。 (5)(5)編譯運(yùn)行并測試。當(dāng)程序運(yùn)行后,按“Ctrl+1”和“Ctrl+2”將執(zhí)行相應(yīng)的菜單命令。 6.2菜單菜單 6.2.3菜單的編程控制菜單的編程控制 創(chuàng)建菜單創(chuàng)建菜單 CreateMenu和CreatePopupMenu用來創(chuàng)建一個菜單或子菜單框架,原型:BOOL CreateMenu( );/ 產(chǎn)生一個空菜單BOOL CreatePopupMenu( );/ 產(chǎn)生一個空的彈出式子菜單 裝入菜單資源裝入菜單資源 需調(diào)用CMenu成員函數(shù)LoadMenu,再用SetM
29、enu對應(yīng)用程序菜單進(jìn)行重新設(shè)置。BOOL LoadMenu( LPCTSTR lpszResourceName );BOOL LoadMenu( UINT BOOL LoadMenu( UINT nIDResource ); );lpszResourceName為菜單資源名稱,nIDResource為菜單資源ID號。 添加菜單項(xiàng)添加菜單項(xiàng) 可以調(diào)用AppendMenu或InsertMenu函數(shù)來添加菜單項(xiàng)。AppendMenu是將菜單項(xiàng)添加在菜單的末尾處,InsertMenu在指定位置處插入菜單項(xiàng),將后面的菜單項(xiàng)依次下移。BOOL AppendMenu( UINT nFlags, UINT
30、nIDNewItem = 0,LPCTSTR lpszNewItem = NULL );BOOL AppendMenu( UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp );BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp ); nIDNe
31、wItem表示新菜單項(xiàng)的ID號,lpszNewItem表示新菜單項(xiàng)的內(nèi)容,pBmp用于菜單項(xiàng)的位圖指針,nPosition表示新菜單項(xiàng)要插入的菜單項(xiàng)位置。nFlags表示要增加的新菜單項(xiàng)的狀態(tài)信息。 6.2菜單菜單 注意:注意:l 當(dāng)nFlags為MF_BYPOSITION時,nPosition表示新菜單項(xiàng)要插入的具體位置,為0時表示第一個菜單項(xiàng),為 -1時,將菜單項(xiàng)添加菜單的末尾處。l nFlags的標(biāo)志中,可以用“|”(按位或)來組合。有些組合是不允許的,例如MF_DISABLED、MF_ENABLED和MF_GRAYED,MF_STRING、MF_OWNERDRAW、MF_SEPARAT
32、OR和位圖,MF_CHECKED和MF_UNCHECKED 都不能組合在一起。l當(dāng)菜單項(xiàng)增加后,不管菜單依附的窗口是否改變,都應(yīng)調(diào)用CWnd:DrawMenuBar來更新菜單。 6.2菜單菜單 刪除菜單項(xiàng)刪除菜單項(xiàng) DeleteMenu函數(shù)可將菜單項(xiàng)刪除,注意:注意:調(diào)用該函數(shù)后,不管菜單依附的窗口是否改變,都應(yīng)調(diào)用CWnd:DrawMenuBar使菜單更新。函數(shù)原型:BOOL DeleteMenu( UINT BOOL DeleteMenu( UINT nPosition, UINT , UINT nFlags ); ); nPosition表示要刪除菜單項(xiàng)位置,由nFlags進(jìn)行說明。nF
33、lags為MF_BYCOMMAND時,nPosition表示菜單項(xiàng)ID號,nFlags為MF_BYPOSITION時,nPosition表示菜單項(xiàng)的位置。 獲取菜單項(xiàng)獲取菜單項(xiàng) 下面四個CMenu成員函數(shù)分別獲得菜單的項(xiàng)數(shù)、菜單項(xiàng)的ID號、菜單項(xiàng)的文本內(nèi)容以及彈出式子菜單的句柄。UINT GetMenuItemCount( ) const;/UINT GetMenuItemCount( ) const;/用來獲得菜單的菜單項(xiàng)數(shù)。 UINT GetMenuItemID( intUINT GetMenuItemID( int nPos ) const;/ ) const;/用來獲得由nPos指定菜
34、單項(xiàng)位置的菜單項(xiàng)的標(biāo)識號。 int GetMenuString( UINT int GetMenuString( UINT nIDItem, CString& , CString& rString, UINT , UINT nFlags ) ) const;const; / /獲得由nIDItem指定菜單項(xiàng)位置的菜單項(xiàng)的文本內(nèi)容,由rString參數(shù)返回,nFlags為MF_BYPOSITION時,nPosition表示菜單項(xiàng)的位置。 CMenuCMenu* * GetSubMenu( int GetSubMenu( int nPos ) const; ) const; /用來
35、獲得指定菜單的彈出式菜單的菜單句柄。 6.2菜單菜單示例示例 示例過程利用CMenu成員函數(shù)向應(yīng)用程序菜單中添加并處理一個菜單項(xiàng): (1)(1)打開前面的單文檔應(yīng)用程序Ex_SDI或重新創(chuàng)建。 (2)(2)“查看”菜單“Resource Symbols”,如圖。 (3)單擊新建,如圖。在名字框中輸入標(biāo)識符ID_NEW_MENUITEM。在值框中輸入ID的值,單擊確定。 6.2菜單菜單(4)(4)關(guān)閉“資源符號”對話框,在CMainFrame:OnCreate函數(shù)中添加下列代碼。int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct).CMen
36、u* pSysMenu = GetMenu();/ 獲得程序菜單指針CMenu* pSubMenu = pSysMenu-GetSubMenu(1);/ 獲得第二個子菜單的指針CString StrMenuItem(新的菜單項(xiàng));pSubMenu-AppendMenu(MF_SEPARATOR); / 增加一水平分隔線pSubMenu-AppendMenu(MF_STRING,ID_NEW_MENUITEM,StrMenuItem);/ 在子菜單中增加一菜單項(xiàng)/ 允許使用ON_UPDATE_COMMAND_UI或ON_COMMAND的菜單項(xiàng)m_bAutoMenuEnable = FALSE;
37、/ 關(guān)閉系統(tǒng)自動更新菜單狀態(tài)pSysMenu-EnableMenuItem(ID_NEW_MENUITEM,MF_BYCOMMAND|MF_ENABLED);/ 激活菜單項(xiàng)DrawMenuBar();/ 更新菜單return 0; 6.2菜單菜單 (5) (5)用MFC ClassWizard處理OnCommand消息并檢測用戶菜單的nID參數(shù)。BOOL CMainFrame:OnCommand(WPARAM wParam, LPARAM lParam) / wParam的低字節(jié)表示菜單、控件、加速鍵的命令I(lǐng)Dif (LOWORD(wParam) = ID_NEW_MENUITEM) Mess
38、ageBox(你選中了新的菜單項(xiàng));return CFrameWnd:OnCommand(wParam, lParam); (6) (6)編譯運(yùn)行并測試。這樣當(dāng)選擇菜單“編輯”“新的菜單項(xiàng)”命令后,就會彈一個對話框,顯示“你選中了新的菜單項(xiàng)”消息。 6.2菜單菜單 6.2.4使用快捷菜單使用快捷菜單 快捷菜單實(shí)現(xiàn)函數(shù)快捷菜單實(shí)現(xiàn)函數(shù) 用資源編輯器和MFC庫的CMenu:TrackPopupMenu函數(shù)可以創(chuàng)建這樣的菜單,CMenu:TrackPopupMenu函數(shù)原型:BOOL TrackPopupMenu( UINT BOOL TrackPopupMenu( UINT nFlags, int
39、 , int x, int , int y, CWnd, CWnd* * pWnd, LPCRECT , LPCRECT lpRect = NULL ); = NULL ); 用來顯示一個浮動的彈出式菜單。nFlags表示菜單在屏幕顯示的位置以及鼠標(biāo)按鈕標(biāo)志,如表。x和y表示菜單的水平坐標(biāo)和菜單的頂端的垂直坐標(biāo)。pWnd表示彈出 菜單的窗口,此窗口將收到菜單全部的WM_COMMAND消息。lpRect是一個RECT結(jié)構(gòu)或CRect對象指針,表示一個矩形區(qū)域,單擊這個區(qū)域時,彈出菜單不消失。lpRect為NULL時,在菜單外面單擊鼠標(biāo),菜單立刻消失。 6.2菜單菜單 示例示例 顯示主菜單IDR_
40、MAINFRAME時,右擊鼠標(biāo)彈出“查看”菜單的子菜單,顯示菜單IDR_MENU1時,右擊鼠標(biāo)彈出“測試”菜單的子菜單。具體步驟: (1)(1)打開前面的單文檔應(yīng)用程序Ex_SDI。 (2)(2)在CMainFrame類添加WM_CONTEXTMENU消息映射,函數(shù)代碼。void CMainFrame:OnContextMenu(CWnd* pWnd, CPoint point) CMenu* pSysMenu = GetMenu();/ 獲得程序菜單指針int nCount = pSysMenu-GetMenuItemCount();/ 獲得頂層菜單個數(shù)int nSubMenuPos = -
41、1;for (int i=0; iGetMenuString(i, str, MF_BYPOSITION);if (str.Left(4) = “查看”) | (str.Left(4) = “測試”)nSubMenuPos = i;break;if (nSubMenuPosGetSubMenu( nSubMenuPos) -TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this); (3)(3)編譯運(yùn)行并測試。 6.36.3工具欄工具欄 6.3.1使用工具欄編輯器使用工具欄編輯器 創(chuàng)建一個新的工具欄按鈕創(chuàng)建一個新
42、的工具欄按鈕 雙擊新建的工具欄中最右端的空按鈕彈出屬性框,在ID框中輸入名稱,右端出現(xiàn)一個空按鈕。單擊該按鈕,在資源編輯器的工具按鈕設(shè)計窗口內(nèi)進(jìn)行編輯,這個編輯就是繪制一個工具按鈕的位圖。 移動一個按鈕移動一個按鈕 鼠標(biāo)左鍵點(diǎn)中它并拖動至相應(yīng)位置。如果用戶拖動它離開工具欄位置,則此按鈕從工具欄中消失。若在移動一個按鈕的同時,按下Ctrl鍵,則在新位置復(fù)制一個按鈕,新位置可以是同一個工具欄中的其他位置,也可以在不同的工具欄中。 刪除一個按鈕刪除一個按鈕 將選取中的按鈕拖離工具欄就消失了。若選中按鈕,Delete鍵不能刪除,將按鈕中的圖形全部以背景色填充。 在工具欄中插入空格在工具欄中插入空格 如
43、果按扭前沒有任何空格,拖動該按鈕向右移動并當(dāng)覆蓋相鄰按鈕的一半以上時,釋放鼠標(biāo)鍵,則此按鈕前出現(xiàn)空格。 如果按鈕前有空格而按鈕后沒有空格,拖動該按鈕向左移動并當(dāng)按鈕的左邊界接觸到前面按鈕時,釋放鼠標(biāo)鍵,則此按鈕后將出現(xiàn)空格。 如果按鈕前后均有空格,拖動該按鈕向右移動并當(dāng)接觸到相鄰按鈕時,則此按鈕前的空格保留,按鈕后的空格消失。相反,拖動該按鈕向左移動并當(dāng)接觸到前一個相鄰按鈕時,則此按鈕前面的空格消失,后面的空格保留。 6.36.3工具欄工具欄工具欄按鈕屬性的設(shè)置工具欄按鈕屬性的設(shè)置 6.36.3工具欄工具欄 6.3.2工具按鈕和菜單項(xiàng)相結(jié)合工具按鈕和菜單項(xiàng)相結(jié)合 指選擇工具按鈕或菜單命令時,操
44、作結(jié)果是一樣的。使它們結(jié)合的具體方法是在工具按鈕的屬性對話框中將按鈕的ID號設(shè)置為相關(guān)聯(lián)的菜單項(xiàng)ID。 例如例如: :示例是在前面Ex_SDI上進(jìn)行的,通過兩個工具按鈕分別顯示主菜單IDR_MAINFRAME和菜單IDR_MENU1。具體步驟: (1)(1)打開前面的單文檔應(yīng)用程序Ex_SDI。 (2)(2)利用工具欄編輯器設(shè)計兩個工具按鈕,如圖。 6.36.3工具欄工具欄 (3) (3)雙擊設(shè)計的第一個工具按鈕,將工具按鈕的ID號設(shè)為ID_TEST_RETURN,在提示框內(nèi)鍵入“返回應(yīng)用程序主菜單n返回主菜單”。 (4)(4)雙擊設(shè)計的第二個工具按鈕,將工具按鈕的ID號設(shè)為ID_VEW_TE
45、ST,在提示框內(nèi)鍵入“顯示測試菜單n顯示測試菜單”。 (5)(5)編譯運(yùn)行并測試。將鼠標(biāo)移至設(shè)計的第一個工具按鈕處,這時在狀態(tài)欄上顯示出“返回應(yīng)用程序主菜單”信息,若稍等片刻后,還會彈出提示小窗口,顯示出“返回主菜單”字樣,如圖。單擊新添加的這兩個按鈕,會執(zhí)行相應(yīng)的菜單命令。 6.36.3工具欄工具欄 6.3.3多個工具欄的使用多個工具欄的使用 操作步驟如下: (1)(1)打開前面的單文檔應(yīng)用程序Ex_SDI。 (2)(2)將工作區(qū)切換到ResourceView,展開Toolbar(工具欄)資源,用鼠標(biāo)單擊IDR_MAINFRAME不松開,按Ctrl,將IDR_MAINFRAME拖到Toolb
46、ar資源名稱上。 (3)(3)右擊工具欄資源IDR_MAINFRAME1,選擇Properties命令,如圖。 (4)(4)雙擊IDR_TOOLBAR1,按圖刪除不要的工具按鈕。 (5)(5)在CMainFrame類中添加一個成員變量m_wndTestBar,變量類型為CToolBar。CToolBar類封裝了工具欄的操作。 6.36.3工具欄工具欄(6)(6)在CMainFrame:OnCreate函數(shù)中添加下面的工具欄創(chuàng)建代碼:int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CFrameWnd:OnCreate(lpCre
47、ateStruct) = -1)return -1;int nRes = m_wndTestBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,CRect(0,0,0,0),AFX_IDW_TOOLBAR + 10);if (!nRes | !m_wndTestBar.LoadToolBar(IDR_TOOLBAR1)TRACE0(Failed to create toolbarn);re
48、turn -1; / fail to createm_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);m_wndTestBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);DockControlBar(&m_wndTestBar);return 0; 6.36.3工具欄工具欄(7)(7)編譯運(yùn)行,如圖。 (8)(8)需要調(diào)用CFrameWnd類的成員函數(shù)ShowControlBar來使程序一開始運(yùn)行時隱藏工具欄
49、IDR_TOOLBAR1。在CMainFrame:OnCreate中添加代碼:int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)ShowControlBar( &m_wndTestBar, FALSE, FALSE );/ 關(guān)閉測試工具欄return 0;6.36.3工具欄工具欄(9)(9)在CMainFrame:OnViewTest和CMainFrame:OnTestReturn中添加代碼:void CMainFrame:OnViewTest() ShowControlBar( &m_wndTestBar, TRUE,
50、 FALSE );/ 顯示測試工具欄ShowControlBar( &m_wndToolBar, FALSE, FALSE );/ 關(guān)閉主工具欄void CMainFrame:OnTestReturn() ShowControlBar( &m_wndTestBar, FALSE, FALSE );/ 關(guān)閉測試工具欄ShowControlBar( &m_wndToolBar, TRUE, FALSE );/ 顯示主工具欄(10)(10) 編譯運(yùn)行并測試,如圖,左邊開始運(yùn)行的結(jié)果,右邊是單擊按鈕運(yùn)行的結(jié)果。 6.46.4狀態(tài)欄狀態(tài)欄 6.4.1狀態(tài)欄的定義狀態(tài)欄的定義 Ap
51、pWizard創(chuàng)建的SDI或MDI應(yīng)用程序框架中,有一個靜態(tài)的indicator數(shù)組,是在MainFrm.cpp文件中定義的,被MFC用作狀態(tài)欄的定義。 數(shù)組中的元素是一些標(biāo)識常量或是字串資源的ID號。圖列出了indicators數(shù)組元素與標(biāo)準(zhǔn)狀態(tài)欄窗格的關(guān)系。 Static UINT indicators=ID_SEPARATOR,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,圖6.28 indicators數(shù)組的定義6.46.4狀態(tài)欄狀態(tài)欄 6.4.2狀態(tài)欄的常用操作狀態(tài)欄的常用操作 增加和減少窗格增加和減少窗格 在狀態(tài)欄中增加信
52、息行窗格,在indicators數(shù)組中增加一個ID_SEPARATOR標(biāo)識;在狀態(tài)欄中增加指示器窗格,在indicators數(shù)組中增加一個在字符串表中定義過的資源ID。狀態(tài)欄減少一個窗格,只需減少indicators數(shù)組元素。 在狀態(tài)欄上顯示文本在狀態(tài)欄上顯示文本 調(diào)用CStatusBar:SetPaneText函數(shù)更新任何窗格中的文本。函數(shù)原型:BOOL SetPaneText( int BOOL SetPaneText( int nIndex, LPCTSTR, LPCTSTR lpszNewText, BOOL, BOOL bUpdate = TRUE );TRUE ); 示例示例 (1
53、)(1)創(chuàng)建一個默認(rèn)的單文檔應(yīng)用程序Ex_SDIMouse。 (2)(2)將工作區(qū)切換到ClassView頁面,展開CMainFrame,雙擊CMainFrame,在文檔窗口中出現(xiàn)該函數(shù)的定義,在它的前面就是狀態(tài)欄數(shù)組的定義。 (3)(3)將狀態(tài)欄indicators數(shù)組的定義改為下列代碼:static UINT indicators =ID_SEPARATOR, ID_SEPARATOR, ; 6.46.4狀態(tài)欄狀態(tài)欄(4)在CEx_SDIMouseView類中添加CMainFrame類的代碼。CEx_SDIMouseView:OnMouseMove代碼:void CEx_SDIMouseV
54、iew:OnMouseMove(UINT nFlags, CPoint point) CString str;CMainFrame* pFrame=(CMainFrame*)AfxGetApp()-m_pMainWnd; / 獲得主窗口指針CStatusBar* pStatus=&pFrame-m_wndStatusBar; / 獲得主窗口中的狀態(tài)欄指針if (pStatus) str.Format(X=%d, Y=%d,point.x, point.y);/ 格式化文本pStatus-SetPaneText(1,str);/ 更新第二個窗格的文本CView:OnMouseMove(n
55、Flags, point); 6.46.4狀態(tài)欄狀態(tài)欄(5)(5)將MainFrm.h文件中的受保護(hù)變量m_wndStatusBar變成公共變量。(6)(6)在Ex_SDIMouseView.cpp文件的開始處增加下列語句:#include Ex_SDIMouseView.h#include MainFrm.h“(7)(7)編譯并運(yùn)行,如圖。 6.46.4狀態(tài)欄狀態(tài)欄 6.4.3改變狀態(tài)欄的風(fēng)格改變狀態(tài)欄的風(fēng)格 在MFC的CStatusBar類中,有兩個成員函數(shù)可以改變狀態(tài)欄風(fēng)格,它們是:void SetPaneInfo( int void SetPaneInfo( int nIndex, U
56、INT, UINT nID, UINT, UINT nStyle, int , int cxWidth ); );void SetPaneStyle( intvoid SetPaneStyle( int nIndex, UINT, UINT nStyle ); ); 參數(shù)nIndex表示要設(shè)置的狀態(tài)欄窗格的索引,nID為狀態(tài)欄窗格指定新的ID,cxWidth表示窗格的像素寬度,nStyle表示窗格的風(fēng)格類型,指定窗格的外觀,例如SBPS_POPOUT表示窗格是凸起來的,見表。 6.56.5交互對象的動態(tài)更新交互對象的動態(tài)更新 在前面Ex_SDI基礎(chǔ)上,單擊工具按鈕,該按鈕被按下,按鈕彈起,單擊
57、工具按鈕時,該按鈕被按下,按鈕彈起,如此反復(fù)。具體步驟: (1)(1)打開上例的單文檔應(yīng)用程序項(xiàng)目Ex_SDI。 (2)(2)為CMainFrame添加一個BOOL型的成員變量m_bMainWork,將m_bMainWork的初值設(shè)為TRUE。 (3)(3)在CMainFrame類中添加工具按鈕ID_VIEW_TEST和ID_TEST_RETURN的UPDATE_COMMAND_UI消息映射函數(shù),添加代碼:void CMainFrame:OnUpdateViewTest(CCmdUI* pCmdUI) pCmdUI-Enable( TRUE );pCmdUI-SetCheck( !m_bMai
58、nWork );void CMainFrame:OnUpdateTestReturn(CCmdUI* pCmdUI) pCmdUI-Enable( TRUE );pCmdUI-SetCheck( m_bMainWork );6.56.5交互對象的動態(tài)更新交互對象的動態(tài)更新(4)(4)在CMainFrame:OnViewTest和CMainFrame:OnTestReturn添加代碼:void CMainFrame:OnViewTest() m_bMainWork = FALSE;void CMainFrame:OnTestReturn() m_bMainWork = TRUE;(5)(5)編譯
59、運(yùn)行并測試,如圖。 6.6圖標(biāo)和光標(biāo)圖標(biāo)和光標(biāo) 6.6.1使用圖形編輯器使用圖形編輯器 創(chuàng)建一個新的圖標(biāo)或光標(biāo)創(chuàng)建一個新的圖標(biāo)或光標(biāo) 創(chuàng)建應(yīng)用程序后,按快捷鍵Ctrl+R打開“插入資源”,選擇Cursor(光標(biāo))或Icon(圖標(biāo))資源類型,單擊新建。如圖。 創(chuàng)建新圖標(biāo)或光標(biāo)的時,圖形編輯器先創(chuàng)建的是一個適合于VGA環(huán)境中的圖像,開始的時候它以屏幕色(透明方式)來填充。如表。 新設(shè)備按鈕6.6圖標(biāo)和光標(biāo)圖標(biāo)和光標(biāo)選用和定制顯示設(shè)備選用和定制顯示設(shè)備 圖形編輯器上,有一個New Device Image按鈕,單擊,如圖。 單擊定制,如圖。設(shè)置光標(biāo)熱點(diǎn)設(shè)置光標(biāo)熱點(diǎn) 借助光標(biāo)“熱點(diǎn)”確定光標(biāo)實(shí)際的位置
60、。如圖。 設(shè)置熱點(diǎn)按鈕6.6圖標(biāo)和光標(biāo)圖標(biāo)和光標(biāo) 6.6.2圖標(biāo)圖標(biāo) 圖標(biāo)的調(diào)入和清除圖標(biāo)的調(diào)入和清除 CWinApp:LoadIcon可將一個圖標(biāo)資源調(diào)入并返回一個圖標(biāo)句柄。原型:HICON LoadIcon( LPCTSTR HICON LoadIcon( LPCTSTR lpszResourceName ) const; ) const;HICON LoadIcon( UINT HICON LoadIcon( UINT nIDResource ) const; ) const; 不 想 創(chuàng) 建 新 的 圖 標(biāo) 資 源 , 可 使 用 預(yù) 定 義 的 標(biāo) 準(zhǔn) 圖 標(biāo) , 調(diào) 用CWinApp:LoadStandardIcon ,原型:HICON LoadStandardIcon( LPCTSTR lpszIconNa
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年耳機(jī)原材料供應(yīng)商質(zhì)量保證合同
- 2024馬鈴薯種植基地安全生產(chǎn)責(zé)任合同3篇
- 2024年股權(quán)激勵計劃書
- 2024年金融科技研發(fā)與創(chuàng)新服務(wù)合同
- 2024跨國企業(yè)廣告宣傳與推廣合同
- 2024年食品企業(yè)HACCP體系認(rèn)證咨詢合同版B版
- 2024年航空公司客艙餐飲服務(wù)供應(yīng)合同
- 2024輕質(zhì)隔墻板行業(yè)規(guī)范制定與執(zhí)行監(jiān)督協(xié)議3篇
- 2024年藥品銷售與售后服務(wù)協(xié)議3篇
- 2024年適用餐飲行業(yè)購銷協(xié)議范例版B版
- CJJ181-2012 城鎮(zhèn)排水管道檢測與評估技術(shù)規(guī)程
- 2024-2029年中國智能健康手表行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報告
- 生物醫(yī)學(xué)電子學(xué)智慧樹知到期末考試答案章節(jié)答案2024年天津大學(xué)
- 2023 版《中國近現(xiàn)代史綱要》 課后習(xí)題答案
- DB11T 489-2024 建筑基坑支護(hù)技術(shù)規(guī)程
- 一例火電機(jī)組有功功率突變原因分析及預(yù)防措施
- 數(shù)學(xué)寒假計劃書
- 第五章 中國特色社會主義理論體系的形成發(fā)展(一)
- 低空經(jīng)濟(jì)公司設(shè)立可行性分析
- 2024新能源風(fēng)電場集電線路施工方案
- 2023-2024學(xué)年江西省吉安市吉州區(qū)八年級(上)期末數(shù)學(xué)試卷(含解析)
評論
0/150
提交評論