大學VisualC案例教程ppt課件_第1頁
大學VisualC案例教程ppt課件_第2頁
大學VisualC案例教程ppt課件_第3頁
大學VisualC案例教程ppt課件_第4頁
大學VisualC案例教程ppt課件_第5頁
已閱讀5頁,還剩31頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、大學大學Visual C+案例教程案例教程第三講第三講 圖形設備接口和資源編程圖形設備接口和資源編程西安交通大學西安交通大學計算機教學實驗中心計算機教學實驗中心教學目的教學目的Windows的圖形設備接口的圖形設備接口 MFC的設備環境類和圖形對象的設備環境類和圖形對象 授課內容 3.1 設備環境類和圖形對象設備環境類和圖形對象 3.2 庫存圖形對象庫存圖形對象 3.3 畫筆與畫刷畫筆與畫刷 3.4 字體字體 3.5 繪圖方式繪圖方式 3.6 GDI坐標系坐標系 3.7 WINDOWS運用程序資源運用程序資源 3.8 位圖位圖 3.9 菜單菜單 3.10 圖標、快捷鍵

2、和字符串表圖標、快捷鍵和字符串表 3.11工具條與形狀條工具條與形狀條 3.12更新命令用戶接口音訊更新命令用戶接口音訊 3.1 設備環境類和圖形對象設備環境類和圖形對象 設備環境設備環境 圖形設備接口圖形設備接口 MFC運用程序在硬件上繪圖的籠統層次運用程序MFC設備環境類圖形設備接口GDI設備驅動程序物理設備硬件設備環境設備環境 在Windows程序中,運用程序的輸出并不直接面向物理的設備,如顯示屏或打印機,而是針對一個稱之為設備環境Device Context的邏輯設備進展操作,設備環境與實踐設備之間的信息傳送由Windows直接納理。 設備環境類設備環境類CDC類 CPaintDCCC

3、lientDCCWindowDCCMetaFileDC圖形對象類圖形對象類CGdiObject類CPenCBrushCFontCBitmapCPaletteCRgn3.2 庫存圖形對象庫存圖形對象 virtual CGdiObject* SelectStockObject( int nIndex ); nIndex指定要創建的圖形對象 圖形對象說明 BLACK_PEN黑筆 NULL_PEN空筆,不畫線或邊框 WHITE_PEN白筆 BLACK_BRUSH黑色刷子 WHITE_BRUSH白色刷子 DKGRAY_BRUSH暗灰刷子 GRAY_BRUSH灰色刷子 LTGRAY_BRUSH淡灰色刷子

4、NULL_BRUSH空刷子,內部不填充 ANSI_FIXED_FONTWindows固定傾角單間隔系統字體 ANSI_VAR_FONTWindows可變傾角比例間隔系統字體 DEFAULT_GUI_FONT缺省GUI字體如菜單和對話框字體 SYSTEM_FONT系統字體 不用存儲和恢復原來的圖形對象 【例】【例】 用鼠標切換橢圓的圖形參數用鼠標切換橢圓的圖形參數 修正文檔類的定義頭文件,參與二個變量定義:修正文檔類的定義頭文件,參與二個變量定義:class CMyDoc : public CDocumentclass CMyDoc : public CDocument protected: /

5、 create from serialization onlyprotected: / create from serialization onlyCMyDoc();CMyDoc();DECLARE_DYNCREATE(CMyDoc)DECLARE_DYNCREATE(CMyDoc)/ Attributes/ Attributespublic:public: int m_nColor;int m_nColor;CRect m_rectEllipse;CRect m_rectEllipse;/ Operations/ Operationspublic:public:(以下省略文檔類的其它定義語句

6、以下省略文檔類的其它定義語句) ) 【例】【例】 用鼠標切換橢圓的圖形參數續用鼠標切換橢圓的圖形參數續1 1修正文檔類的修正文檔類的OnNewDocument函數,對變量進展初始化:函數,對變量進展初始化:BOOL CMyDoc:OnNewDocument()if (!CDocument:OnNewDocument()return FALSE;/ TODO: add reinitialization code here/ (SDI documents will reuse this document)m_rectEllipse = CRect(100,100,300,250);m_nColor

7、 = 0;return TRUE; 【例】【例】 用鼠標切換橢圓的圖形參數續用鼠標切換橢圓的圖形參數續2 2修正視圖類的修正視圖類的OnDraw函數,參與顯示橢圓代碼:函數,參與顯示橢圓代碼:void CMyView:OnDraw(CDC* pDC)CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereswitch(pDoc-m_nColor) /根據顏色變量值決議根據顏色變量值決議用不同的畫刷用不同的畫刷case 0:pDC-SelectStockObject(GRA

8、Y_BRUSH);break;case 1:pDC-SelectStockObject(LTGRAY_BRUSH);break;case 2:pDC-SelectStockObject(BLACK_BRUSH);break;pDC-Ellipse(pDoc-m_rectEllipse); /畫橢圓畫橢圓【例】【例】 用鼠標切換橢圓的圖形參數續用鼠標切換橢圓的圖形參數續3 3用ClassWizard建立鼠標左鍵的音訊處置函數,并參與代碼void CMyView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message ha

9、ndler code here and/or call defaultCMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if(pDoc-m_rectEllipse.PtInRect(point) /判別鼠標能否點在橢圓內 pDoc-m_nColor = (pDoc-m_nColor+1)%3; /修正顏色變量值 InvalidateRect(pDoc-m_rectEllipse);CView:OnLButtonDown(nFlags, point);3.3 3.3 畫筆與畫刷畫筆與畫刷 畫筆是用來畫線的工具,是畫筆是用來畫線的工具,是CPen類的對

10、象類的對象 成員函數成員函數CreatePen用于創建畫筆,其原型為:用于創建畫筆,其原型為:BOOL CreatePen (int nPenStyle, int nWidth, COLORREF crColor); 第第1個參數是畫筆款式,可取:個參數是畫筆款式,可取: 畫筆款式畫筆款式說說明明PS_SOLID創建實線筆創建實線筆PS_DASH創建由短線構成的虛線創建由短線構成的虛線PS_DOT創建由點構成的虛線創建由點構成的虛線PS_DASHDOT創建由短線和點構成的虛線創建由短線和點構成的虛線PS_DASHDOTDOT創建由短線、點、點構成的虛創建由短線、點、點構成的虛線線PS_NULL

11、創建空空白畫筆創建空空白畫筆CBrush類類 畫刷是用來填充圖形的工具,是畫刷是用來填充圖形的工具,是CBrush類的對象類的對象 創建畫刷的成員函數的原型為:創建畫刷的成員函數的原型為: BOOL CreateSolidBrush ( COLORREF crColor ); BOOL CreateHatchBrush(int nIndex, COLORREF crColor ); 其中參數其中參數nIndex指定了陰影風格,可取值為:指定了陰影風格,可取值為:陰影風格陰影風格說明說明 HS_BDIAGONAL從左下角到右上角的從左下角到右上角的45度度斜線斜線 HS_CROSS程度線與垂直線

12、程度線與垂直線 HS_DIAGCROSS相互垂直的相互垂直的45度線度線 HS_FDIAGONAL從左上角到右下角從左上角到右下角的的45度斜線度斜線 HS_HORIZONTAL程度線程度線 HS_VERTICAL垂直線垂直線圖形對象的運用圖形對象的運用創建新的創建新的GDI對象對象CreatePen();CreateSolidBrush();CreateHatchBrush ();將將GDI對象選入到對象選入到DC中,保管原有中,保管原有GDI對象指針對象指針pOld=pDC- SelectObject();繪圖繪圖恢復原有恢復原有GDI對象對象 pDC- SelectObject(pOld

13、);CDC:SelectObject函數原型函數原型 CPen* SelectObject( CPen* pPen ); CBrush* SelectObject( CBrush* pBrush ); virtual CFont* SelectObject( CFont* pFont );【例】【例】 用鼠標切換橢圓的圖形參數續用鼠標切換橢圓的圖形參數續void CMyView:OnDraw(CDC* pDC)CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereCBr

14、ush brushNew, *pbrushOld;CPen penNew, *ppenOld;switch(pDoc-m_nColor) /根據顏色變量值決議創建不同的畫刷和畫筆根據顏色變量值決議創建不同的畫刷和畫筆case 0:brushNew.CreateSolidBrush(RGB(255,0,0);penNew.CreatePen(PS_DASH, 1, RGB(0,0,0);break;case 1:brushNew.CreateHatchBrush(HS_DIAGCROSS,RGB(0,255,0);penNew.CreatePen(PS_SOLID, 1, RGB(255,0,0

15、);break;case 2:brushNew.CreateSolidBrush(RGB(0,0,255);penNew.CreatePen(PS_SOLID, 3, RGB(0,255,0);break;pbrushOld = pDC-SelectObject(&brushNew); / 運用新的畫刷,保管原來的畫刷以便恢復運用新的畫刷,保管原來的畫刷以便恢復 ppenOld = pDC- SelectObject(&penNew); / 運用新的畫筆,保管原來的畫筆以便恢復運用新的畫筆,保管原來的畫筆以便恢復 pDC- Ellipse(pDoc-m_rectEllipse)

16、;/畫橢圓,運用新畫刷和新畫筆畫橢圓,運用新畫刷和新畫筆pDC- SelectObject(pbrushOld); / 恢復原來的畫刷恢復原來的畫刷pDC- SelectObject(ppenOld); / 恢復原來的畫筆恢復原來的畫筆 3.4 3.4 字體字體 描畫輸出文字的字體可用描畫輸出文字的字體可用CFont對象。對象。CFont對象的運用方法與畫筆、對象的運用方法與畫筆、畫刷類似畫刷類似BOOL CreateFont(int nHeight,/ 字符邏輯高度字符邏輯高度int nWidth,/ 字體邏輯寬度字體邏輯寬度int nEscapement,/ 出口矢量與出口矢量與X軸的角度

17、軸的角度int nOrientation,/ 字符基線與字符基線與X軸的角度軸的角度int nWeight,/ 字體磅值字體磅值BYTE bItalic,/ 非非0那么為斜體那么為斜體BYTE bUnderline,/ 非非0那么加下劃線那么加下劃線BYTE cStrikeOut,/ 非非0那么加刪除線那么加刪除線BYTE nCharSet,/ 此字體的字符集此字體的字符集BYTE nOutPrecision,/ 輸出精度輸出精度BYTE nClipPrecision,/ 裁剪精度裁剪精度BYTE nQuality,/ 輸出質量輸出質量BYTE nPitchAndFamily,/ 調距和字體族

18、調距和字體族LPCTSTR lpszFacename );/ 字體的字型名字體的字型名3.5 繪圖方式繪圖方式繪圖方式由繪圖方式由CDC的成員函數的成員函數SetROP2( )設設定,其原型為:定,其原型為:int SetROP2 ( int nDrawMode );其中其中R2_NOT方式可保證所繪圖形是可見方式可保證所繪圖形是可見的,即假設畫筆色與背風光一樣,那么以的,即假設畫筆色與背風光一樣,那么以與背風光相反的顏色作圖。與背風光相反的顏色作圖。3.6 GDI坐標系坐標系 GDI支持兩種類型的坐標系支持兩種類型的坐標系:邏輯坐標系邏輯坐標系:按坐標設置方式又稱為映射方式可分按坐標設置方式

19、又稱為映射方式可分為為8種種 最常用也是缺省設置的映射方式是最常用也是缺省設置的映射方式是MM_TEXT 設備坐標系設備坐標系 客戶區坐標系統客戶區坐標系統屏幕坐標系統屏幕坐標系統窗口坐標系統。窗口坐標系統。 3.7 Windows運用程序資源運用程序資源 資源:是一種數據,它包含了決議程序的資源:是一種數據,它包含了決議程序的用戶界面的文本和圖形。用戶界面的文本和圖形。資源所決議的界面元素有:資源所決議的界面元素有:菜單菜單加速鍵加速鍵位圖、光標、圖標位圖、光標、圖標對話框、控件對話框、控件字符串字符串工具欄工具欄資源腳本文件和資源頭文件資源腳本文件和資源頭文件 資源文件資源文件 .rc.r

20、c 定義資源內容定義資源內容 資源經過資源標識符加以區別資源經過資源標識符加以區別 資源頭文件資源頭文件 Resource.hResource.h 定義一個工程中一切的資源標識符定義一個工程中一切的資源標識符3.8 位圖位圖向工程中添加資源向工程中添加資源: Developer Studio的的Insert/Resource菜單項選擇項菜單項選擇項載入位圖資源:運用載入位圖資源:運用 CBitmap類的成員函數類的成員函數BOOL LoadBitmap( LPCTSTR lpszResourceName );BOOL LoadBitmap( UINT nIDResource );建立一適宜的內

21、存設備環境并將位圖選入該設備環境:建立一適宜的內存設備環境并將位圖選入該設備環境:CDC MemDC;MemDC. CreateCompatibleDC(NULL);MemDC.SelectObject(&m_Bitmap);從內存設備環境中將位圖復制到指定設備:從內存設備環境中將位圖復制到指定設備:運用運用 CDC: BitBlt運用運用 CDC: StretchBlt【例】【例】 顯示一張位圖文件顯示一張位圖文件.BMP修正視圖類的定義頭文件,參與修正視圖類的定義頭文件,參與3個變量定義:個變量定義:/ MyView.h : interface of the CMyView cla

22、ssclass CMyView : public CView/ 定義定義CBitmap類對象以及位圖的高度和寬度變量類對象以及位圖的高度和寬度變量CBitmap m_Bitmap;int m_nHeight;int m_nWidth; protected: / create from serialization onlyCMyView();DECLARE_DYNCREATE(CMyView)以下省略其它定義語句以下省略其它定義語句;【例】【例】 顯示一張位圖文件顯示一張位圖文件.BMP續續1修正視圖類的構造函數:修正視圖類的構造函數:/ CMyView construction/destruc

23、tionCMyView:CMyView()/ TODO: add construction code here/ 載入位圖資源,讀位圖信息載入位圖資源,讀位圖信息m_Bitmap.LoadBitmap(IDB_BITMAP1);BITMAP BM;m_Bitmap.GetBitmap(&BM); /運用運用 CBitmap類成員函數讀取類成員函數讀取位圖信息位圖信息m_nWidth = BM.bmWidth;m_nHeight = BM.bmHeight;例例12-3 顯示一張位圖文件顯示一張位圖文件.BMP續續2修正視圖類的修正視圖類的OnDraw函數,顯示位圖:函數,顯示位圖:vo

24、id CMyView:OnDraw(CDC* pDC)CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here/ 顯示位圖顯示位圖CDC MemDC;MemDC.CreateCompatibleDC(NULL);MemDC.SelectObject(&m_Bitmap);pDC-BitBlt(0,0,m_nWidth,m_nHeight,&MemDC,0,0,SRCCOPY);CDC:BitBltBOOL BitBlt( int x, int y, int

25、 nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );x, y用于指定目的矩形區域的左上角坐標用于指定目的矩形區域的左上角坐標nWidth, nHeight為目的區域的寬度和高度為目的區域的寬度和高度pSrcDC是指向源設備對象的指針是指向源設備對象的指針xSrc, ySrc源位圖的左上角坐標源位圖的左上角坐標dwRop決議了位圖的顯示方式決議了位圖的顯示方式CDC:StretchBlt實現圖像縮放輸出實現圖像縮放輸出 BOOL StretchBlt( int x, int y, int BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDCnWidth, int nHeight, CDC* * pSrcDC, pSrcDC, int xSrc, int ySrc, int nSrcWidth, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );int nSrcHeight, DWORD dwRop );3.9 菜單菜單 編輯菜單資源:運用菜單編輯器編輯菜單資源:運用菜單編輯器(留意留意ID)Separ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論