高程——屏幕保護(hù)程序_第1頁
高程——屏幕保護(hù)程序_第2頁
高程——屏幕保護(hù)程序_第3頁
高程——屏幕保護(hù)程序_第4頁
高程——屏幕保護(hù)程序_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、高級程序設(shè)計(jì)語言高級程序設(shè)計(jì)語言屏幕保護(hù)程序 授課教師:楊佳授課教師:楊佳 郵箱:郵箱: 幾種有關(guān)幾種有關(guān)DC的類的類CDC:與作圖相關(guān)的操作都封裝到了:與作圖相關(guān)的操作都封裝到了CDC類當(dāng)中。類當(dāng)中。 CDC *pDC=GetDC();CClientDC:與窗口客戶區(qū)相關(guān)的:與窗口客戶區(qū)相關(guān)的DC類,在構(gòu)造時(shí)自動(dòng)調(diào)用類,在構(gòu)造時(shí)自動(dòng)調(diào)用GetDC,在析構(gòu)時(shí),在析構(gòu)時(shí) 自動(dòng)調(diào)用自動(dòng)調(diào)用ReleaseDC。 CClientDC dc(this);CWindowDC:可以訪問一個(gè)窗口的整個(gè)屏幕區(qū),包括客戶與非客戶區(qū)域。:可以訪問一個(gè)窗口的整個(gè)屏幕區(qū),包括客戶與非客戶區(qū)域。 CWindowDC dc

2、(GetParent();/訪問整個(gè)窗口屏幕區(qū)訪問整個(gè)窗口屏幕區(qū) CWindowDC dc(GetDesktopWindow();/訪問桌面區(qū)。訪問桌面區(qū)。CPaintDC:針對于針對于OnPaint。構(gòu)造函數(shù)自動(dòng)調(diào)用。構(gòu)造函數(shù)自動(dòng)調(diào)用BeginPaint,析構(gòu)函數(shù)自動(dòng)調(diào),析構(gòu)函數(shù)自動(dòng)調(diào)用用EndPaint。 繪制直線方法一:繪制直線方法一:如建立名為如建立名為Paint的的MFC單文檔單文檔(SDI)應(yīng)用程序,為應(yīng)用程序,為CPaintView添添加加WM_LBUTTONDOWN和和WM_LBUTTONUP消息相應(yīng)函數(shù),消息相應(yīng)函數(shù),在在CPaintView中增加數(shù)據(jù)成員中增加數(shù)據(jù)成員CPo

3、int m_Repoint;直線繪制程直線繪制程序如下:序如下:void CPaintView:OnLButtonDown(UINT nFlags, CPoint point) m_Repoint=point;CView:OnLButtonDown(nFlags, point);void CPaintView:OnLButtonUp(UINT nFlags, CPoint point) CClientDC dc(this);dc.MoveTo(m_Repoint);dc.LineTo(point);CView:OnLButtonUp(nFlags, point);繪制直線方法二:繪制直線方法二

4、: CWindowDC dc(GetParent(); dc.MoveTo(m_Repoint); dc.LineTo(point);繪制直線方法三:繪制直線方法三: CWindowDC dc(GetDesktopWindow() ; dc.MoveTo(m_Repoint); dc.LineTo(point);繪制矩形:繪制矩形: CClientDC dc(this); dc.Rectangle(CRect(m_Repoint,point);圖形設(shè)備接口圖形設(shè)備接口 Windows為設(shè)備環(huán)境提供了各種各樣的繪圖工具,為設(shè)備環(huán)境提供了各種各樣的繪圖工具,例如用于畫線的例如用于畫線的“畫筆畫筆”

5、、填充區(qū)域的、填充區(qū)域的“畫刷畫刷”以及以及用于繪制文本的用于繪制文本的“字體字體”。MFC封裝了這些工具,并封裝了這些工具,并提供相應(yīng)的類來作為應(yīng)用程序的圖形設(shè)備接口提供相應(yīng)的類來作為應(yīng)用程序的圖形設(shè)備接口GDI,這些類有一個(gè)共同的抽象基類這些類有一個(gè)共同的抽象基類CGdiObject,具體如表,具體如表所示。所示。MFC 的的 GDI 類類類類 名名說說 明明CBitmap“位圖”是一種位矩陣,每一個(gè)顯示象素都對應(yīng)于其中的一個(gè)或多個(gè)位。用戶可以利用位圖來表示圖像,也可以利用它來創(chuàng)建畫刷。CBrush“畫刷”定義了一種位圖形式的象素,利用它可對區(qū)域內(nèi)部填充顏色或樣式。CFont“字體”是一種

6、具有某種風(fēng)格和尺寸的所有字符的完整集合,它常常被當(dāng)作資源存于磁盤中,其中有一些還依賴于某種設(shè)備。CPalette“調(diào)色板”是一種顏色映射接口,它允許應(yīng)用程序在不干擾其他應(yīng)用程序的前提下,可以充分利用輸出設(shè)備的顏色描繪能力。CPen“畫筆”是一種用來畫線及繪制有形邊框的工具,用戶可以指定它的顏色及寬度,并且可以指定它畫實(shí)線、點(diǎn)線或虛線等。CRgn“區(qū)域”是由多邊形、橢圓或二者組合形成的一種范圍,可以利用它來進(jìn)行填充、裁剪以及鼠標(biāo)點(diǎn)中測試等。 在選擇在選擇GDI對象繪圖時(shí),遵循以下步驟:對象繪圖時(shí),遵循以下步驟: 1.定義一個(gè)定義一個(gè)GDI對象對象 2.用相應(yīng)的函數(shù)創(chuàng)建該對象用相應(yīng)的函數(shù)創(chuàng)建該對象

7、 3.將該對象選入當(dāng)前設(shè)備環(huán)境中將該對象選入當(dāng)前設(shè)備環(huán)境中 4.繪圖繪圖 5.回復(fù)設(shè)備環(huán)境中原來的回復(fù)設(shè)備環(huán)境中原來的GDI對象。對象。用新畫筆繪制直線用新畫筆繪制直線CClientDC dc(this);CPen pen(PS_DASH,1,RGB(0,25,255);CPen *oldpen=dc.SelectObject(&pen);dc.MoveTo(m_Repoint);dc.LineTo(point);dc. SelectObject(oldpen);用新畫刷填充矩形顏色用新畫刷填充矩形顏色CBrush brush(RGB(255,255,0);CClientDC dc(t

8、his);dc.SelectObject(&brush);dc.Rectangle(CRect(m_Repoint, point);用新畫刷填充橢圓顏色用新畫刷填充橢圓顏色CBrush brush(RGB(255,255,0);CClientDC dc(this);dc.SelectObject(&brush);dc.Ellipse(m_Repoint.x-20,m_Repoint.y-20, point.x-40,point.y-50);屏幕保護(hù)的基本知識屏幕保護(hù)的基本知識1 1屏幕保護(hù)程序原理屏幕保護(hù)程序原理 屏幕保護(hù)程序就是普通的可執(zhí)行程序(屏幕保護(hù)程序就是普通的可執(zhí)行程

9、序(.exe.exe)。只不過)。只不過WindowsWindows把它換了一個(gè)擴(kuò)展名(把它換了一個(gè)擴(kuò)展名(.scr.scr),放在了系統(tǒng)目錄下,由操),放在了系統(tǒng)目錄下,由操作系統(tǒng)調(diào)用而已。對作系統(tǒng)調(diào)用而已。對Windows NTWindows NT和和Windows 2000Windows 2000這個(gè)目錄是這個(gè)目錄是C:WINNTsystem32C:WINNTsystem32,對于,對于Win95Win95,Win98Win98這個(gè)目錄是這個(gè)目錄是C:WindowsC:Windows和和C:WindowssystemC:Windowssystem。屏幕保護(hù)的基本知識屏幕保護(hù)的基本知識2

10、2屏幕保護(hù)程序激活的條件屏幕保護(hù)程序激活的條件(1 1)在規(guī)定時(shí)間內(nèi)沒有鼠標(biāo)或鍵盤輸入)在規(guī)定時(shí)間內(nèi)沒有鼠標(biāo)或鍵盤輸入(2 2)當(dāng)前的活動(dòng)窗口是標(biāo)準(zhǔn)的)當(dāng)前的活動(dòng)窗口是標(biāo)準(zhǔn)的WINDOWSWINDOWS應(yīng)用應(yīng)用(3 3)如果當(dāng)前活動(dòng)的程序接管了字參數(shù))如果當(dāng)前活動(dòng)的程序接管了字參數(shù) wParam wParam 值為值為SC_SCREENSAVE SC_SCREENSAVE 的的WM_SYSCOMMAND WM_SYSCOMMAND 消息并且不傳遞到消息并且不傳遞到 DefWindowProcDefWindowProc()函數(shù)就可以禁止屏幕保護(hù)程序。()函數(shù)就可以禁止屏幕保護(hù)程序。屏幕保護(hù)的基本

11、知識屏幕保護(hù)的基本知識3 3屏幕保護(hù)程序的作用屏幕保護(hù)程序的作用 用戶可以通過控制面板選擇、設(shè)置和預(yù)覽需要的屏幕保護(hù)程序用戶可以通過控制面板選擇、設(shè)置和預(yù)覽需要的屏幕保護(hù)程序,并可以配置屏幕保護(hù)程序的參數(shù)。當(dāng)鼠標(biāo)和鍵盤空閑一段時(shí),并可以配置屏幕保護(hù)程序的參數(shù)。當(dāng)鼠標(biāo)和鍵盤空閑一段時(shí)間后,屏幕保護(hù)程序即運(yùn)行。屏幕保護(hù)程序主要有兩個(gè)作用:間后,屏幕保護(hù)程序即運(yùn)行。屏幕保護(hù)程序主要有兩個(gè)作用: (1)(1)避免長時(shí)間顯示同一畫面,損壞顯示器。避免長時(shí)間顯示同一畫面,損壞顯示器。 (2)(2)避免屏幕上機(jī)密信息的泄露。避免屏幕上機(jī)密信息的泄露。如何提高繪圖效率 顯示的圖形為什么會閃爍 繪圖過程大多放在

12、繪圖過程大多放在OnDrawOnDraw()函數(shù)或者()函數(shù)或者OnPaintOnPaint()函數(shù)中,()函數(shù)中,OnDrawOnDraw()函數(shù)在進(jìn)行屏幕顯示時(shí)是由()函數(shù)在進(jìn)行屏幕顯示時(shí)是由OnPaintOnPaint()函數(shù)進(jìn)行調(diào)()函數(shù)進(jìn)行調(diào)用的。當(dāng)窗口由于任何原因需要重繪時(shí),總是先用背景色將顯用的。當(dāng)窗口由于任何原因需要重繪時(shí),總是先用背景色將顯示區(qū)清除,然后才調(diào)用示區(qū)清除,然后才調(diào)用OnPaintOnPaint函數(shù),而背景色往往與繪圖內(nèi)容函數(shù),而背景色往往與繪圖內(nèi)容反差很大,這樣在短時(shí)間內(nèi)背景色與顯示圖形的交替出現(xiàn),使反差很大,這樣在短時(shí)間內(nèi)背景色與顯示圖形的交替出現(xiàn),使得顯示窗

13、口看起來在閃。得顯示窗口看起來在閃。如何提高繪圖效率 顯示的圖形為什么會閃爍 簡單圖形之所以看起來沒有復(fù)雜圖形那么閃是因?yàn)閺?fù)雜圖形占簡單圖形之所以看起來沒有復(fù)雜圖形那么閃是因?yàn)閺?fù)雜圖形占的面積大,重畫時(shí)造成的反差比較大,所以感覺上要閃得厲害的面積大,重畫時(shí)造成的反差比較大,所以感覺上要閃得厲害一些,但是閃爍頻率要低。一些,但是閃爍頻率要低。 那為什么動(dòng)畫的重畫頻率高,而看起來卻不閃?因?yàn)殚W爍就是那為什么動(dòng)畫的重畫頻率高,而看起來卻不閃?因?yàn)殚W爍就是反差,反差越大,閃爍越厲害。而動(dòng)畫的連續(xù)兩個(gè)幀之間的差反差,反差越大,閃爍越厲害。而動(dòng)畫的連續(xù)兩個(gè)幀之間的差異很小所以看起來不閃。因此動(dòng)畫的重畫頻率

14、雖然很高,但看異很小所以看起來不閃。因此動(dòng)畫的重畫頻率雖然很高,但看起來卻不閃。但如果在動(dòng)畫的每一幀中間加一張純白的幀,結(jié)起來卻不閃。但如果在動(dòng)畫的每一幀中間加一張純白的幀,結(jié)果就不一樣了。果就不一樣了。如何提高繪圖效率 如何避免閃爍 為了更好的解決屏幕閃爍的問題,就要用到雙緩沖的方法。雙為了更好的解決屏幕閃爍的問題,就要用到雙緩沖的方法。雙緩沖就是除了在屏幕上有圖形進(jìn)行顯示以外,在內(nèi)存中也有圖緩沖就是除了在屏幕上有圖形進(jìn)行顯示以外,在內(nèi)存中也有圖形在繪制??梢园岩@示的圖形先在內(nèi)存中繪制好,然后再一形在繪制??梢园岩@示的圖形先在內(nèi)存中繪制好,然后再一次性的將內(nèi)存中的圖形按照一個(gè)點(diǎn)一個(gè)點(diǎn)地覆

15、蓋到屏幕上去(次性的將內(nèi)存中的圖形按照一個(gè)點(diǎn)一個(gè)點(diǎn)地覆蓋到屏幕上去(這個(gè)過程非常快,因?yàn)槭欠浅R?guī)整的內(nèi)存拷貝)。這樣在內(nèi)存這個(gè)過程非???,因?yàn)槭欠浅R?guī)整的內(nèi)存拷貝)。這樣在內(nèi)存中繪圖時(shí),隨便用什么反差大的背景色進(jìn)行清除都不會閃,因中繪圖時(shí),隨便用什么反差大的背景色進(jìn)行清除都不會閃,因?yàn)榭床灰?。?dāng)復(fù)制到屏幕上時(shí),因?yàn)閮?nèi)存中最終的圖形與屏幕為看不見。當(dāng)復(fù)制到屏幕上時(shí),因?yàn)閮?nèi)存中最終的圖形與屏幕顯示圖形差別很小,這樣看起來屏幕就不會閃。顯示圖形差別很小,這樣看起來屏幕就不會閃。在窗口中貼圖在窗口中貼圖1、創(chuàng)建位圖、創(chuàng)建位圖CBitmap bitmap;bitmap.LoadBitmap(IDB_BI

16、TMAP1);2、創(chuàng)建兼容、創(chuàng)建兼容DCCDC dcCompatible;dcCompatible.CreateCompatibleDC(pDC);3、將位圖選到兼容、將位圖選到兼容DC中中dcCompatible.SelectObject(&bitmap);4、將兼容、將兼容DC中的位圖貼到當(dāng)前中的位圖貼到當(dāng)前DC中。中。CRect rect(0, 0, 0, 0);GetClientRect(&rect);pDC-BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOP

17、Y);位圖兼容兼容DC當(dāng)前當(dāng)前DC如何提高繪圖效率 雙緩沖的實(shí)現(xiàn) 其中,函數(shù)其中,函數(shù)BitBltBitBlt是對指定的源設(shè)備環(huán)境區(qū)域中的像素進(jìn)行位是對指定的源設(shè)備環(huán)境區(qū)域中的像素進(jìn)行位塊(塊(bit_blockbit_block)轉(zhuǎn)換,以傳送到目標(biāo)設(shè)備環(huán)境。)轉(zhuǎn)換,以傳送到目標(biāo)設(shè)備環(huán)境。函數(shù)原型:函數(shù)原型:BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int BOOL BitBlt(HDC hdcDest,int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,nWidth,int nHei

18、ght,HDC hdcSrc, int nXSrc,int nYSrc,DWORD dwRop) int nXSrc,int nYSrc,DWORD dwRop);其中,各參數(shù)含義如下所示:其中,各參數(shù)含義如下所示:如何提高繪圖效率 雙緩沖的實(shí)現(xiàn) hdcDesthdcDest:指向目標(biāo)設(shè)備環(huán)境的句柄。:指向目標(biāo)設(shè)備環(huán)境的句柄。 nXDestnXDest:指定目標(biāo)矩形區(qū)域左上角的:指定目標(biāo)矩形區(qū)域左上角的X X軸邏輯坐標(biāo)。軸邏輯坐標(biāo)。 nYDestnYDest:指定目標(biāo)矩形區(qū)域左上角的:指定目標(biāo)矩形區(qū)域左上角的Y Y軸邏輯坐標(biāo)。軸邏輯坐標(biāo)。 nWidthnWidth:指定源和目標(biāo)矩形區(qū)域的邏輯寬

19、度。:指定源和目標(biāo)矩形區(qū)域的邏輯寬度。 nHeightnHeight:指定源和目標(biāo)矩形區(qū)域的邏輯高度。:指定源和目標(biāo)矩形區(qū)域的邏輯高度。 hdcSrchdcSrc:指向源設(shè)備環(huán)境的句柄。:指向源設(shè)備環(huán)境的句柄。如何提高繪圖效率 雙緩沖的實(shí)現(xiàn) nXSrcnXSrc:指定源矩形區(qū)域左上角的:指定源矩形區(qū)域左上角的X X軸邏輯坐標(biāo)。軸邏輯坐標(biāo)。 nYSrcnYSrc:指定源矩形區(qū)域左上角的:指定源矩形區(qū)域左上角的Y Y軸邏輯坐標(biāo)。軸邏輯坐標(biāo)。 dwRopdwRop:指定光柵操作代碼。這些代碼將定義源矩形區(qū)域的顏色:指定光柵操作代碼。這些代碼將定義源矩形區(qū)域的顏色數(shù)據(jù),如何與目標(biāo)矩形區(qū)域的顏色數(shù)據(jù)組合

20、以完成最后的顏色數(shù)據(jù),如何與目標(biāo)矩形區(qū)域的顏色數(shù)據(jù)組合以完成最后的顏色。如何提高繪圖效率 雙緩沖的實(shí)現(xiàn)首先給出實(shí)現(xiàn)的程序,在首先給出實(shí)現(xiàn)的程序,在OnDraw(CDC OnDraw(CDC * *pDC)pDC)函數(shù)中添加如下代碼:函數(shù)中添加如下代碼:CDC MemDC; /CDC MemDC; /首先定義一個(gè)顯示設(shè)備對象首先定義一個(gè)顯示設(shè)備對象CBitmap MemBitmap; /CBitmap MemBitmap; /定義一個(gè)位圖對象定義一個(gè)位圖對象/建立與屏幕顯示兼容的內(nèi)存顯示設(shè)備建立與屏幕顯示兼容的內(nèi)存顯示設(shè)備MemDC.CreateCompatibleDC(NULL);MemDC.

21、CreateCompatibleDC(NULL);如何提高繪圖效率 雙緩沖的實(shí)現(xiàn)下面建立一個(gè)與屏幕顯示兼容的位圖,位圖的大小可以用窗口的大下面建立一個(gè)與屏幕顯示兼容的位圖,位圖的大小可以用窗口的大小小: :MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);將位圖選入到內(nèi)存顯示設(shè)備中將位圖選入到內(nèi)存顯示設(shè)備中, ,只有選入了位圖的內(nèi)存顯示設(shè)備才有只有選入了位圖的內(nèi)存顯示設(shè)備才有地方繪圖,畫到指定的位圖上地方繪圖,畫到指定的位圖上: :C

22、Bitmap CBitmap * *pOldBit=MemDC.SelectObject(&MemBitmap);pOldBit=MemDC.SelectObject(&MemBitmap);如何提高繪圖效率 雙緩沖的實(shí)現(xiàn)/先用背景色將位圖清除干凈,以白色為例先用背景色將位圖清除干凈,以白色為例MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255);MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255);/繪圖繪圖MemDC.MoveTo();MemDC.MoveTo

23、();MemDC.LineTo();MemDC.LineTo();如何提高繪圖效率 雙緩沖的實(shí)現(xiàn)/將內(nèi)存中的圖拷貝到屏幕上進(jìn)行顯示將內(nèi)存中的圖拷貝到屏幕上進(jìn)行顯示pDC-BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);pDC-BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);/繪圖完成后的清理繪圖完成后的清理MemBitmap.DeleteObject();MemBitmap.DeleteObject();MemDC.DeleteDC();MemDC.DeleteDC();如何提高繪圖效率 提

24、高繪圖效率 實(shí)際上,在OnDraw(CDC *pDC)中繪制的圖并不是所有都顯示了的,例如:在OnDraw()函數(shù)中畫了兩個(gè)矩形,在一次重繪中雖然兩個(gè)矩形的繪制函數(shù)都有執(zhí)行,但是很有可能只有一個(gè)顯示了,這是因?yàn)镸FC本身為了提高重繪的效率設(shè)置了裁剪區(qū)。裁剪區(qū)的作用就是:只有在這個(gè)區(qū)內(nèi)的繪圖過程才會真正有效,在區(qū)外的是無效的,即使在區(qū)外執(zhí)行了繪圖函數(shù)也是不會顯示的。如何提高繪圖效率 提高繪圖效率 因?yàn)槎鄶?shù)情況下窗口重繪的產(chǎn)生大多是因?yàn)榇翱诓糠直徽趽趸蛞驗(yàn)槎鄶?shù)情況下窗口重繪的產(chǎn)生大多是因?yàn)榇翱诓糠直徽趽趸蛘叽翱谟袧L動(dòng)發(fā)生,改變的區(qū)域并不是整個(gè)圖形而只有一小部者窗口有滾動(dòng)發(fā)生,改變的區(qū)域并不是整個(gè)圖

25、形而只有一小部分,這一部分需要改變的就是分,這一部分需要改變的就是pDCpDC中的裁剪區(qū)了。因?yàn)轱@示(往中的裁剪區(qū)了。因?yàn)轱@示(往內(nèi)存或者顯存都叫顯示)比繪圖過程的計(jì)算要費(fèi)時(shí)得多,有了內(nèi)存或者顯存都叫顯示)比繪圖過程的計(jì)算要費(fèi)時(shí)得多,有了裁剪區(qū)后顯示的就只是應(yīng)該顯示的部分,大大提高了顯示效率裁剪區(qū)后顯示的就只是應(yīng)該顯示的部分,大大提高了顯示效率。但是這個(gè)裁剪區(qū)是。但是這個(gè)裁剪區(qū)是MFCMFC設(shè)置的,它已經(jīng)為我們提高了顯示效率設(shè)置的,它已經(jīng)為我們提高了顯示效率,在進(jìn)行復(fù)雜圖形的繪制時(shí)如何進(jìn)一步提高效率呢?那就只有,在進(jìn)行復(fù)雜圖形的繪制時(shí)如何進(jìn)一步提高效率呢?那就只有去掉在裁剪區(qū)外的繪圖過程了???/p>

26、以先用去掉在裁剪區(qū)外的繪圖過程了??梢韵扔胮DC-GetClipBoxpDC-GetClipBox()()得到裁剪區(qū),然后在繪圖時(shí)判斷你的圖形是否在這個(gè)區(qū)內(nèi),如得到裁剪區(qū),然后在繪圖時(shí)判斷你的圖形是否在這個(gè)區(qū)內(nèi),如果在就畫,不在就不畫。果在就畫,不在就不畫。屏幕保護(hù)程序1、選擇MFC AppWizard ,建立基于單文檔的應(yīng)用程序2、選擇Project-Setting 命令彈出“工程設(shè)置”對話框,選擇General選項(xiàng)卡,然后在Microsoft Foundation Classe下拉列表框中選擇 Use MFC in a Static Library。3、插入bmp圖,ID號為IDB_MYB

27、ITMAP4、在CMyScreenSaverDlg 類中添加幾個(gè)必須的變量和函數(shù),添 加后的代碼如下:private: UINT m_showheight;UINT m_showweight;UINT m_showpoint;CDC *m_pdcmem;CBitmap m_bitmap;CPoint m_mousepoint; BITMAP bitmap; /位圖位圖struct屏幕保護(hù)程序5、在工程中添加相應(yīng)的消息相應(yīng)函數(shù)6、完成消息處理 PostMessage(WM_CLOSE); void CMyScreenSaverDlg:OnMouseMove(UINT nFlags, CPoint

28、 point) / TODO: Add your message handler code here and/or call default if(abs(point.x-m_mousepoint.x)200|abs(point.y-m_mousepoint.y)200) PostMessage(WM_CLOSE);CDialog:OnMouseMove(nFlags, point); 屏幕保護(hù)程序void CMyScreenSaverDlg:OnActivateApp(BOOL bActive, HTASK hTask) CDialog:OnActivateApp(bActive, hTas

29、k);if(!bActive) PostMessage(WM_CLOSE);7、DrawBitmap()函數(shù),采用雙緩沖技術(shù),將圖片和文字先寫入內(nèi)存,然后再在函數(shù),采用雙緩沖技術(shù),將圖片和文字先寫入內(nèi)存,然后再在 顯示到屏幕上。顯示到屏幕上。屏幕保護(hù)程序void CMyScreenSaverDlg:OnPaint() elseCPaintDC dc(this); m_pdcmem=new CDC; m_bitmap.LoadBitmap(IDB_MYBITMAP);m_bitmap.GetBitmap(&bitmap);m_pdcmem-CreateCompatibleDC(&

30、dc);m_pdcmem-SelectObject(&m_bitmap);m_showpoint=0;DrawBitmap();SetTimer(1,10,NULL); CDialog:OnPaint(); 屏幕保護(hù)程序 CClientDC dc(this); /將圖片寫入到內(nèi)存將圖片寫入到內(nèi)存 CDC dcmem; CBitmap bt; bt.CreateCompatibleBitmap(&dc,m_showweight,m_showheight); dcmem.CreateCompatibleDC(&dc); dcmem.SelectObject(&bt)

31、;dcmem.FillRect(&CRect(0,0,m_showweight,m_showheight), &CBrush(RGB(0,0,0); dcmem.SetBkMode(0); UINT y=(m_showheight-bitmap.bmHeight)/2; dcmem.StretchBlt(0,y,m_showweight,m_showheight,m_pdcmem, m_showpoint,0,bitmap.bmWidth,bitmap.bmHeight-20,SRCCOPY);屏幕保護(hù)程序CFont ft; /將字體寫入到內(nèi)存將字體寫入到內(nèi)存ft.Create

32、Font(100,10,0,60,30,FALSE,FALSE,FALSE, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH|FF_MODERN, 隸書隸書); dcmem.SelectObject(&ft); static long sweight=m_showweight; -sweight; if(sweight-20) dcmem.SetTextColor(RGB(255,0,0); dcmem.TextOut(sweight-500,20,自動(dòng)屏幕保護(hù)程序自動(dòng)屏幕保護(hù)程序

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論