GetDc中的全螢幕擷取的問題 |
答題得分者是:aftcast
|
roviury
一般會員 發表:3 回覆:49 積分:15 註冊:2008-08-28 發送簡訊給我 |
GetDc中的全螢幕擷取的問題
GetDc(0)與GetDc(GetDesktopWindow()) 同樣可以取得螢幕的DC,到底有什麼方別呢??? 難道是.... 速度上,1000次迴轉總時間 分別是 62 與 109(至125) 時間差不多相差一倍 0好像是HWND_DESKTOP.....同樣是桌面?? |
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
roviury
一般會員 發表:3 回覆:49 積分:15 註冊:2008-08-28 發送簡訊給我 |
那麼2者在GetDc中有什麼分別呢???
===================引 用 pedro 文 章=================== 一跟二基準不完全相同,第二個有去呼叫GetDesktopWindow()的時間 Parameters
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
我沒去試,但學理上應該不太一樣。
desktop是指桌面,應該是指explorer的windows,而在它上面可能會有許多的程式的windows在其上面。 screen應該沒有上下層的問題,指的是單一的整體畫面,不管整個畫面有幾個windows。 可是用這樣的實驗看看,打開task
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
我沒去試,但學理上應該不太一樣。
desktop是指桌面,應該是指explorer的windows,而在它上面可能會有許多的程式的windows在其上面。 screen應該沒有上下層的問題,指的是單一的整體畫面,不管整個畫面有幾個windows。 如果用capture的程式概念來看,會不會一個是取到底層的desktop畫面,而另一個是整個monitor的畫面?
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
參考陳寬達 Delphi 深度歷險 一書中第五章一頭栽入桌面的世界一開始的說明
底下有該全文下載的網址: http://delphi.ktop.com.tw/board.php?cid=32&fid=107&tid=84696 |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
剛寫了一小小段程式證明了我的看法。我是使用bcb。
[code c#] void __fastcall TForm1::Button1Click(TObject *Sender) { HDC hdc1, hdc2; HWND h; hdc1 = ::GetDC(0); h = GetDesktopWindow(); hdc2 = ::GetDC(h); ::TextOut(hdc1,1000,700,"AAABBB",6); ::TextOut(hdc2,1024,700,"CCCDDD",6); ::MoveToEx(hdc2,800,600,NULL); ::LineTo(hdc2,1000,700); } [/code] 證明方式: 1/ 正常情形下run程式,只會看到AAABBB。 2/ 先把程式叫出來,但不要執行。然後打開工作管理員,找到EXPLORER程序,然後結束它。此時去執行剛的程式,會發現所有都畫出來,即hdc2的資源其實是有畫的。 3/ 記得在工作管理員上的「新工作」上再輸入explorer以回復正常畫面。(不要實驗後就回不去了 -_-) 結論: Desktop是指最底層的地區(有層的概念),而此地區的上層就是explorer的區塊,故當explorer在時,你看不到輸出。 當使用GetDC(0)時,表screen(無層的概念,指整個畫面),此時不管有多少window放在一起,它總是可以畫在"最上面"。 就區塊的大小來說二者是一樣大的。但觀念上還是不同! 就陳寬達的書上的說明來看,它認為0可能是desktop或是parent window,然而在GetDC中指定0時並非如此。僅管多數的情形如陳先生所說的。 就msdn的GetDC的說明來看,它也指出當設定null時是表示SCREEN。SCREEN並不等於DESKTOP。
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |