關於螢幕擷取

2022-07-01 23:51:15 字數 1003 閱讀 5987

有時候需要將乙個視窗實時截取出視窗畫面,常用的

bitblt

可以將源裝置區域畫素拷貝到目標區域,而在視窗擋住或者隱藏的情況下就無能為力了,這個時候可以用

printwindow

不論是視窗被隱藏,或者被擋住都能截出想要的區域

示例: 

intptr hscrdc = getwindowdc(hwnd);

control control = control.fromhandle(hwnd);

intptr hbitmap = createcompatiblebitmap(hscrdc, control.width, control.height);

intptr hmemdc = createcompatibledc(hscrdc);

selectobject(hmemdc, hbitmap);

bool re= printwindow(hwnd, hmemdc, 0);

bitmap bmp = null;

if(re)

更進一步,如果需要截一張兩個視窗貼在乙個資源視窗上的情況又當如何呢?當視窗都隱藏時又當如何呢?

這個時候思路如下:

1.用視窗dc建立兩個記憶體相容dc,使用createcompatibledc;

2.建立兩個位圖,使用createcompatiblebitmap,分別定向到這兩個記憶體dc,使用selectbitmap;

3.bitblt到兩個相容dc的點陣圖上,如果視窗隱藏、遮擋則使用printwindow,將視窗繪到重定向的dc的點陣圖上;

4.如果需要將乙個視窗覆蓋住另乙個視窗的一部分,則使用stretchblt將乙個dc上的區域貼到另乙個dc上即可。

重點:stretchblt需要在printwindow之後呼叫,否則由於printwindow最終使用wm_paint可能會在重新整理視窗時將已經貼在上邊的部分刷沒掉。

涉及到的dc和點陣圖較多,不能用錯。

VC擷取螢幕 發布日期 2007 8 18

一直對gid 不是很懂,今天狠下心來看了一天的gdi,主要是參照著msdn看,感覺還是有點收穫的。根據msdn寫了乙個小小的程式,僅僅就是擷取螢幕,另外可以將其儲存到剪貼簿裡。以下為源 capturing image.cpp 定義應用程式的入口點。include stdafx.h include c...

關於螢幕程式設計

abap 中開發的程式分2種。report 和dialog.在report 程式設計中,sap系統中已經安排了事件流執行順序。我們只要在相應的事件塊塊中敲上 程式會按照事件塊的先後順序執行的。report 事件流大概如下 initialization at selection at selectio...

關於螢幕適配

目前主流裝置的長寬比為16比9,該比例的占有率還在持續上公升中。且在等寬情況下,該比例下的長為最大,因此在設計時以16比9為基礎,螢幕適配時只要對更矮的比例進行適配就可以了。2014.3.29日 主流android裝置解析度演示文稿 考慮如下情況,螢幕四角採用相對布局停靠有四個ui物件,有個跟當前螢...