




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、試驗三面向?qū)ο蟪绦蛟O(shè)計實驗,一個簡單的可復(fù)用時鐘控件,1,軟件網(wǎng)絡(luò),本實驗的開發(fā)環(huán)境,使用C語言實現(xiàn) 使用VC6.0集成開發(fā)環(huán)境開發(fā) 使用MFC應(yīng)用程序開發(fā)框架,2,軟件網(wǎng)絡(luò),MFC版本簡介,MFC全稱Microsoft Foundation Classes. 1989年微軟公司成立Application Framework技術(shù)團(tuán)隊,開發(fā)C面向?qū)ο蠊ぞ呓oWindows應(yīng)用程序開發(fā)人員使用。這個小組即AFX小組,就是他們,開始了MFC的開發(fā)歷程。 微軟公司于1992年4月推出C/C+7.0產(chǎn)品時,初次向世人介紹了MFC 1.0,其32位版本也在1992年7月隨著Win32 SDK推出。 Visu
2、al C1.0(也就是C/C+8.0)搭配MFC 2.0于1993年3月推出。同年8月推出在Windows NT上的Visual C1.1 for Windows NT,搭配的是MFC 2.1。,3,軟件網(wǎng)絡(luò),微軟在1993年12月又推出了16為的Visual C+ 1.5, 搭配的是MFC 2.5。 1994年9月,微軟推出Visual C 2.0,搭配MFC 3.0。 1995年1月,微軟推在增加了MAPI和WinSock支持的基礎(chǔ)上,推出MFC 3.1。 1995年7月,MFC有了3.2版,這是一個小的改版。 然后就是1995年9月的32位版MFC 4.0。這個版本有了相當(dāng)大的改進(jìn)。 1
3、996年上半年又有了MFC4.1 時至今日MFC在Visual C 7.0中已經(jīng)到了7.0版本。 我們常用的Visual C6.0使用的是MFC 4.2版本。 微軟正不斷地為“為什么要使用MFC”加上各式各樣地強烈你有,并強烈導(dǎo)引它成為Windows程序設(shè)計的C標(biāo)準(zhǔn)界面。正如我們所看到的,越來越多的MFC程序出現(xiàn)了并繼續(xù)在產(chǎn)生。,4,軟件網(wǎng)絡(luò),試驗設(shè)計目標(biāo),完成一個可重用的C類,可以通過該類實現(xiàn)一個簡單的模擬時鐘 編寫一個簡單的MFC程序測試驗證這個時鐘控件類 關(guān)于這個時鐘控件,如果按照課件繼續(xù)完善下去,請將他做得更好更強大。比如說:可以考慮為時鐘控件的各項設(shè)置(如顏色)提供外部接口,供CCl
4、ockEx的使用者調(diào)用,可以考慮豐富背景繪制,加入背景圖片設(shè)置,在刻度上標(biāo)上數(shù)字,為指針加上陰影效果,在時鐘上顯示日期等。有興趣的同學(xué)有空不妨試試。,5,軟件網(wǎng)絡(luò),應(yīng)用程序框架設(shè)計過程(僅供參考),打開VC6.0,新建一個MFC工程,輸入工程名,選擇“MFC AppWizard”如圖所示,然后點擊OK。,6,軟件網(wǎng)絡(luò),為簡單起見,這里選擇“Dialog based”程序,然后可以直接選擇finish了。,7,軟件網(wǎng)絡(luò),在類視圖的工程名上右鍵單擊,選擇New Class(如下圖所示)來建立一個新類。,8,軟件網(wǎng)絡(luò),我們可以從CStatic類(靜態(tài)控件類)派生出類CClockEx來實現(xiàn)時鐘控件類,
5、這樣,就可以繼承MFC靜態(tài)控件的很多已經(jīng)具備的功能和特點。在建立新類的對話框中,按下圖輸入。,9,軟件網(wǎng)絡(luò),按CtrlW調(diào)出Class Wizard,在class name中選擇剛才建立的新類CClockEx,然后 重載虛函數(shù)PreSubClassWindow,對時鐘控件的基本初始化工作將在該函數(shù)中進(jìn)行。 添加消息響應(yīng)WM_PAINT,我們必須用自己完成時鐘的繪制工作。 添加消息響應(yīng)WM_SIZE,重載該消息響應(yīng)以便我們的時鐘控件能夠自動適應(yīng)其大小的變化。 為了時鐘能夠走動,我們得定時刷新時鐘控件讓它走動,還得添加WM_TIMER的消息響應(yīng)。最終效果如下圖所示。,10,軟件網(wǎng)絡(luò),到目前為止,時
6、鐘控件的輪廓和已經(jīng)有了,下面考慮時鐘繪制的具體實現(xiàn)。 一個時鐘大致可由時鐘背景、時針、分針、秒針?biāo)膫€部分構(gòu)成。 以上的時鐘四個部分可是看作四個不同的對象,可以考慮建立類CClockBackground(背景)CClockHourHand(時針)、CClockMinHand(分針)、CClockSecHand(秒針)來分別實現(xiàn)。(此處為了意義明確,類名都比較長) 這四個類有它們的共同點,譬如都有自己的繪圖函數(shù),如果要具體能夠設(shè)置顏色,它們都應(yīng)該有自己的繪圖顏色,同樣應(yīng)該有顏色設(shè)置函數(shù),此外都有繪圖區(qū)域和區(qū)域設(shè)置函數(shù)等等。因此,可以為它們的共性建立一個基類,此處命名為CClockElement(時
7、鐘元素)。,11,軟件網(wǎng)絡(luò),下面逐步實現(xiàn)各個類,首先實現(xiàn)各個組成類的基類CClockElement。同樣,在ClassView的工程名上面點右鍵,選擇New Class,在ClassType里面選擇Genenric Class,類CClockElement不需要從其它類派生,所以Base Class可以不填,效果如下圖所示。,12,軟件網(wǎng)絡(luò),下面對類CClockElement的源代碼進(jìn)行編寫。 因為在后面的繪圖中需要用到sin和cos這兩個數(shù)學(xué)計算公式,因此需包含頭文件以便使用數(shù)學(xué)函數(shù)庫。為后面計算使用,還需定義數(shù)學(xué)常量PI(3.1415926535)。 時鐘的每個組成部分都有繪圖區(qū)域區(qū)域,因
8、此,可在基類中定義繪圖區(qū)域變量。同理,可以定義顏色變量,為了是顏色不顯得單調(diào),這里為每個控件設(shè)置兩種顏色(如果想使程序更加絢麗,可以設(shè)置更多顏色)。 對應(yīng)的,這些變量需增加接口函數(shù)來進(jìn)行訪問。 對于每個組成部分都應(yīng)該有的Draw函數(shù),當(dāng)然也需在基類中定義,但是,該函數(shù)對于基類來說是無需函數(shù)實現(xiàn)的,因此可定義為純虛函數(shù)。,13,軟件網(wǎng)絡(luò),綜合剛才這幾點,CClockElement的實現(xiàn)的頭文件代碼如下: #include #define PI 3.1415926535 class CClockElement public: void SetColor(COLORREF crMain, COLOR
9、REF crOther);/設(shè)置顏色 void SetTime(const CTime /時鐘半徑,14,軟件網(wǎng)絡(luò),CClockElement的實現(xiàn)的源文件關(guān)鍵代碼如下: CClockElement:CClockElement() m_nRadius = 0; m_crMain = RGB(255, 255, 255); m_crOther = RGB(128, 128, 128); CClockElement:CClockElement() void CClockElement:SetRegion(LPRECT lprcRect) m_rcRegion = lprcRect; m_nRadi
10、us = m_rcRegion.Width() / 2; if (m_rcRegion.Width() m_rcRegion.Height() m_nRadius = m_rcRegion.Height() / 2; ,15,軟件網(wǎng)絡(luò),續(xù)上頁: void CClockElement:SetTime(const CTime ,16,軟件網(wǎng)絡(luò),下面實現(xiàn)時鐘背景類CClockBackground。同樣,在ClassView的工程名上面點右鍵,選擇New Class,在ClassType里面選擇Genenric Class,類CClockBackground需要從類CClockElement派生,所以
11、Base Class需選擇類CClockElement,效果如下圖所示。,17,軟件網(wǎng)絡(luò),CClockBackground只需實現(xiàn)基類的虛函數(shù)Draw即可,因此這里重載基類的虛函數(shù)Draw,其頭文件實現(xiàn)代碼如下: #include ClockElement.h class CClockBackground : public CClockElement public: CClockBackground(); virtual CClockBackground(); ;,18,軟件網(wǎng)絡(luò),CClockBackground源文件代碼如下: CClockBackground:CClockBackgroun
12、d() /為時鐘背景定義默認(rèn)的顏色設(shè)置 m_crMain = RGB(0, 255, 0); m_crOther = RGB(0, 128, 0); CClockBackground:CClockBackground() void CClockBackground:Draw(CDC *pDC) /準(zhǔn)備設(shè)備環(huán)境 CPen penMain(PS_SOLID, 1, m_crMain), penOther(PS_SOLID, 1, m_crOther); CBrush brMain(m_crMain), brOther(m_crOther); CPen *pOldPen = pDC-SelectOb
13、ject(,19,軟件網(wǎng)絡(luò),CClockBackground源文件代碼如下(續(xù)上頁): /繪制60個小圓點,表示分針和秒針的刻度 CPoint ptCenter = m_rcRegion.CenterPoint(); int nRadius = m_nRadius - 8; for(int i=0; iEllipse(rcDot); /繪制12個小方框,表示12個正點 pDC-SelectObject( ,20,軟件網(wǎng)絡(luò),下面實現(xiàn)時針類CClockHourHand,該類新建的過程與CClockBackground一樣, CClockHourHand同樣只需實現(xiàn)基類的虛函數(shù)Draw即可,其頭文件
14、實現(xiàn)代碼如下: #include ClockElement.h class CClockHourHand : public CClockElement public: CClockHourHand(); virtual CClockHourHand(); virtual void Draw(CDC *pDC); ;,21,軟件網(wǎng)絡(luò),CClockHourHand源文件代碼如下: CClockHourHand:CClockHourHand() /定義默認(rèn)顏色 m_crMain = RGB(0, 255, 100); m_crOther = RGB(128, 128, 0); CClockHourH
15、and:CClockHourHand() void CClockHourHand:Draw(CDC *pDC) /初始化設(shè)備環(huán)境 CPen penMain(PS_SOLID, 1, m_crMain), penOther(PS_SOLID, 1, m_crOther); CBrush brMain(m_crMain), brOther(m_crOther); CPen *pOldPen = pDC-SelectObject(,22,軟件網(wǎng)絡(luò),CClockHourHand源文件代碼如下(續(xù)上頁): /確定繪制菱形指針?biāo)璧乃膫€角的坐標(biāo) CPoint ptDiamond4; for(int i=0
16、; i4; i+) ptDiamondi = m_rcRegion.CenterPoint(); int nRadus = m_nRadius / 2; ptDiamond0.Offset(int)(nRadus * sin(fRadian), (int)(- nRadus * cos(fRadian); fRadian += 0.5 * PI; nRadus = m_nRadius / 20; ptDiamond1.Offset(int)(nRadus * sin(fRadian), (int)(- nRadus * cos(fRadian); fRadian += 0.5 * PI; nR
17、adus = m_nRadius / 10; ptDiamond2.Offset(int)(nRadus * sin(fRadian), (int)(- nRadus * cos(fRadian); fRadian += 0.5 * PI; nRadus = m_nRadius / 20; ptDiamond3.Offset(int)(nRadus * sin(fRadian), (int)(- nRadus * cos(fRadian);,23,軟件網(wǎng)絡(luò),CClockHourHand源文件代碼如下(續(xù)上頁): /繪制菱形時針 pDC-Polygon(ptDiamond, 4); /恢復(fù)設(shè)備環(huán)
18、境 pDC-SelectObject(pOldPen); pDC-SelectObject(pOldBrush);,24,軟件網(wǎng)絡(luò),下面實現(xiàn)分針類CClockMinHand,該類新建的過程與CClockHourHand一樣,類的實現(xiàn)也基本相似,其頭文件實現(xiàn)代碼如下: #include ClockElement.h class CClockMinHand : public CClockElement public: CClockMinHand(); virtual CClockMinHand(); virtual void Draw(CDC *pDC); ;,25,軟件網(wǎng)絡(luò),CClockMinH
19、and源文件代碼如下: CClockMinHand:CClockMinHand() /定義默認(rèn)顏色 m_crMain = RGB(0, 255, 100); m_crOther = RGB(128, 128, 0); CClockMinHand:CClockMinHand() void CClockMinHand:Draw(CDC *pDC) /初始化設(shè)備環(huán)境 CPen penMain(PS_SOLID, 1, m_crMain), penOther(PS_SOLID, 1, m_crOther); CBrush brMain(m_crMain), brOther(m_crOther); CP
20、en *pOldPen = pDC-SelectObject(,26,軟件網(wǎng)絡(luò),CClockMinHand源文件代碼如下(續(xù)上頁): /確定繪制菱形指針?biāo)璧乃膫€角的坐標(biāo) CPoint ptDiamond4; for(int i=0; i4; i+) ptDiamondi = m_rcRegion.CenterPoint(); int nRadus = m_nRadius / 2; ptDiamond0.Offset(int)(nRadus * sin(fRadian), (int)(- nRadus * cos(fRadian); fRadian += 0.5 * PI; nRadus =
21、m_nRadius / 20; ptDiamond1.Offset(int)(nRadus * sin(fRadian), (int)(- nRadus * cos(fRadian); fRadian += 0.5 * PI; nRadus = m_nRadius / 10; ptDiamond2.Offset(int)(nRadus * sin(fRadian), (int)(- nRadus * cos(fRadian); fRadian += 0.5 * PI; nRadus = m_nRadius / 20; ptDiamond3.Offset(int)(nRadus * sin(fR
22、adian), (int)(- nRadus * cos(fRadian);,27,軟件網(wǎng)絡(luò),CClockMinHand源文件代碼如下(續(xù)上頁): /繪制菱形分針 pDC-Polygon(ptDiamond, 4); /恢復(fù)設(shè)備環(huán)境 pDC-SelectObject(pOldPen); pDC-SelectObject(pOldBrush);,28,軟件網(wǎng)絡(luò),下面實現(xiàn)秒針類CClockSecHand,該類新建的過程與CClockHourHand一樣,類的實現(xiàn)也基本相似,其頭文件實現(xiàn)代碼如下: #include ClockElement.h class CClockSecHand : publi
23、c CClockElement public: CClockSecHand(); virtual CClockSecHand(); virtual void Draw(CDC *pDC); ;,29,軟件網(wǎng)絡(luò),CClockSecHand源文件代碼如下: CClockSecHand:CClockSecHand() /設(shè)定秒針的默認(rèn)顏色 m_crMain = RGB(0, 200, 200); m_crOther = RGB(0, 200, 200); CClockSecHand:CClockSecHand() void CClockSecHand:Draw(CDC *pDC) int nTime
24、 = m_tmCur.GetSecond(); CPoint ptStart = m_rcRegion.CenterPoint(); CPoint ptEnd = ptStart; int nRadius = m_nRadius - 10; ptEnd.Offset(int)(nRadius * sin(2 * PI * nTime / 60), (int)(-nRadius * cos(2 * PI * nTime / 60); CPen penMain(PS_SOLID, 1, m_crMain); CPen *pOldPen = pDC-SelectObject( ,30,軟件網(wǎng)絡(luò),到目
25、前為止,時鐘的各個部件都已經(jīng)設(shè)計完畢,現(xiàn)在該把它們組裝起來了。 剛才建立的四個類CClockBackground、CClockHourHand、CClockMinHand、CClockSecHand要為CClockEx服務(wù),正如CClockElement為它們服務(wù)一樣,不過服務(wù)的方式發(fā)生了變化,剛才是以繼承的方式使用,現(xiàn)在需要將上面四個類實例化供CClockEx使用。因此,首先應(yīng)該在類CClockEx為上四個類分別建立對象。在CClockEx的頭文件中恰當(dāng)位置加入以下代碼: #include ClockBackground.h #include ClockHourHand.h #include
26、 ClockMinHand.h #include ClockSecHand.h class CClockEx : public CStatic private: CClockBackgroundm_clockBK;/時鐘背景 CClockHourHandm_clockHour;/時指針 CClockMinHandm_clockMin;/分指針 CClockSecHandm_clockSec;/秒指針,31,軟件網(wǎng)絡(luò),為了存儲繪圖區(qū)域的大小,需要在CClockEx中加入一個變量m_rcClient: CRect m_rcClient;/客戶區(qū)域 在PreSubclassWindow函數(shù)中進(jìn)行時鐘
27、的初始化工作。首先得為各個部件設(shè)定區(qū)域大小,然后啟動定時刷新的定時器(100毫秒的定時器已經(jīng)足夠)。由于每個部件都有自己的默認(rèn)顏色配置,因此這里暫且先使用默認(rèn)配置,當(dāng)然也可以自定義顏色: GetClientRect(m_rcClient); /獲取當(dāng)前客戶區(qū)域 m_clockBK.SetRegion(m_rcClient); m_clockHour.SetRegion(m_rcClient); m_clockMin.SetRegion(m_rcClient); m_clockSec.SetRegion(m_rcClient); SetTimer(1, 100, NULL); /每100毫秒刷新
28、一次,32,軟件網(wǎng)絡(luò),當(dāng)控件大小發(fā)生變化時,控件狀態(tài)要能夠自動更新: void CClockEx:OnSize(UINT nType, int cx, int cy) CStatic:OnSize(nType, cx, cy); GetClientRect(m_rcClient); m_clockBK.SetRegion(m_rcClient); m_clockHour.SetRegion(m_rcClient); m_clockMin.SetRegion(m_rcClient); m_clockSec.SetRegion(m_rcClient); 每個定時器時間觸發(fā)時,需要刷新控件以保證時鐘
29、的走動: void CClockEx:OnTimer(UINT nIDEvent) Invalidate(FALSE); CStatic:OnTimer(nIDEvent); ,33,軟件網(wǎng)絡(luò),下面實現(xiàn)時鐘的繪制,由于控件在不斷刷新,按一般方式繪圖,屏幕會不斷閃爍,因此此處使用雙緩沖繪圖就是在內(nèi)存中繪圖,繪制完畢時在Copy到屏幕上,這樣可以有效的防止屏幕閃爍: void CClockEx:OnPaint() CPaintDC dc(this); / device context for painting /實現(xiàn)雙緩沖繪圖防止屏幕閃爍 CDCdcMem; dcMem.CreateCompati
30、bleDC( ,34,軟件網(wǎng)絡(luò),為了程序結(jié)構(gòu)更清晰,我們將繪圖函數(shù)放在一個單獨的函數(shù)DrawClock中,下面室DrawClock的函數(shù)實現(xiàn): void CClockEx:DrawClock(CDC *pDC) CTime tmCur = CTime:GetCurrentTime(); m_clockBK.SetTime(tmCur); m_clockHour.SetTime(tmCur); m_clockMin.SetTime(tmCur); m_clockSec.SetTime(tmCur); m_clockBK.Draw(pDC); m_clockMin.Draw(pDC); m_clo
31、ckHour.Draw(pDC); m_clockSec.Draw(pDC); ,35,軟件網(wǎng)絡(luò),下面是完整的CClockEx源碼: #if !defined(AFX_CLOCKEX_H_EB35C434_A727_43BE_B10E_121F6307EA73_INCLUDED_) #define AFX_CLOCKEX_H_EB35C434_A727_43BE_B10E_121F6307EA73_INCLUDED_ #if _MSC_VER 1000 #pragma once #endif / _MSC_VER 1000 / ClockEx.h : header file / / / CCl
32、ockEx window #include ClockBackground.h #include ClockHourHand.h #include ClockMinHand.h #include ClockSecHand.h class CClockEx : public CStatic private: CRectm_rcClient;/客戶區(qū)域 CClockBackgroundm_clockBK;/時鐘背景 CClockHourHandm_clockHour;/時指針 CClockMinHandm_clockMin;/分指針 CClockSecHandm_clockSec;/秒指針 voi
33、d DrawClock(CDC *pDC); / Construction public: CClockEx();,36,軟件網(wǎng)絡(luò),下面是完整的CClockEx源碼(續(xù)上頁): / Attributes public: / Operations public: / Overrides / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CClockEx) protected: virtual void PreSubclassWindow(); /AFX_VIRTUAL / Implementation public:
34、virtual CClockEx(); / Generated message map functions protected: /AFX_MSG(CClockEx) afx_msg void OnPaint(); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnTimer(UINT nIDEvent); /AFX_MSG DECLARE_MESSAGE_MAP() ; / /AFX_INSERT_LOCATION / Microsoft Visual C+ will insert additional decla
35、rations immediately before the previous line. #endif / !defined(AFX_CLOCKEX_H_EB35C434_A727_43BE_B10E_121F6307EA73_INCLUDED_),37,軟件網(wǎng)絡(luò),下面是完整的CClockEx源碼(續(xù)上頁): / ClockEx.cpp : implementation file #include stdafx.h #include ClockProject.h #include ClockEx.h #ifdef _DEBUG #define new DEBUG_NEW #undef THI
36、S_FILE static char THIS_FILE = _FILE_; #endif / / CClockEx CClockEx:CClockEx() CClockEx:CClockEx() BEGIN_MESSAGE_MAP(CClockEx, CStatic) /AFX_MSG_MAP(CClockEx) ON_WM_SIZE() ON_WM_PAINT() ON_WM_TIMER() /AFX_MSG_MAP END_MESSAGE_MAP(),38,軟件網(wǎng)絡(luò),下面是完整的CClockEx源碼(續(xù)上頁): / / CClockEx message handlers void CClockEx:PreSubclassWindow() /獲取當(dāng)前客戶區(qū)域 GetClientRect(m_rcClient); m_clockBK.SetRegion(m_rcClient); m_clockHour.SetRegion(m_rcClient); m_
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保科技人才代理招聘與綠色發(fā)展協(xié)議
- 校企合作場地資源共享協(xié)議
- 車間承包與智能化生產(chǎn)線建設(shè)協(xié)議
- 2025年海洋科學(xué)與技術(shù)專業(yè)入學(xué)考核試卷及答案
- 2025年公共服務(wù)與社會工作考試試題及答案
- 2025年寫作與出版研究生入學(xué)考試題及答案
- 鋼筋工程施工工藝流程
- 公共交通樞紐地下車庫租賃合同范本
- 無人區(qū)礦產(chǎn)資源采礦權(quán)出讓及開發(fā)合同模板
- 公司房租費用管理制度
- 江蘇揚州中學(xué)2024-2025學(xué)年數(shù)學(xué)高二下期末經(jīng)典試題含解析
- 本科評估畢業(yè)5年學(xué)生的專業(yè)培養(yǎng)目標(biāo)達(dá)成情況分析
- 創(chuàng)新網(wǎng)絡(luò)中的溢出效應(yīng):生產(chǎn)網(wǎng)絡(luò)中的擴散機制
- 人工智能訓(xùn)練師4級模擬復(fù)習(xí)測試卷附答案
- 針對醫(yī)療行業(yè)工控系統(tǒng)的網(wǎng)絡(luò)安全防護(hù)策略研究報告
- 【公開課】巴西+課件-2024-2025學(xué)年七年級地理下學(xué)期人教版
- 2025年安全生產(chǎn)月主題培訓(xùn) (編號30)
- 溫州市普通高中2025屆高三第三次適應(yīng)性考試技術(shù)試題及答案
- 航空制造領(lǐng)域供應(yīng)商選擇與評價體系的優(yōu)化研究-以SDTG公司為例
- 毛細(xì)支氣管炎診斷及治療標(biāo)準(zhǔn)流程
- 大學(xué)化學(xué)重要實驗異常情況處理試題及答案
評論
0/150
提交評論