版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Windows系統(tǒng)開發(fā)主講教師:郭迎春guoyc計(jì)算機(jī)與信息工程學(xué)院驅(qū)動(dòng)程序開發(fā)DDK、WDK、DriverStudio、Windriver應(yīng)用軟件開發(fā)C/C:主流的開發(fā)工具為Visual C+,它以c語(yǔ)言為基礎(chǔ)。特點(diǎn):代碼執(zhí)行效率高Windows應(yīng)用軟件開發(fā)語(yǔ)言Java:適合開發(fā)基于Web的應(yīng)用程序Windows操作系統(tǒng)核心代碼采用Windows 運(yùn)行機(jī)制Windows 應(yīng)用程序Windows 操作系統(tǒng)輸入輸出設(shè)備驅(qū)動(dòng)輸出輸入注:應(yīng)用程序開發(fā)者通常不需要知道操作系統(tǒng)與硬件設(shè)備之間交互的具體細(xì)節(jié),我們要關(guān)心的是應(yīng)用程序與操作系統(tǒng)之間的交互關(guān)系Windows 運(yùn)行機(jī)制Windows 應(yīng)用程序Wi
2、ndows 操作系統(tǒng)輸入輸出設(shè)備函數(shù)消息注:操作系統(tǒng)所能夠完成的每一個(gè)功能都有一個(gè)函數(shù)與其對(duì)應(yīng),也就是說(shuō),操作系統(tǒng)把它能夠完成的功能以函數(shù)的形式提供給應(yīng)用程序使用,這些函數(shù)的集合就是Windows操作系統(tǒng)提供給應(yīng)用程序的編程接口(Application Programming Interface),簡(jiǎn)稱Windows API。例如:CreateWindow():創(chuàng)建一個(gè)窗口 應(yīng)用程序 操作系統(tǒng)調(diào)用函數(shù)實(shí)現(xiàn)創(chuàng)建窗口的功能消息:報(bào)告有關(guān)事件發(fā)生的通知,是一種數(shù)據(jù)結(jié)構(gòu)例如:鼠標(biāo)單擊窗口鼠標(biāo)單擊事件發(fā)生windows操作系統(tǒng)獲取到這一事件,并將事件以消息的形式傳遞給應(yīng)用程序應(yīng)用程序獲取消息,并調(diào)用響應(yīng)
3、函數(shù)處理消息Windows程序設(shè)計(jì)的核心就是消息的傳遞和處理幫助文檔:msdn資料:孫鑫vc+視頻教學(xué)VC技術(shù)內(nèi)幕(可做參考)Visual C+開發(fā)環(huán)境1MFC應(yīng)用程序框架2基本事件處理3映射模式和滾動(dòng)視圖4MFC資源5ActiveX控件6動(dòng)態(tài)鏈接庫(kù)(DLL)7多線程編程8文檔與視圖9數(shù)據(jù)庫(kù)編程10Visual C+的編程方式1SDK:Software Development Kit,傳統(tǒng)編程法,采用windows API函數(shù)進(jìn)行編程。2MFC:Microsoft Foundation Class,交互式的編程法,對(duì)API函數(shù)進(jìn)行了封裝,包含許多類。1、Visual C+開發(fā)環(huán)境File Ne
4、wFile New2、MFC應(yīng)用程序框架File New Projects MFC AppWizard(exe) 使用MFC應(yīng)用程序生成向?qū)?chuàng)建Hello World程序應(yīng)用程序類型1單文檔多文檔對(duì)話框文檔/視圖結(jié)構(gòu)體系支持:即是否支持文檔/視圖結(jié)構(gòu)數(shù)據(jù)庫(kù)支持2否:不支持標(biāo)題文件:不支持,但預(yù)留接口查看數(shù)據(jù)庫(kù)不使用文件支持:支持查看數(shù)據(jù)庫(kù)使用文件支持:支持對(duì)復(fù)合文檔類型和ActiveX的支持3注:復(fù)合文檔是OLE(Object Linking and Embedding )的一項(xiàng)技術(shù)沒(méi)有,不需要容器:例如,在Word中運(yùn)行Excel程序,Word相對(duì)與Excel就是容器微型服務(wù)器:例如,在Ex
5、cel中的一些資源,其它程序可以調(diào)用,Excel就是服務(wù)器完整服務(wù)器容器和服務(wù)器自動(dòng):例如在Word和Excel中都支持VB,可以在Word和Excel中用VB(確切的說(shuō)叫VBA)編程,而VC則不支持,要使VC支持,則要選中自動(dòng)ActiveX:第三方控件,與開發(fā)平臺(tái)無(wú)關(guān)選中相關(guān)項(xiàng)后,在左端會(huì)有圖例顯示程序的外觀4風(fēng)格、備注、及MFC庫(kù)的支持5風(fēng)格源代碼備注:例提示客戶代碼的書寫位置作為共享的DLL:運(yùn)行時(shí)才添加mfc庫(kù)缺點(diǎn):在沒(méi)有安裝VC的機(jī)器上不能運(yùn)行解決辦法:將vc下相關(guān)的DLL文件拷貝到Windows文件夾中作為靜態(tài)的DLL:編譯時(shí)所有用到的庫(kù)都被鏈接。缺點(diǎn):程序較大自動(dòng)生成相關(guān)的類6C
6、helloView:視類,可選擇基類,用來(lái)顯示文檔數(shù)據(jù)并和用戶交互如果在第五步中選擇MFC風(fēng)格,則基類為CView類,若選擇資源管理器風(fēng)格,則為CListView類例如,設(shè)計(jì)字處理軟件,則要選擇CEditView類ChelloDoc:文檔類,用于管理文檔數(shù)據(jù)CMainFrame:框架類,用來(lái)產(chǎn)生應(yīng)用程序的主框架窗口ChelloApp:應(yīng)用程序類,用來(lái)管理應(yīng)用程序?qū)嵗?,放入口函?shù)在vc中將數(shù)據(jù)顯示和數(shù)據(jù)本身分開文檔:數(shù)據(jù),CDocument作用:數(shù)據(jù)存儲(chǔ),加載等視圖:顯示,CView作用:數(shù)據(jù)顯示,修改等VC+的項(xiàng)目工作區(qū)窗口ClassViewResourceViewFileView運(yùn)行運(yùn)行VC
7、工程文件夾下的文件Debug:exe文件所在的位置Res:資源文件夾和:包含CExamApp類hello和hellohello和hello和:標(biāo)準(zhǔn)的全局函數(shù)定義關(guān)鍵代碼說(shuō)明: CHelloView類的定義PrivateProtectedPublic定義變量定義函數(shù)GetDocument()#include “”構(gòu)造函數(shù):變量初始化析構(gòu)函數(shù)PreCreateWindow():在窗口創(chuàng)建之前要做的工作OnDraw(CDC* pDC)CExamDoc* pDoc = GetDocument();獲取文檔的地址放在pDoc中,要使用文檔中的數(shù)據(jù)則可以使用pDoc例如,文檔中的x,則使用pDocx獲取值
8、ASSERT_VALID(pDoc);宏定義,確保上條語(yǔ)句的結(jié)果有效CDCDC:Device Context,即設(shè)備上下文或設(shè)備描述表或設(shè)備環(huán)境引入原因: Windows不容許用戶直接操作硬件,所以定義了一個(gè)抽象層DC,所有與繪圖或顯示相關(guān)操作封裝在CDC類中,要訪問(wèn)顯示設(shè)備就必須使用CDC類中提供的函數(shù)應(yīng)用程序DC硬件設(shè)備例如:顯示器、打印機(jī)等顯示設(shè)備GDI(圖形設(shè)備接口,進(jìn)行繪圖工作)DeviceContext繪圖工具畫筆畫刷字體位圖調(diào)色板CDC* pDCCDC:封裝了所有的繪制和打印函數(shù)pDC為指向CDC類的指針,可以使用pDC訪問(wèn)CDC類中的函數(shù)(pDC-) OnDraw函數(shù)被調(diào)用的情
9、況:程序運(yùn)行后自動(dòng)調(diào)用窗口重繪之后,例如窗口的大小被改變、窗口被覆蓋Hello World程序void CHelloView:OnDraw(CDC* pDC)CHelloDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data herepDC-TextOut( 0,0,hello world);起始點(diǎn)坐標(biāo)常用繪圖函數(shù)畫點(diǎn): SetPixel( int x1, int y1 , COLORREF crColor );繪制線: MoveTo( int x1, int y1 ); LineTo
10、( int x2, int y2 );繪制矩形: Rectangle ( int x1, int y1, int x2, int y2 );繪制橢圓: Ellipse( int x1, int y1, int x2, int y2 );例:pDC-Ellipse(0,200,100,120);常用繪圖工具畫筆:負(fù)責(zé)繪制直線和曲線的工具畫刷:負(fù)責(zé)填充圖形的工具繪圖的一般過(guò)程:創(chuàng)建或取得設(shè)備環(huán)境(DC)創(chuàng)建繪圖工具(畫筆、畫刷等)(否則采用默認(rèn)的繪圖工具)將繪圖工具選入設(shè)備環(huán)境繪制圖形釋放獲得的設(shè)備環(huán)境創(chuàng)建和載入繪圖工具庫(kù)存對(duì)象(StockObject)(基本工具)畫筆 BLACK_PEN Bla
11、ck pen(默認(rèn)) NULL_PEN Null pen WHITE_PEN White pen 畫刷BLACK_BRUSH Black brushDKGRAY_BRUSH Dark gray brushGRAY_BRUSH Gray brushHOLLOW_BRUSH Hollow brushLTGRAY_BRUSH Light gray brushNULL_BRUSH Null brushWHITE_BRUSH White brush 載入庫(kù)存對(duì)象SelectStockObject(int nIndex );例如:pDC-SelectStockObject(WHITE_PEN);例如:pD
12、C-SelectStockObject(GRAY_BRUSH);自定義對(duì)象自定義畫筆自定義畫刷自定義畫筆 CPen( int nPenStyle, int nWidth, COLORREF crColor ); 常用的畫筆樣式: PS_SOLID PS_DASH PS_DOT PS_DASHDOT 顏色: RGB(nRed, nGreen,nBlue) 紅色值藍(lán)色值綠色值RGB(255, 0, 0)RGB(0, 255, 0)RGB(0, 0, 255)例:CPen pen(PS_DOT,1,RGB(255,0,0);自定義畫刷CBrush(int nIndex, COLORREF crCol
13、or );畫刷的樣式(nIndex): HS_BDIAGONALDownward hatch at 45 degrees HS_CROSSHorizontal and vertical crosshatch HS_DIAGCROSSCrosshatch at 45 degrees HS_FDIAGONALUpward hatch at 45 degrees HS_HORIZONTALHorizontal hatch HS_VERTICALVertical hatch 例如:CBrush brush(HS_CROSS,RGB(0,0,255);可省,默認(rèn)為實(shí)心載入自定義對(duì)象SelectObjec
14、t(CPen* pPen );例如:CPen pen(PS_DOT,1,RGB(255,0,0);pDC-SelectObject(&pen);SelectObject(CBrush* pBrush);例如:CBrush brush(HS_CROSS,RGB(0,0,255);pDC-SelectObject(&brush);非1時(shí)會(huì)出現(xiàn)什么情況?練習(xí)輸出如下圖形:void CHelloView:OnDraw(CDC* pDC)pDC-TextOut(200,50,基本圖形);CPen pen1(PS_DOT,1,RGB(255,0,0);pDC-SelectObject(pen1);pDC-
15、MoveTo(30,100); pDC-LineTo(200,100);CPen pen2(PS_DOT,3,RGB(255,0,0);pDC-SelectObject(pen2);pDC-Rectangle(300,100,400,200);pDC-SelectStockObject(GRAY_BRUSH);pDC-Ellipse(300,100,400,200);CBrush brush(HS_CROSS,RGB(0,0,255);pDC-SelectObject(&brush); pDC-Ellipse(450,100,600,200);文本設(shè)置文本的顏色SetTextColor(COL
16、ORREF nColor);設(shè)置文本背景的顏色SetBkColor(COLORREF nColor);例如:pDC-SetTextColor(RGB(0,255,0);pDC-SetBkColor(RGB(255,255,0);pDC-TextOut(10,10,hello world);3、基本事件處理鼠標(biāo)事件:?jiǎn)螕綦p擊移動(dòng)添加消息響應(yīng)函數(shù): (1) View ClassWizard (2)類上點(diǎn)右鍵 添加windows消息常用鼠標(biāo)消息:WM_LBUTTONDOWN左鍵按下WM_LBUTTONUP左鍵釋放WM_LBUTTONDBLCLK左鍵雙擊WM_RBUTTONDOWN右鍵按下WM_RBU
17、TTONUP右鍵釋放WM_RBUTTONDBLCLK右鍵雙擊WM_MOUSEMOVE鼠標(biāo)移動(dòng)例1、按下鼠標(biāo)左鍵時(shí)繪制灰色橢圓添加左鍵按下的消息響應(yīng)函數(shù) View ClassWizard WM_LBUTTONDOWN方法一:void CHelloView:OnLButtonDown(UINT nFlags, CPoint point) CDC *pDC=GetDC(); pDC-SelectStockObject(GRAY_BRUSH);pDC-Ellipse(100,100,300,200); ReleaseDC(pDC);方法二: CClientDC dc(this); dc.SelectS
18、tockObject(GRAY_BRUSH); dc. Ellipse(100,100,300,200);CClientDC:派生于CDC類,在其構(gòu)造函數(shù)中調(diào)用 了GetDC()函數(shù),因此在代碼中不需顯 式的調(diào)用,常用的方法。在調(diào)用函數(shù)時(shí)使用 . 和 - 的區(qū)別例2、單擊橢圓使其在灰色與白色之間變化void CHelloView:OnLButtonDown(UINT nFlags, CPoint point) CClientDC dc(this); dc.SelectStockObject(GRAY_BRUSH); dc. Ellipse(100,100,300,200);分析:如果當(dāng)前的畫刷
19、為GRAY_BRUSH,則單擊之后使其變 為WHITE_BRUSH,反之。解決辦法:定義變量m_ncolor設(shè)置顏色值程序改進(jìn):1、在文件中定義變量 private: int m_ncolor;2、在文件構(gòu)造函數(shù)中初始化變量m_ncolor=GRAY_BRUSH;程序改進(jìn):3、在OnLButtonDown函數(shù)中添加代碼判斷: if(m_ncolor=GRAY_BRUSH) m_ncolor=WHITE_BRUSH;else m_ncolor=GRAY_BRUSH;繪制橢圓 CClientDC dc(this); dc.SelectStockObject(m_ncolor); dc. Ellip
20、se(100,100,300,200); 當(dāng)點(diǎn)擊最大化按鈕時(shí)為什么橢圓消失?OnDraw函數(shù)被調(diào)用的情況:程序運(yùn)行后自動(dòng)調(diào)用窗口重繪之后,例如大小被改變、窗口被覆蓋解決辦法:在OnDraw函數(shù)中使用當(dāng)前畫刷重繪橢圓代碼: pDC-SelectStockObject(m_ncolor); pDC-Ellipse(100,100,300,200);Invalidate();CClientDC dc(this);dc.SelectStockObject(m_ncolor);dc. Ellipse(100,100,300,200);注: 為了增加程序的可讀性,以及便于維護(hù)或修改,可以將用到的參數(shù)值用變
21、量代替1、定義 CRect rectellipse;2、初始化 rectellipse=CRect(100,100,300,200);3、繪制 pDC-Ellipse(rectellipse);OnLButtonDown(UINT nFlags, CPoint point)參數(shù)nFlags:鼠標(biāo)狀態(tài),通常與如下參數(shù)配合使用point :鼠標(biāo)按下點(diǎn)的位置坐標(biāo),包含兩個(gè)參數(shù)例3:只在橢圓內(nèi)部點(diǎn)擊時(shí)變色,其它位置不變色CRect:PtInRect( POINT point ) 應(yīng)用:if(rectellipse.PtInRect(point) . 練習(xí)1使用透明畫刷手動(dòng)繪制矩形bool draw;C
22、Point m_left;CHelloView:CHelloView()draw=FALSE;m_left=0;void CHelloView:OnLButtonDown(UINT nFlags, CPoint point) draw=TRUE;m_left=point;void CHelloView:OnLButtonUp(UINT nFlags, CPoint point) if(draw=TRUE) CClientDC dc(this); dc.SelectStockObject(HOLLOW_BRUSH); ); draw=FALSE;練習(xí)2在窗口上按下鼠標(biāo)左鍵拖動(dòng)時(shí)輸出如下圖形分析:
23、 問(wèn)題涉及到三種消息處理:左鍵按下:確定原點(diǎn),開始繪制鼠標(biāo)移動(dòng):繪制圖形左鍵松開:停止繪圖bool draw;CPoint m_old,m_origin;CHelloView:CHelloView() draw=FALSE;m_old=0;m_origin=0;void CHelloView:OnLButtonDown(UINT nFlags, CPoint point) draw=TRUE;m_old=point;m_origin=point;void CHelloView:OnMouseMove(UINT nFlags, CPoint point) CClientDC dc(this);i
24、f(draw=TRUE)dc.MoveTo(m_origin);dc.LineTo(m_old);dc.MoveTo(m_old);dc.LineTo(point);m_old=point;void CHelloView:OnLButtonUp(UINT nFlags, CPoint point) draw=FALSE;鍵盤事件WM_KEYDOWNWM_KEYUPWM_CHAR擊鍵與消息的關(guān)系 擊鍵方式消息次序wParam參數(shù)按下“A”鍵然后釋放WM_KEYDOWN虛擬鍵AWM_CHARA的ASCII碼WM_KEYUP虛擬鍵A先按Shift鍵,再按A鍵WM_KEYDOWN虛擬鍵VK_SHIFT
25、然后釋放A鍵,最后釋放WM_KEYDOWN虛擬鍵AShift鍵WM_CHARA的ASCII碼WM_KEYUP虛擬鍵AWM_KEYUP虛擬鍵VK_SHIFT按下A鍵持續(xù)一端時(shí)間WM_KEYDOWN虛擬鍵AWM_CHARA的ASCII碼WM_KEYDOWN虛擬鍵AWM_CHARA的ASCII碼WM_KEYDOWN虛擬鍵AWM_CHARA的ASCII碼WM_KEYUP虛擬鍵A區(qū)別:WM_KEYDOWN:可以識(shí)別鍵盤上的大多數(shù)按鍵,但不能區(qū)分大小寫字母,以及數(shù)字和特殊符號(hào),只能大寫字母和數(shù)字WM_CHAR:只能識(shí)別鍵盤上的字符鍵和部分控制鍵,但可以區(qū)分大小寫字母和shift+數(shù)字鍵例:輸出可移動(dòng)的字符
26、1、新建單文檔程序MoveChar2、定義變量: CString m_string; /存放用戶輸入的字符 int y; int x;3、在構(gòu)造函數(shù)中對(duì)變量進(jìn)行初始化 x=50; y=50; m_string=;4、在ClassWizard中添加WM_CHAR和WM_KEYDOWN消息映射5、在OnChar函數(shù)中添加代碼: m_string+=nChar; Invalidate();6、在OnDraw函數(shù)中添加代碼: pDC-TextOut(x,y,m_string);7、在OnKeyDown函數(shù)中添加代碼:switch(nChar)case VK_LEFT:x-;break;case VK_
27、RIGHT:x+;break;case VK_UP:y-;break;case VK_DOWN:y+;Invalidate();常用的虛擬鍵代碼 符號(hào)常量對(duì)應(yīng)按鍵符號(hào)常量對(duì)應(yīng)按鍵VK_LBUTTON鼠標(biāo)左鍵VK_0VK_90鍵-9鍵VK_RBUTTON鼠標(biāo)右鍵VK_AVK_ZA鍵到Z鍵VK_BACK退格鍵(BACKSPACE鍵)VK_NUMPAD09數(shù)字小鍵盤0-9鍵VK_RETURN回車鍵(Enter)VK_MULTIPY乘號(hào)鍵VK_SHIFTShift鍵VK_ADD加號(hào)鍵VK_CAPITALCapsLock鍵VK_SUBTRACT減號(hào)鍵VK_ESCAPEEsc鍵VK_F1VK_F24F1鍵
28、到F24鍵VK_SPACESpaceBar鍵VK_NUMLOCKNum Lock鍵VK_PRIORPageUp鍵VK_TAB制表鍵(Tab)VK_NEXTPageDown鍵VK_PAUSEPause鍵VK_ENDEnd鍵VK_INSERTIns鍵VK_HOMEHome鍵VK_DELETEDel鍵VK_LEFTLeft Arrow()鍵VK_DOWNDown Arrow()鍵定時(shí)器消息WM_TIMERWindows定時(shí)器是一種周期性的消息產(chǎn)生裝置,它會(huì)每隔一段指定時(shí)間發(fā)送一次定時(shí)消息WM_TIMER。它是一個(gè)很重要的系統(tǒng)消息,當(dāng)系統(tǒng)所設(shè)置的時(shí)間到達(dá)以后,系統(tǒng)就會(huì)自動(dòng)發(fā)送該消息。與該消息聯(lián)系密切的
29、一個(gè)函數(shù)是SetTimer(),它設(shè)置一個(gè)系統(tǒng)時(shí)鐘,當(dāng)設(shè)置的時(shí)間到時(shí),系統(tǒng)產(chǎn)生WM_TIMER消息。通過(guò)對(duì)SetTimer()函數(shù)的參數(shù)進(jìn)行設(shè)置,告訴用戶哪一個(gè)時(shí)鐘的時(shí)間到了,因此,可以將一些周期性的工作放入WM_TIMER的消息處理函數(shù) 定時(shí)器的使用一般遵循下列步驟:SetTimer()函數(shù)設(shè)置定時(shí)器2.超載OnTimer()函數(shù),完成用戶希望的操作KillTimer(). 例:利用定時(shí)器消息實(shí)現(xiàn)一個(gè)滾動(dòng)的字幕,即程序運(yùn)行后,在屏幕的中央顯示一行文本“我愛(ài)VC+編程”,該字幕從屏幕循環(huán)地從屏幕的左邊滾動(dòng)到右邊,當(dāng)字母超出屏幕右邊界時(shí),字母又從屏幕的左邊出現(xiàn)。在windows中,圖形的顯示:默
30、認(rèn)情況下,窗口原點(diǎn)和視口原點(diǎn)都在左上角(0,0)位置默認(rèn)情況下,窗口和視口完全一致,單位為像素4、映射模式和滾動(dòng)視圖圖形繪制函數(shù)窗口視口xy(100,100)xy(100,100)改變窗口和視口原點(diǎn)函數(shù):SetWindowOrg(int x,int y)SetViewportOrg (int x,int y)無(wú)論窗口原點(diǎn)和視口原點(diǎn)怎么變化,窗口原點(diǎn)總是映射到視口原點(diǎn)上注:繪制函數(shù)中的坐標(biāo)點(diǎn)為窗口中的坐標(biāo)例如:觀察運(yùn)行結(jié)果pDC-Rectangle(CRect(100,100,300,300);添加代碼: pDC-SetWindowOrg(CPoint(100,100); pDC-Rectang
31、le(CRect(100,100,300,300);添加代碼:pDC-SetViewportOrg(100,100);pDC-SelectStockObject(GRAY_BRUSH);pDC-Rectangle(CRect(100,100,300,300);坐標(biāo)系:繪圖時(shí)需要一個(gè)參照坐標(biāo)系,以確定圖形或文本的輸出位置 例如:pDC-(100,100,”hello world!”)圖形設(shè)備接口支持兩種坐標(biāo)系統(tǒng): 邏輯坐標(biāo) 窗口 設(shè)備坐標(biāo) 視口注:通常,文本或圖形輸出函數(shù)使用的是邏輯坐標(biāo),而在客戶區(qū)點(diǎn)擊或移動(dòng)鼠標(biāo)所得到的是設(shè)備坐標(biāo)引例:pDC-Rectangle(0,0,200,200)函數(shù)繪制
32、了200200矩形,默認(rèn)單位為像素,當(dāng)顯示到屏幕上時(shí),根據(jù)顯示器的分辨率設(shè)置不同,其大小也是不同的問(wèn)題:如果要顯示2cm*2cm的舉行,而與顯示器的分辨率無(wú)關(guān),則需要用到映射模式。映射模式:簡(jiǎn)單的說(shuō)就是定義邏輯坐標(biāo)的邏輯單位大小和增長(zhǎng)方向映射方式邏輯單位方向MM_TEXT一個(gè)像素,默認(rèn)MM_LOENGLISH0.01英寸MM_HIENGLISH0.001英寸MM_LOMETRIC0.1mmMM_HIMETRIC0.01mmMM_ISOTROPIC系統(tǒng)確定X,y可調(diào),1:1MM_ANISOTROPIC系統(tǒng)確定 X,y可調(diào),比例任意注:窗口的單位有多種:像素、英寸、毫米視口只有一種:像素改變映射模
33、式的函數(shù):SetMapMode( )例如:pDC-SetMapMode(MM_HIMETRIC);/設(shè)定映射模式為MM_HIMETRICpDC-Rectangle(CRect(0,0,2000,-2000);/畫一個(gè)寬和高為2厘米的方塊在上述代碼中添加如下語(yǔ)句,運(yùn)行,查看顯示結(jié)果:pDC-SetViewportOrg(CPoint(100,100);縮放可變的映射模式:MMISOTROPIC 縱橫比始終是1:1,即:當(dāng)縮放因子改變時(shí),一個(gè)圓始終是一個(gè)圓。MMANISOTROPIC:縮放因子可以分別改變,較常用注:原點(diǎn)位于窗口左上角,縮放因子:x的縮放因子視口的x大小 / 窗口的x大小 y的縮放
34、因子視口的y大小 / 窗口的y大小例、畫一個(gè)撐滿窗口的橢圓CRect rectClient;GetClientRect(rectClient);pDC-SetMapMode(MM_ANISOTROPIC);pDC-SetWindowExt(CSize(1000,1000);pDC-);pDC-SetViewportOrg(rectClient.right/2, rectClient.bottom/2);pDC-Ellipse(-500,-500,500,500);GetClientRect:獲取客戶區(qū)域的矩形尺寸(即窗口中的白色部分)SetWindowExt:設(shè)置窗口的范圍,將第二個(gè)參數(shù)取負(fù)后
35、可得到正向朝上的y軸SetViewportExt:設(shè)置視口的范圍,此例中將其設(shè)置為和客戶區(qū)域大小相同SetViewportOrg:設(shè)置視口原點(diǎn),此例中設(shè)置為客戶區(qū)的中心點(diǎn)為視口的原點(diǎn)運(yùn)行當(dāng)窗口的大小改變時(shí),橢圓的大小也隨之改變,并始終撐滿整個(gè)窗口將上述代碼中:pDC-SetWindowExt(CSize(1000,1000);修改為:pDC-SetWindowExt(CSize(800,800);由上例得到的啟發(fā):假如制作一個(gè)人走近城門的動(dòng)畫,越走近城門越大,只需將窗口的尺寸逐漸變小即可,而不需要設(shè)置一系列城門逐漸放大的圖片將上述代碼中:pDC-SetViewportOrg(rectClien
36、t.right/2, rectClient.bottom/2);pDC-Ellipse(-500,-500,500,500);修改為: pDC-, ); pDC-Ellipse(0,0,1000,1000);滾動(dòng)視圖例1、新建MFC工程文件名為Exam2 SDI 選擇view基類為CScrollView2、運(yùn)行:默認(rèn)情況無(wú)滾動(dòng)條,需要進(jìn)行設(shè)置3、打開文件新增的函數(shù):OnInitialUpdate,只有選擇CScrollView作為基類才有此函數(shù)CSize:尺寸類,一個(gè)橫向,一個(gè)縱向sizeTotal. cxsizeTotal. cy = = 100;通過(guò)此語(yǔ)句將橫向和縱向尺寸都設(shè)置為100,因
37、此在此時(shí)運(yùn)行程序不會(huì)出現(xiàn)滾動(dòng)條4、將下述語(yǔ)句刪除,重新設(shè)置CSize sizeTotal; = = 100;SetScrollSizes(MM_TEXT, sizeTotal);5、在OnInitialUpdate函數(shù)中添加代碼如下CSize SizeTotal(10000,30000);CSize SizePage(SizeTotal.cx/2,SizeTotal.cy/2);CSize SizeLine(SizeTotal.cx/50,SizeTotal.cy/50);SetScrollSizes(MM_HIMETRIC,SizeTotal,SizePage,SizeLine);注:Siz
38、ePage為設(shè)置頁(yè)的對(duì)象,除以2,即表示將窗口分為兩頁(yè)注:SizeLine為設(shè)置行的對(duì)象,除以50,即表示設(shè)置為50行6、運(yùn)行7、打開文件申明變量CRect m_rectEllipse;int m_nColor;8、在構(gòu)造函數(shù)中對(duì)變量進(jìn)行初始化 m_rectEllipse=CRect(0,0,4000,-4000);注:產(chǎn)生44cm的矩形m_nColor=GRAY_BRUSH;9、在OnDraw函數(shù)中添加代碼:pDC-SelectStockObject(GRAY_BRUSH);pDC-Ellipse(m_rectEllipse);例:繪制一個(gè)橢圓,使用鼠標(biāo)拖動(dòng)使橢圓位置可以改變分析:拖動(dòng)橢圓時(shí)
39、,實(shí)際是將現(xiàn)有橢圓擦出,在移動(dòng)到的位置再繪制相同的橢圓橢圓位于矩形內(nèi),因此確定了左上角和右下角坐標(biāo),則長(zhǎng)和寬就可確定,在拖動(dòng)鼠標(biāo)的過(guò)程中橢圓的長(zhǎng)寬不變?cè)陂_始移動(dòng)時(shí),鼠標(biāo)按下的位置可以確定在橢圓移動(dòng)的過(guò)程中,鼠標(biāo)的位置相對(duì)于左上角的坐標(biāo)不變,即鼠標(biāo)在橢圓內(nèi)的位置確定因此,涉及到的消息:OnLButtonDownOnMouseMoveOnLButtonUp配合OnDraw函數(shù)步驟一新建工程drag,選擇CScrollView類打開文件,定義私有變量Const CSize m_sizeellipse;/在移動(dòng)的過(guò)程中橢圓的大小不能改變,因此要定義為常量CPoint m_pointtopleft;/左
40、上角坐標(biāo)CSize m_sizeoffset;/左上角相對(duì)鼠標(biāo)按下位置的偏移量BOOL m_bcapture;/判斷是否需要捕獲鼠標(biāo)消息步驟二打開文件進(jìn)行消息映射,ClassWizardView類WM_LBUTTONDOWNWM_LBUTTONUPWM_MOUSEMOVE點(diǎn)擊OK或Edit,添加消息處理函數(shù)/所有的消息處理函數(shù)都以O(shè)N開頭步驟三制作滾動(dòng)視圖找到OninitalUpdate函數(shù),將其中的內(nèi)容刪除或注釋掉添加代碼:CSize SizeTotal(10000,30000);CSize SizePage(SizeTotal.cx/2,SizeTotal.cy/2);CSize Size
41、Line(SizeTotal.cx/50,sizeTotal.cy/50);SetScrollSizes(MM_HIMETRIC,SizeTotal,SizePage,SizeLine);運(yùn)行自定義的變量步驟四在構(gòu)造函數(shù)中初始化Cdragview:m_sizeellipse(100,-100),m_pointtopleft(0,0),m_sizeoffset(0,0)M_bcapture=False;步驟五鼠標(biāo)左鍵按下時(shí),首先獲取橢圓的精確位置,判斷是否在橢圓內(nèi),如果是,則要記錄鼠標(biāo)相對(duì)偏移量相對(duì)偏移量=鼠標(biāo)按下位置的x和y坐標(biāo)減去矩形左上角的x和y坐標(biāo)設(shè)備坐標(biāo)邏輯坐標(biāo)邏輯坐標(biāo)和設(shè)備坐標(biāo)pDC
42、-Ellipse(CRect(0,0,200,200)而鼠標(biāo)按下時(shí)的坐標(biāo),例point(50,50)是設(shè)備坐標(biāo),因此需要轉(zhuǎn)換到同一坐標(biāo)下邏輯坐標(biāo)在OnLButtonDown函數(shù)中添加代碼:CRect rectellipse(m_pointtopleft,m_sizeellipse);/CRect構(gòu)造函數(shù)有多種寫法CRgn circle;/CRgn為區(qū)域類,通過(guò)它的函數(shù)可獲的橢圓精確位置解決前面橢圓變色程序中的bugCClientDC dc(this);OnPrepareDC(&dc);dc.LPtoDP(&rectellipse);/邏輯坐標(biāo)轉(zhuǎn)換到設(shè)備坐標(biāo)Circle.CreateEllipt
43、icRgnIndirect(rectellipse);/獲取橢圓區(qū)域If(circle.PtInRegion(point)SetCapture(); /強(qiáng)制捕獲消息m_bcapture=TRUE;CPoint pointTopLeft(m_pointtopleft);dc.LPtoDP(&pointTopLeft);m_sizeoffset=point-pointTopLeft;:SetCursor(:LoadCursor(NULL,IDC_CROSS);說(shuō)明CPoint pointTopLeft(m_pointtopleft);相當(dāng)于:CPoint pointTopLeft;pointTop
44、Left=m_pointtopleft;總結(jié):鼠標(biāo)按下時(shí)的工作:獲取橢圓精確坐標(biāo)判斷鼠標(biāo)是否在橢圓內(nèi)獲取位移步驟六在OnLButtonUP函數(shù)內(nèi)添加代碼:If(m_bcapture)ReleaseCapture();M_bcapture=FALSE;步驟七(關(guān)鍵部分)在OnMouseMove函數(shù)中添加代碼:If(m_bcapture)CClientDC dc(this);OnPrepareDC(&dc);CRect rectold(m_pointtopleft,m_sizeoffset);/定義變量保存原始矩形的位置dc.LPtoDP(&rectold);InvalidateRect(rect
45、old,TRUE)/矩形重繪,TRUE使矩形重繪后即刪除,不再屏幕停留/另一種方法是用白色畫筆再畫一次m_pointtopleft=point-m_sizeoffset;dc.DPtoLP(&m_pointtopleft);/繪制矩形是在邏輯坐標(biāo)中CRect rectNew(m_pointtopleft,m_sizeellipse);dc.LPtoDP(&rectNew);InvalidateRect(rectNew,TRUE);/因?yàn)椴粩嘁苿?dòng),所以只繪制一下,并不停留步驟八在OnDraw函數(shù)中添加代碼:CBrush brush(HS_DIAGCROSS,RGB(255,0,0);CPoint
46、 point(0,0);pDC-SetBrushOrg(point);/若自己定義刷子最好添加上述兩句,系統(tǒng)自動(dòng)矯正原點(diǎn),保證格子不亂pDC-SelectObject(&brush);pDC-Ellipse(CRect(m_pointtopleft,m_sizeellipse));5 MFC資源菜單對(duì)話框位圖工具欄菜單類型:主菜單例如:File、Edit等彈出菜單選擇主菜單或一個(gè)菜單項(xiàng)時(shí)彈出的子菜單快捷菜單右擊某個(gè)界面對(duì)象時(shí),會(huì)彈出快捷菜單例:創(chuàng)建如下菜單,控制字符串的顯示ID_OPER_REDID_OPER_GREENID_OPER_BLUEID_OPER_SHOWHello World!注
47、: 定義熱鍵:在字符前加& 定義快捷鍵:Ctrl+字符 t:表示快捷鍵居右顯示1、定義變量COLORREF m_color; /保存當(dāng)前顏色值CString m_str; /保存輸出字符串BOOL m_show; /判斷是否顯示2、變量初始化 m_color=RGB(0,0,0);m_str=hello world;m_show=FALSE;3、通過(guò)ClassWizard為各菜單項(xiàng)添加消息映射4、在消息映射函數(shù)中添加代碼:void CResView:OnOperShow() if(m_show=TRUE)m_show=FALSE;elsem_show=TRUE;Invalidate();voi
48、d CResView:OnOperBlue() m_color=RGB(0,0,255);Invalidate();void CResView:OnOperGreen() m_color=RGB(0,255,0);Invalidate();void CResView:OnOperRed() m_color=RGB(255,0,0);Invalidate();void CResView:OnDraw(CDC* pDC)CResDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if(m_show)pDC-SetTextColor(m_color);pDC-T
49、extOut(10,10,m_str);5、當(dāng)點(diǎn)擊顯示時(shí),有兩種狀態(tài):顯示或不顯示,可以為此菜單項(xiàng)增加一個(gè)狀態(tài)設(shè)置,選中時(shí)前面出現(xiàn)對(duì)勾,否則沒(méi)有。添加代碼:void CResView:OnUpdateOperShow(CCmdUI* pCmdUI) pCmdUI-SetCheck(m_show);SetRadio:顯示為點(diǎn) 對(duì)話框分類:模態(tài)(Model)對(duì)話框:較常用,打開模態(tài)對(duì)話框后,直到關(guān)閉之前,用戶不能轉(zhuǎn)向其他用戶界面,例如保存文件對(duì)話框。非模態(tài)(Modeless)對(duì)話框:與模態(tài)對(duì)話框相反,例如word中的查找和替換對(duì)話框例:完善上例中的程序,添加字體菜單,點(diǎn)擊字體菜單后彈出對(duì)話框設(shè)置字
50、體大小1、插入對(duì)話框資源方法:使用菜單【Insert|Resource】打開Insert Resource對(duì)話框,選中Dialog后單擊New按鈕。使用項(xiàng)目的ResourceView,找到Dialog資源,右擊后選擇Insert Dialog。按要求設(shè)置對(duì)話框編輯框ID:ID_EDIT_FONTSIZE按鈕ID:IDOK測(cè)試對(duì)話框運(yùn)行效果的方法:選擇菜單項(xiàng)Layout |Test。單擊布局工具欄上的Test按鈕。按快捷鍵Ctrl+T。2、為對(duì)話框資源創(chuàng)建新類(ClassWizard)CFontSizeDlg新增對(duì)話框類新增對(duì)話框文件3、為控件創(chuàng)建成員變量可以為對(duì)話框上的每一個(gè)控件增加一個(gè)或多個(gè)
51、成員變量來(lái)操作控件點(diǎn)擊ClassWizardMember Variables(用來(lái)添加或刪除和對(duì)話框控件相關(guān)聯(lián)的成員變量)分析:要在編輯框IDC_EDIT_FONTSIZE中輸入一個(gè)值作為字號(hào)值,因此,需要為編輯框控件添加一個(gè)成員變量m_size對(duì)應(yīng)輸入的值4、添加字號(hào)菜單ID_OPER_FONTSIZE,并建立消息映射,添加代碼:int m_fontsize; /存儲(chǔ)字號(hào)fontsize=100; /初始字號(hào)大小void CResView:OnOperFontsize() CFontSizeDlg dlg;()=IDOK) /顯示對(duì)話框m_fontsize=; /獲取輸入值Invalidat
52、e(); 5、在OnDraw函數(shù)中添加代碼: CFont f;f.CreatePointFont(m_fontsize,hello); /自定義字體名為hello pDC-SelectObject(&f);6、在View類的源文件中添加頭文件包含: #include “”通用對(duì)話框 文件對(duì)話框 用CFileDialog類提供的通用文件對(duì)話框,實(shí)現(xiàn)Windows標(biāo)準(zhǔn)的【打開】和【另存為】功能。 CFileDialog(BOOL bOpenFileDialog, /值為TRUE,為打開對(duì)話框;FALSE為“另存為”對(duì)話框LPCTSTR lpszDefExt=NULL, /默認(rèn)的文件擴(kuò)展名LPCTS
53、TR lpszFileName=NULL, /出現(xiàn)在文件名編輯框中的初始文件名DWORD dwFlags=OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,LPCTSTR lpszFilter=NULL,CWnd *pParentWnd=NULL /文件過(guò)濾器, 用于確定顯示在文件列表中的文件類型)例如:CFileDialog dlg(TRUE,bmp,*.bmp, OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT,文本文件(*.txt)|*.txt|Word文件(*.doc)|*.doc|);調(diào)用成員函數(shù)DoModal( ),將對(duì)話框顯示
54、在屏幕上,并讓用戶從中選擇文件。如果DoModal( )返回的是IDOK,那么調(diào)用下表中的成員函數(shù)獲取文件信息。顏色對(duì)話框 CColorDialog類提供了可以選擇顏色的對(duì)話框,使得用戶可以從顏色列表中選擇要用的顏色。對(duì)該類的使用可按下列步驟進(jìn)行:(1) 在視圖類相應(yīng)位置構(gòu)造CColorDialog對(duì)象。(2) 設(shè)置或修改成員變量m_cc來(lái)初始化對(duì)話框。m_cc的結(jié)構(gòu)類型為COLORREF。(3) 調(diào)用成員函數(shù)DoModal()來(lái)顯示對(duì)話框并讓用戶從中選擇顏色。(4) 如果DoModal()返回的是IDOK,那么用戶所做的顏色選擇將保存在m_cc中。通過(guò)使用該類的成員函數(shù)GetColor()即
55、可得到選擇顏色的RGB值。字體對(duì)話框 CFontDialog類封裝了標(biāo)準(zhǔn)的【字體】對(duì)話框,使得用戶可以從系統(tǒng)安裝的字體列表中選擇要用的字體。 CFontDialog類的使用步驟與CColorDialog的使用過(guò)程是一樣的,只是m_cf的結(jié)構(gòu)類型為L(zhǎng)OGFONT,m_cf結(jié)構(gòu)用于在調(diào)用domodal函數(shù)之前對(duì)字體對(duì)話框中的選項(xiàng)進(jìn)行初始化。 在選擇了字體后,可通過(guò)下表中的成員函數(shù)獲取所選擇的字體信息。例:1、新建菜單項(xiàng)ID_FONT,添加消息響應(yīng)函數(shù)2、定義變量:COLORREF m_color;CFont font;3、變量初始化 m_color=RGB(255,0,0);4、在字體菜單處理函數(shù)
56、中添加代碼:void CResView:OnFont() CFontDialog dlg; =RGB(255,0,0); ()=IDOK) LOGFONT lf;dlg.GetCurrentFont(&lf);font.CreateFontIndirect(&lf);m_color=(); Invalidate();5、在OnDraw函數(shù)中添加代碼CFont *pold=pDC-SelectObject(&font);pDC-SetTextColor(m_color);pDC-TextOut(10,10,hello);pDC-SelectObject(pold);();位圖位圖是一種數(shù)字化的圖
57、形表示形式,基本數(shù)據(jù)結(jié)構(gòu)是像素,一個(gè)像素表示一個(gè)離散點(diǎn)的顏色值。常見(jiàn)位圖有2色、4色、16色、256色、16位、24位。其中VC 6的資源編輯器只支持256色以下(包括256色)的位圖的編輯,而最新的VC7已經(jīng)支持24位真彩位圖的編輯了。保存在文件中的位圖可以看作是設(shè)備無(wú)關(guān)的,文件本身的數(shù)據(jù)用來(lái)描述位圖的內(nèi)容。 例:在上例中插入一副圖片在OnDraw函數(shù)中添加代碼:CDC dcMem; / 創(chuàng)建內(nèi)存緩沖DCdcMem.CreateCompatibleDC(pDC);CBitmap bmp1; / 加載256位圖bmp1.LoadBitmap(IDB_BITMAP1);BITMAP bmIf;b
58、mp1.GetBitmap(&bmIf); / 獲得位圖的信息CBitmap* pOldBm = dcMem.SelectObject(&bmp1);/ 選擇位圖到內(nèi)存緩沖設(shè)備中pDC-BitBlt(0,0,bmIf.bmWidth,bmIf.bmHeight,&dcMem,0,0,SRCCOPY); / 繪制到屏幕縮放顯示圖片,將BitBlt函數(shù)改為:pDC-StretchBlt(0,0,200,200,&dcMem,0,0, bmIf.bmWidth,bmIf.bmHeight,SRCCOPY);繪制后顯示尺寸圖片起始點(diǎn)工具欄通常工具欄中放置的按鈕為常用命令的快捷方式,在菜單中都可以找到對(duì)
59、應(yīng)項(xiàng),因此繪制工具欄按鈕后,只需要將ID設(shè)置為和相應(yīng)菜單項(xiàng)相同即可(ID設(shè)置方式:在工具欄對(duì)應(yīng)按鈕上雙擊)例:改進(jìn)上述程序,在工具欄添加顏色設(shè)置的快速打開方式繪制圖標(biāo)設(shè)置ID: ID_OPER_RED ID_OPER_GREEN ID_OPER_BLUE基礎(chǔ)部分綜合實(shí)例1使用菜單欄創(chuàng)建繪圖程序步驟一FilenewWorkSpaceMFC AppWizard(exe)文件名:Draw類型:?jiǎn)挝臋n步驟二1、在中定義變量:private:int m_DrawType; /繪制類型CPoint m_ptOrigin; /起點(diǎn)坐標(biāo)int m_penWidth; /線寬int m_lineStyle;/線
60、型2、在的構(gòu)造函數(shù)中初始化:CDrawView:CDrawView() m_DrawType=0;m_ptOrigin=0;m_penWidth=1;m_lineStyle=0;步驟三1、創(chuàng)建菜單資源ResourceView Menu 編輯菜單項(xiàng)CaptionID:子菜單,唯一的標(biāo)識(shí)相應(yīng)的菜單項(xiàng)菜單項(xiàng)IDCaptionPrompt點(diǎn)ID_DRAW_POINT點(diǎn)(&P)繪制一個(gè)點(diǎn)線ID_DRAW_LINE線(&L)繪制一條線矩形ID_DRAW_RECT矩形(&R)繪制一個(gè)矩形橢圓ID_DRAW_ELLIPSE橢圓(&E)繪制一個(gè)橢圓填充ID_DRAW_FILL填充(&F)填充一個(gè)閉合區(qū)域手工繪圖
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東科學(xué)技術(shù)職業(yè)學(xué)院《電氣控制與PLC控制技術(shù)B》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東酒店管理職業(yè)技術(shù)學(xué)院《建筑設(shè)計(jì)A(六)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東交通職業(yè)技術(shù)學(xué)院《市政管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東海洋大學(xué)《虛擬互動(dòng)技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東工商職業(yè)技術(shù)大學(xué)《學(xué)前教育發(fā)展前沿專題》2023-2024學(xué)年第一學(xué)期期末試卷
- 《創(chuàng)投基金推介》課件
- 護(hù)理服務(wù)與安全課件
- 《職業(yè)精神解讀》課件
- 《膳食與營(yíng)養(yǎng)婦科》課件
- 贛州師范高等??茖W(xué)?!督逃夹g(shù)在中學(xué)化學(xué)教學(xué)中的應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 美國(guó)Control4智能家居設(shè)計(jì)方案解說(shuō)資料
- DES算法Matlab代碼
- 沙特的礦產(chǎn)資源開發(fā)概況及其商機(jī)
- 高一生物必修一期末試題(附答案)
- 安全事故應(yīng)急響應(yīng)程序流程圖(共1頁(yè))
- 交通事故快速處理單(正反打印)
- 三年級(jí)_上冊(cè)牛津英語(yǔ)期末試卷
- 西師版五年級(jí)數(shù)學(xué)上冊(cè)期末測(cè)試題(共6頁(yè))
- 損傷容限設(shè)計(jì)基本概念原理和方法PPT課件
- 水壓式沼氣池設(shè)計(jì)
- 巷道及采區(qū)車場(chǎng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論