Win32開發入門(22):抓取螢幕

來源:互聯網
上載者:User

關於如何拷貝螢幕並儲存,這裡已經有現成的例子,我也不必去Copy人家了,我一向不喜歡Copy。 這裡有一個完整的例子,可以看看。

http://msdn.microsoft.com/EN- US/library/windows/desktop/dd183402(v=vs.85).aspx

把螢幕的內容複寫到視窗的用戶端區域中 ,通常會用BitBlt函數,函數的功能是把一塊顏色資料從一個DC複製到另一個DC,這個我也不知道怎麼 翻譯才能通俗一點。這樣說吧,就是從源裝置上下文的圖形表面截取一個矩形地區並且複製到另一個設 備內容相關的地區中。就像我們要做一個截屏工具一樣,把螢幕的一部分內容複寫到視窗上。

下 面呢,我用另一個函數來進行拷貝——StretchBlt函數,這個函數與BitBlt差不多,不過,它有一點, 就是可以根據目標的地區對源映像進行展開。

注意看代碼。

{         // 螢幕的DC         HDC hdcScreen = GetDC(NULL);         // 本視窗的DC         HDC hdcWindow = GetDC(hWnd);         // 螢幕的寬度         int scrWidth = GetSystemMetrics(SM_CXSCREEN);         // 螢幕的高度         int scrHeight = GetSystemMetrics(SM_CYSCREEN);         // 視窗的用戶端區域         RECT rectClient;         GetClientRect(hWnd, &rectClient);         // 使用StretchBlt進行複製         StretchBlt(hdcWindow,0,0,rectClient.right,rectClient.bottom,hdcScreen,0,0,scrWidth,scrHeight,SRCCOPY);         // 釋放DC         ReleaseDC(NULL, hdcScreen);         ReleaseDC(hWnd, hdcWindow);     }

現在,我們要明確,我們是要把螢幕上的東西往視窗地區複製,所以我們想到,必須先有兩 個DC,一個是螢幕的DC,另一個就是視窗的DC。DC通過GetDC函數可以擷取,將參數設定為NULL,也就 是獲得主畫面的DC控制代碼了,NULL可以認為擷取案頭的DC。

擷取到DC後,我們還必須知道來源區域 的寬度和高度,以及目標視窗地區的寬度和高度。

來源區域是螢幕,所以我們只要知道了當前屏 幕的高度和寬度就可以了,GetSystemMetrics(SM_CXSCREEN)返回當前螢幕的寬度,GetSystemMetrics (SM_CYSCREEN)獲得當前螢幕的高度。

而視窗的地區大小呢?我們不妨先得到視窗用戶端區域的矩 形大小,用GetClientRect函數填充一個RECT結構體,這個結構體的right成員就是視窗用戶端區域的寬度 ,bottom成員就是視窗用戶端區域的高度了。

好了,有了這些基本參數,後面的事情就好辦了。

BOOL StretchBlt( _In_ HDC hdcDest, _In_ int nXOriginDest, _In_ int nYOriginDest, _In_ int nWidthDest, _In_ int nHeightDest, _In_ HDC hdcSrc, _In_ int nXOriginSrc, _In_ int nYOriginSrc, _In_ int nWidthSrc, _In_ int nHeightSrc, _In_ DWORD dwRop);

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。