第一課WINDOWS開發編寫全屏截圖工具

来源:https://www.cnblogs.com/simont/archive/2018/08/22/9520480.html
-Advertisement-
Play Games

好,大家好,我是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盤的話這裡是沒有東西的。那麼我們現在分析,然後這裡是點一下,我們來看一下它有沒有生成文件。可以看到這裡它是生成了。然後這是屏幕的大小。這樣的話我們就成功的把這個視頻,把這個文件把桌面的截圖就交給成功截取下來了,那麼這些東西的話就是效果我們就實現了。實現了一個全屏截圖的這樣一個功能。那麼好,那麼我們這節課的話就講到這裡,感謝大家收看。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 才開通博客沒幾天,不知道寫什麼東西,就把最近在項目中做的東西分享一下,開通博客也可以監督一下自己,技術的路很遙遠,希望能通過寫博客來讓自己走的更遠。 一般在web項目中都需要定義一個全局異常來處理一些業務方面的異常,下麵是自定義異常的一些代碼。 1.自定義一個異常,然後繼承RuntimeExcept ...
  • 線性表的鏈式存儲 鏈式結構存儲密度小,存儲空間利用率低 只能順序存儲(其中指針域用來表明節點間的關係) 插入和刪除操作方便 代碼如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 typedef int ElemType; 4 5 typedef str ...
  • 在MyBatis中MapperProxyFactory,MapperProxy,MapperMethod是三個很重要的類。 弄懂了這3個類你就大概清楚Mapper介面與SQL的映射, 為什麼是介面,沒有實例類也可以完成註入或者調用。 其中MapperMethod可以參考:MapperMethod源碼 ...
  • 用到的: import uuid uuid是128位的全局唯一標識符, 通常用32位的一個字元串的形式來表現 uuid.uuid1() 基於MAC地址,時間戳,隨機數來生成唯一的uuid,可以保證全球範圍內的唯一性 uuid.uuid3() 通過計算一個命名空間和名字的md5散列值來給出一個uuid ...
  • 前言 在 "上一篇" 中我們學習了創建型模式的建造者模式和原型模式。本篇則來學習下結構型模式的適配器模式和橋接模式。 適配器模式 簡介 適配器模式是作為兩個不相容的介面之間的橋梁。這種類型的設計模式屬於結構型模式,它結合了兩個獨立介面的功能。 簡單的來說就是通過某個介面將不相容的兩個類進行相容,俗稱 ...
  • jsp 內置對象 轉發與重定向的比較 重定向和轉發有一個重要的不同:當使用轉發時,JSP容器將使用一個內部的方法來調用目標頁面,新的頁面繼續處理同一個請求,而瀏覽器將不會知道這個過程。 與之相反,重定向方式的含義是第一個頁面通知瀏覽器發送一個新的頁面請求。因為,當你使用重定向時,瀏覽器中所顯示的UR ...
  • 所有文章僅是筆記!都是看網上大神或者視頻學習來的。 一、軟體層面機器碼翻譯(為了吹的牛B:write once run everywhere) 二、記憶體管理:java經久不衰的原因之一 ...
  • Python的錯誤異常在大部分IDE編輯器中則可以直接顯示出來,便於開發人員的調試及修改工作,對初學者也比較友好。 Python中包含錯誤和異常兩種情況,錯誤主要是常見的語法錯誤SyntaxError,並且在錯誤提示中會有倒三角箭頭的修改指示位置;python中的另外一種錯誤提醒叫做異常,指的是在語 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...