有時候需要將乙個視窗實時截取出視窗畫面,常用的
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物件,有個跟當前螢...