C++實現(xiàn)屏幕截圖功能
本文實例為大家分享了C++實現(xiàn)全屏截圖功能的具體代碼,供大家參考,具體內(nèi)容如下
最近維護的項目,在某些情況下,光有日志還不行,于是添加了截圖功能,特定情況下,會自動截圖,輔助分析,從而改進程序。以下是截圖實現(xiàn)代碼。
void CDemoDlg::ScreenShot(void)
{
CWnd *pDesktop = GetDesktopWindow();
CDC *pdeskdc = pDesktop->GetDC();
CRect re;
//獲取窗口的大小
pDesktop->GetClientRect(&re);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pdeskdc, re.Width(), re.Height());
//創(chuàng)建一個兼容的內(nèi)存畫板
CDC memorydc;
memorydc.CreateCompatibleDC(pdeskdc);
//選中畫筆
CBitmap *pold = memorydc.SelectObject(&bmp);
//繪制圖像
memorydc.BitBlt(0, 0, re.Width(), re.Height(), pdeskdc, 0, 0, SRCCOPY);
//獲取鼠標(biāo)位置,然后添加鼠標(biāo)圖像
CPoint po;
GetCursorPos(&po);
HICON hinco = (HICON)GetCursor();
memorydc.DrawIcon(po.x - 10, po.y - 10, hinco);
//選中原來的畫筆
memorydc.SelectObject(pold);
BITMAP bit;
bmp.GetBitmap(&bit);
//定義 圖像大小(單位:byte)
DWORD size = bit.bmWidthBytes * bit.bmHeight;
LPSTR lpdata = (LPSTR)GlobalAlloc(GPTR, size);
//后面是創(chuàng)建一個bmp文件的必須文件頭
BITMAPINFOHEADER pbitinfo;
pbitinfo.biBitCount = 24;
pbitinfo.biClrImportant = 0;
pbitinfo.biCompression = BI_RGB;
pbitinfo.biHeight = bit.bmHeight;
pbitinfo.biPlanes = 1;
pbitinfo.biSize = sizeof(BITMAPINFOHEADER);
pbitinfo.biSizeImage = size;
pbitinfo.biWidth = bit.bmWidth;
pbitinfo.biXPelsPerMeter = 0;
pbitinfo.biYPelsPerMeter = 0;
GetDIBits(pdeskdc->m_hDC, bmp, 0, pbitinfo.biHeight, lpdata, (BITMAPINFO*)
&pbitinfo, DIB_RGB_COLORS);
BITMAPFILEHEADER bfh;
bfh.bfReserved1 = bfh.bfReserved2 = 0;
bfh.bfType = ((WORD)('M' << 8) | 'B');
bfh.bfSize = size + 54;
bfh.bfOffBits = 54;
//寫入文件
CFile file;
CString strFileName(GetAppPathW().c_str());
strFileName += _T("ScreenShot\\");
CreateDirectory((LPCTSTR)strFileName, NULL);
CTime t = CTime::GetCurrentTime();
CString tt = t.Format("%Y-%m-%d_%H-%M-%S");
strFileName += tt;
strFileName += _T(".bmp");
if (file.Open((LPCTSTR)strFileName, CFile::modeCreate | CFile::modeWrite))
{
file.Write(&bfh, sizeof(BITMAPFILEHEADER));
file.Write(&pbitinfo, sizeof(BITMAPINFOHEADER));
file.Write(lpdata, size);
file.Close();
}
GlobalFree(lpdata);
}
代碼注釋詳盡,我就不多說啥了,保存為bmp無損文件,體積會有些大,朋友可以轉(zhuǎn)化為png格式保存哦。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
- 01-10數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-用棧實現(xiàn)表達式求值的方法詳解
- 01-10使用OpenGL實現(xiàn)3D立體顯示的程序代碼
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10求斐波那契(Fibonacci)數(shù)列通項的七種實現(xiàn)方法
- 01-10C語言 解決不用+、-、&#215;、&#247;數(shù)字運算符做加法
- 01-10使用C++實現(xiàn)全排列算法的方法詳解
- 01-10c++中inline的用法分析
- 01-10用C++實現(xiàn)DBSCAN聚類算法
- 01-10深入全排列算法及其實現(xiàn)方法


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10C#中split用法實例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置


