VC擷取螢幕 發布日期 2007 8 18

2021-04-20 11:36:28 字數 2573 閱讀 8272

一直對gid 不是很懂,今天狠下心來看了一天的gdi,主要是參照著msdn看,感覺還是有點收穫的。根據msdn寫了乙個小小的程式,僅僅就是擷取螢幕,另外可以將其儲存到剪貼簿裡。

以下為源**:

// capturing_image.cpp : 定義應用程式的入口點。

//#include "stdafx.h"

#include "capturing_image.h"

#define max_loadstring 100

// 全域性變數:

hinstance hinst;         // 當前例項

tchar sztitle[max_loadstring];      // 標題欄文字

tchar szwindowclass[max_loadstring];    // 主視窗類名

// 此**模組中包含的函式的前向宣告:

atom     myregisterclass(hinstance hinstance);

bool     initinstance(hinstance, int);

lresult callback wndproc(hwnd, uint, wparam, lparam);

int_ptr callback about(hwnd, uint, wparam, lparam);

void capturescreen(hwnd,hdc);

int apientry _twinmain(hinstance hinstance,

hinstance hprevinstance,

lptstr    lpcmdline,

int       ncmdshow)

hacceltable = loadaccelerators(hinstance, makeintresource(idc_capturing_image));

// 主訊息迴圈:

while (getmessage(&msg, null, 0, 0))

}return (int) msg.wparam;}//

// 函式: myregisterclass()

//// 目的: 註冊視窗類。

//// 注釋:

////    僅當希望

//    此**與新增到 windows 95 中的「registerclas***」

//    函式之前的 win32 系統相容時,才需要此函式及其用法。呼叫此函式十分重要,

//    這樣應用程式就可以獲得關聯的

//    「格式正確的」小圖示。

//atom myregisterclass(hinstance hinstance)

////   函式: initinstance(hinstance, int)

////   目的: 儲存例項控制代碼並建立主視窗

////   注釋:

////        在此函式中,我們在全域性變數中儲存例項控制代碼並

//        建立和顯示主程式視窗。

//bool initinstance(hinstance hinstance, int ncmdshow)

showwindow(hwnd, ncmdshow);

updatewindow(hwnd);

return true;}//

// 函式: wndproc(hwnd, uint, wparam, lparam)

//// 目的: 處理主視窗的訊息。

//// wm_command - 處理應用程式選單

// wm_paint - 繪製主視窗

// wm_destroy - 傳送退出訊息並返回

////

lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)

break;

case wm_paint:

hdc = beginpaint(hwnd, &ps);

// todo: 在此新增任意繪圖**...

capturescreen(hwnd,hdc);

endpaint(hwnd, &ps);

break;

case wm_destroy:

postquitmessage(0);

break;

default:

return defwindowproc(hwnd, message, wparam, lparam);

}return 0;

}// 「關於」框的訊息處理程式。

int_ptr callback about(hwnd hdlg, uint message, wparam wparam, lparam lparam)

break;

}return (int_ptr)false;

}void capturescreen(hwnd hwnd,hdc hdc)

deleteobject(hbmscreen);

deletedc(hdccompatible);

deletedc(hdcscreen);

releasedc(hwnd,hdc);

}

關於螢幕擷取

有時候需要將乙個視窗實時截取出視窗畫面,常用的 bitblt 可以將源裝置區域畫素拷貝到目標區域,而在視窗擋住或者隱藏的情況下就無能為力了,這個時候可以用 printwindow 不論是視窗被隱藏,或者被擋住都能截出想要的區域 示例 intptr hscrdc getwindowdc hwnd co...

vc 獲取螢幕大小

int with getsystemmetrics sm cxfullscreen int heigh getsystemmetrics sm cyfullscreen 通過上邊兩個函式獲取的是顯示螢幕的大小,及不包括工作列等區域。int cx getsystemmetrics sm cxscree...

VC多螢幕顯示

由於工程需要在多個顯示器上顯示不同類容,故查詢了一些資料來滿足這個功能。在vc中分為三步來操作 檢測顯示器個數 讀取螢幕解析度和其他引數 設定程式的顯示座標。第一步 檢測螢幕個數 網上查詢到的通用方法有兩個 enumdisplaydevicess和getsystemmetrics,下面分別介紹一下 ...