好,大家好,我是Simon。接下來的時間由我和大家一起學習VC編程。 那麼我們現在的話就是開始去進入實際的一個程式設計階段。 那麼這個的話是說編寫一個全屏截圖工具。那麼這個工具的話就是我們採用一個cimage的一個類。 然後對它進行一個截圖操作。那麼採用這個類的話,主要是方便,然後再說快捷。在這... ...
本次我們採用一個CImage類來對屏幕進行截圖,方便,快捷。
用到的函數有: GetDC()
GetDeviceCaps()
CImage成員函數(Create();GetDC()) BitBlt()
註: CBitmap類和靜態圖片控制項的功能是比較弱的,它只能顯示出在資源中的圖標、點陣圖、游標以及圖元文件的內容
Image控制項可 以顯示出絕大多數的外部圖像文件(BMP、GIF、JPEG等)
播放視頻:
如未播放請點擊播放:
https://www.bilibili.com/video/av30031453/
下麵是語錄:
好,大家好,我是Simon。接下來的時間由我和大家一起學習VC編程。
那麼首先講一下前言部分就是說跟培訓的一個初衷。
第一的話是感謝網友們對我一直的支持跟信賴。
然後就是說這一套課程和大家一起來學,因為現在時間比較充足,然後我定了一個大綱跟大家一起來學這套課程。
課程的話目前是定為十個小程式,然後分別來講一下windows程式開發,然後裡面涉及的內容的話也相對的比較多,裡面有多媒體,文件操作,桌面編程文件加解密、控制項運用等等知識,那麼這套課程的話跟大家一起學,首先就是說我個人的話也是一個菜鳥,那麼在講課的過程當中,要是有什麼錯的地方,還請大家多多包涵,那麼這就是我定製的十個小程式,每一個程式裡面可能會有多節課。那麼我們的第一課的話,就是說編寫一個屏幕截圖工具,那麼這屏幕截圖的話可能會目前我想實現有三個功能,就是全屏截圖,然後對指定大小截圖,或者說對某個視窗進行截圖,那麼總共就是說有三個功能,截圖軟體。
那麼我們現在的話就是開始去進入實際的一個程式設計階段。
那麼這個的話是說編寫一個全屏截圖工具。那麼這個工具的話就是我們採用一個cimage的一個類。
然後對它進行一個截圖操作。那麼採用這個類的話,主要是方便,然後再說快捷。在這的話就是說這裡是用到的函數,用到的函數的話可能就有以下這幾個。然後就是說我為什麼用這一個類,然後這裡我要給大家解釋,就是說這一個類的話,它是可以造成不同的圖片,不同的圖片他都能夠處理。那麼這個的話就是編寫起來會相對比較麻煩,然後他也就是只能載入一個BMP的一個圖像,那麼現在我們來打開我們的開發環境,首先我們新建一個項目,然後我們命名為屏幕截圖,然後我們直接選擇MFC的一個應用程式然後選擇一個對話框程式我直接點完成!
這些的話我們都刪除在編寫之前的話,我們先先看一下我們系統裡面的一個截圖工具,那麼這裡就顯示截圖了。我們本次的話就是來實現系統的這樣一個截圖工具的一些功能,然後我們看到這裡它是有四個不同的選項,那麼我們來講的話就是講全屏截圖,視窗截圖。這裡是矩形截圖,大概的話就是實現就是這樣的一個功能,比如說我們這一個截圖,可以看到它是截下來了,這也是保存。那麼我們這一次的話看一下先這樣。我們先添加按鈕。
我這裡就是一個按鈕,全屏截圖,然後再把他的ID進行了一下修改,然後我們雙擊它來到我們的代碼部分,那麼我們開始編寫之前,我們看一下,PPT就是說用到了這一些函數。那麼第一個的話我們是用蓋的dc,給到第C的話,它是獲取我們先要獲取截圖的對象,那麼我們就先桌面獲取桌面。
面就是句柄,獲取它的巨別,用全局的。這裡是需要一個視窗疾病唱歌級別,我們獲取桌面,那麼我們就成空進去。這裡安徽至H bc,然後定義一個獲取一個桌面。get DC,然後獲取到一個。
視窗獲取到視窗疾病以後或者獲取這個是屏幕疾病獲取到屏幕疾病以後,我們先看一下,讓這一個API這個的話它是去獲取我們看一下班組文件,。
我們直接去看一下它的函數的一個介紹。這個函數的話它是訪問一個指定設備,設備制定,設備設備描述表。然後參數的話它是一個區別一個DC的一個級別,這是一個返回的一個線,那麼這個參數的話是下麵這些字。這裡的話就直接就去。然後首先的話我們要獲取像素,我們先獲取他的一個像素,
他的胃阿比特像素點。那麼說過去,獲取到桌面的像素,然後我們還要去獲取它的一個長度和高度。還是用這個來。獲取的,還是獲取對象。這個是物理的。然後我們就獲取這個的寬度。像素的。我們是或指責的。
我知道。那麼這裡是高度寬度,我們都獲取以後,然後我們接下來就是去進行。那先寬度夠,我們構造一個cm IG的一個兌現獲取對象,還是一個然後定義對象,定義完以後,我們去調用它的一個考慮的函數。然後這一次寬度跟高度。這裡是看一下。它這個是整形,它有個返回值。這個是返回一個指定的值到這個線。所需。
的一個現值。回,我們再先接受他。這個的話就是溫度這樣子。然後這裡的寬度。再一個的話,它是我們獲取的像素點,比特的數目。最後一個看,最後一個是一個標誌,然後他這個有預設值了,預設值我們就不管他。他也預設。然後這裡創建了我們就是說實力一個這樣的一個對象以後,然後我們再進行了一個參見。就說創建了一個畫布,創建了一個畫布,劃撥的話是跟我們桌面的一個大小是一樣的,就說一個相同大小的一個畫布。然後畫布創建完以後,我們先來獲取獲取這個疾病這個劇。過去的
獲取他。獲取完以後我們進行進行拷貝,把我們的圖片給拷拷上去。
這個函數是大概的意思是什麼?這個是進行一個轉換。然後是他這一個就是說從一個地方把數據然後進行一個轉換,大概意思是這樣子,。
然後這裡是它的一些參數,這個是它的一個區別。然後是我們這也就押它的高度寬度。然後看一下,這也是他的一個dc。然後這裡填的話就是我們剛纔獲取到了一個記憶體的一個基本的和XY的話,我們是不需要那麼。我們直接就然後這裡是寬度,寬度的話就是我們之前上面獲取到的。考,然後這裡是我們的一個目的。然後是是它的一個圓圓的話,就是我們上面獲取到的一個區別,他能獲取到的。然後這裡是零填充。然後最後一個的話是。這是最後一個。游標代碼,這個代碼定義,一個顏色數據來自元。舉行合適進行一個計算的是一個什麼?設矩形。然後參數是來自。
上面最是那麼這個是黑色,我們是看一下,我們直接用這一個拷貝拷貝雲舉行的一些目的。我們就靠這個就用這個。這是園舉行直接考到一個目的,去。我們就把它一個數據直接拷過來,直接拷過去。然後我們進行拷貝以後,然後我們是對他的話是我就對他進行寫到文件去,因為這裡我們現在也不進行一個行,沒有其他處理,我們就先試一下,能不能把它給寫到我們這個文件里去,這一個類裡面的話,它是有一個怎麼賒貨的一個保存,我們可以去看一下這個類。這個類裡面有各類成員,然後這裡有很多的一些它的一些成員函數,那麼這一些的話我就不細講了。那麼我們這一次用到的話就是這一個創建了一個這樣的對象,為圖,然後我們再進行對它是進行了一個創建以後是我們來對它保存。這個是保存選項。這是不能保存圖片的一個選項。它是指定。好的,那麼保存。來看一下。這是一個指向這樣的一個對象,包含的文件數據,然後這個是文件的名,這是它的一個類型。保存為什麼類型?那麼我們這裡就是直接文件名,文件名的我們保存。C盤去寶城。。有兩個。我們用的這個的話,它是屬於一個是它的一個內成員,那麼我們這裡直接選第一個。這個的話是我們保存的是這種格式的這種格式。然後這裡就完成了,然後這裡邊一。這裡有個失敗。他說未定義,要加這個東西。
來生成一下。給的DC剛纔是用這個。這裡有。備註,那他是說是調用了這個東西的話,是你必須要去調用這個東西。類似DC,那麼就是說要是放他這裡的話,我們現在進行保存完以後就把它釋放掉。那麼這樣的話我們的代碼就寫完了,然後我們來測試一下,看看他是否能夠生成我們。就是說想要的效果。我們先到C盤來看一下。C盤的話這裡是沒有東西的。那麼我們現在分析,然後這裡是點一下,我們來看一下它有沒有生成文件。可以看到這裡它是生成了。然後這是屏幕的大小。這樣的話我們就成功的把這個視頻,把這個文件把桌面的截圖就交給成功截取下來了,那麼這些東西的話就是效果我們就實現了。實現了一個全屏截圖的這樣一個功能。那麼好,那麼我們這節課的話就講到這裡,感謝大家收看。