vc截圖源碼
1. VC++截圖編程:如何能完整地截圖要求是能夠截取層級窗口的方法。
BitBlt 的最後一個參數,通常我們用SRCCOPY,對吧?
改成 SRCCOPY | CAPTUREBLT
原因和細節請參看MSDN
2. VC++截圖方法
HBITMAP CopyDCToBitmap(HDC hScrDC, LPRECT lpRect)
{
 HDC        hMemDC;      
 // 屏幕和內存設備描述表
 HBITMAP    hBitmap,hOldBitmap;   
 // 點陣圖句柄
 int       nX, nY, nX2, nY2;      
 // 選定區域坐標
 int       nWidth, nHeight;      
 // 點陣圖寬度和高度
 // 確保選定區域不為空矩形
 if (IsRectEmpty(lpRect))
  return NULL;
 
 // 獲得選定區域坐標
 nX = lpRect->left;
 nY = lpRect->top;
 nX2 = lpRect->right;
 nY2 = lpRect->bottom;
 nWidth = nX2 - nX;
 nHeight = nY2 - nY;
 //為指定設備描述表創建兼容的內存設備描述表
 hMemDC = CreateCompatibleDC(hScrDC);
 // 創建一個與指定設備描述表兼容的點陣圖
 hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
 // 把新點陣圖選到內存設備描述表中
 hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
 // 把屏幕設備描述表拷貝到內存設備描述表中
 StretchBlt(hMemDC,0,0,nWidth,nHeight,hScrDC,nX,nY,nWidth,nHeight,SRCCOPY);
 //BitBlt(hMemDC, 0, 0, nWidth, nHeight,hScrDC, nX, nY, SRCCOPY);
 //得到屏幕點陣圖的句柄 
 hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
 //清除 
 
 DeleteDC(hMemDC);
 DeleteObject(hOldBitmap);
 // 返回點陣圖句柄
 return hBitmap;
}
//把HBITMAP保存成點陣圖
BOOL SaveBmp(HBITMAP hBitmap, CString FileName)
{
 HDC hDC;
 //當前解析度下每象素所佔位元組數
 int iBits;
 //點陣圖中每象素所佔位元組數
 WORD wBitCount;
 //定義調色板大小, 點陣圖中像素位元組大小 ,點陣圖文件大小 , 寫入文件位元組數 
 DWORD dwPaletteSize=0, dwBmBitsSize=0, dwDIBSize=0, dwWritten=0; 
 //點陣圖屬性結構 
 BITMAP Bitmap;  
 //點陣圖文件頭結構
 BITMAPFILEHEADER bmfHdr;  
 //點陣圖信息頭結構 
 BITMAPINFOHEADER bi;  
 //指向點陣圖信息頭結構  
 LPBITMAPINFOHEADER lpbi;  
 //定義文件,分配內存句柄,調色板句柄 
 HANDLE fh, hDib, hPal,hOldPal=NULL;
3. VC++編程,做BMP圖片的截圖!!
調用API 
1)OpenClipboard 
2)EmptyClipBoard 
3) SetClipBoardData
剛剛幫你找的。不知道這些對你有用沒?
4. 求VC++屏幕錄象並附帶截圖的源代碼
你要求和你的付出,好像不是很成正比呀。
這個項目要做的話可以,恐怕要出錢的。
5. VC++優化截屏如何實現
兩種方法。
第二種:參考一位網友的。
MFC中就有截取屏幕的相關函數:
ScrDC.CreateDC("DISPLAY", NULL, NULL, NULL);
具體函數如下:
//存儲背景圖片(成員變數)
CBitmap* m_pBackBitmap;
/*******************************
* 拷貝屏幕固定區域
* 參數:
* xStartPt  - 拷貝屏幕的起始點X坐標
* yStartPt  - 拷貝屏幕的起始點Y坐標
* width      - 拷貝寬度
* height     - 拷貝高度
* xToCopy  - 拷貝目的地的起始點X坐標
* yToCopy  - 拷貝目的地的起始點Y坐標
*******************************/
void CMyFun::CopyScreenToBitmap(xStartPt, yStartPt, width, height, xToCopy, yToCopy)
{
        //NEW資源(調用一次重新拷貝一次)
        if (m_pBackBitmap != NULL)
        {
                delete m_pBackBitmap;
                m_pBackBitmap = NULL;
        }
        m_pBackBitmap = new CBitmap();
        CDC ScrDC,MemDC;
        ScrDC.CreateDC("DISPLAY", NULL, NULL, NULL);
        MemDC.CreateCompatibleDC(&ScrDC);
        m_pBackBitmap->CreateCompatibleBitmap(&ScrDC,width,height);
        MemDC.SelectObject(m_pBackBitmap);
        //開始拷貝
        MemDC.BitBlt(xStartPt, yStartPt, width, height,&ScrDC,xToCopy,yToCopy,SRCCOPY);
        ScrDC.DeleteDC();
        MemDC.DeleteDC();
}
調用函數,實現截取全屏: 
//取的屏幕解析度
int width = ::GetSystemMetrics(SM_CXSCREEN);
int height = ::GetSystemMetrics(SM_CYSCREEN);
this->CopyScreenToBitmap(0,0,width,height,0,0);
//這時m_pBackBitmap指向的CBitmap對象就存著全屏的圖象了
第一種:先截取屏幕保存為BMP格式文件,然後在VC資源中導入該點陣圖。
  CBitmap bitmap;
  bitmap.LoadBitmap(IDB_BITMAP1);   //IDB_BITMAP1為導入點陣圖的ID。
  CDC dc;
  dc.CreateCompatibleDC(pDC);  //創建兼容DC
  dc.SelectObject(&bitmap);    //選進設備表
  BITMAP bmp;
  bitmap.GetBitmap(&bmp);
  CRect rect;
  GetClientRect(&rect);
  pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);     //注意參數SRCCOPY
6. 求一個用VC6.0寫的截圖程序
CRect rect(m_StartPoint.x,m_StartPoint.y,m_EndPoint.x,m_EndPoint.y);
		//ClientToScreen(rect);
		m_leftdown =0;
		Invalidate(FALSE);//更新界面  
		CClientDC dc(this);
		/*	HBITMAP bitmap =CreateCompatibleBitmap(dc.m_hDC,rect.Width(),rect.Height());*/
		//復制矩形內容
		CDC bmemDC;
		bmemDC.CreateCompatibleDC(GetDC());
		CBitmap bmprect;
		bmprect.CreateCompatibleBitmap(GetDC(),rect.Width(),rect.Height());
		bmemDC.SelectObject(&bmprect);
/////////////////////////////////////////////////////////////////////////////////////////
		BITMAP mbitmap;	
		//將點陣圖信息填充到一個緩沖區內
		bmprect.GetBitmap(&mbitmap);
		bmemDC.BitBlt(0,0,mbitmap.bmWidth,mbitmap.bmHeight,GetDC(),m_StartPoint.x,m_StartPoint.y,SRCCOPY);
		BITMAPINFOHEADER bih = {0};//點陣圖信息頭
		bih.biBitCount = mbitmap.bmBitsPixel;//每個像素位元組大小
		bih.biCompression = BI_RGB;
		bih.biHeight = mbitmap.bmHeight;//高度
		bih.biPlanes = 1;
		bih.biSize = sizeof(BITMAPINFOHEADER);
		bih.biSizeImage = mbitmap.bmWidthBytes * mbitmap.bmHeight;//圖像數據大小
		bih.biWidth = mbitmap.bmWidth;//寬度
		BITMAPFILEHEADER bfh = {0};//點陣圖文件頭
		bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//到點陣圖數據的偏移量
		bfh.bfSize = bfh.bfOffBits + mbitmap.bmWidthBytes * mbitmap.bmHeight;//文件總的大小
		bfh.bfType = (WORD)0x4d42;
		byte * p = new byte[mbitmap.bmWidthBytes * mbitmap.bmHeight];//申請內存保存點陣圖數據
		GetDIBits(bmemDC.m_hDC, (HBITMAP) bmprect.m_hObject, 0, rect.Height(), p,
			(LPBITMAPINFO) &bih, DIB_RGB_COLORS);//獲取點陣圖數據
		////////////////////////////////////////////////////////////////////////////////////////
		FILE *fp = fopen("bitfile.bmp", "w+b");
		fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), fp);//寫入點陣圖文件頭 
		fwrite(&bih, 1, sizeof(BITMAPINFOHEADER), fp);//寫入點陣圖信息頭
		fwrite(p, 1, mbitmap.bmWidthBytes * mbitmap.bmHeight, fp);//寫入點陣圖數據
		fclose(fp);
7. 已有一個基於vc的用本機攝像頭錄像,截圖的代碼,如何加工成一個類似c/s模式的。
用socket來做網路功能,實現相互能發收數據,圖片也是數據,把圖片的參數信息(如尺寸等)發送到伺服器端,然後把圖片的數據發送到伺服器端,伺服器端收到後根據參數和數據將圖像繪制在界面上,考慮到傳輸效率,還可以對圖像進行編碼(圖片壓縮方式如jpg,gif等)後再傳輸,伺服器端當然就要相應的做解碼工作了。
要做成這個東西,兩個方面的知識要掌握好:1.視頻採集,圖像,圖像顯示原理,2.socket網路編程。
網上可以找到視頻傳輸的代碼,自己可以下回來研究研究。
8. 怎麼用VC 實現屏幕截圖
http://blog.csdn.net/zhoujielunmi/article/details/8140887
改成MFC版本即可。
9. 用VC++6.0做一個小型屏幕截圖程序
很多軟體有這種功能,如qq、抓圖工具,不過這種源代碼很稀少哦,一般不會外泄的。
而且這么有難度的問題居然一點懸賞分都不給。
10. 怎麼用VC++實現屏幕截圖
可以,而且不是非常復雜,但是,我建議你學習一下基本的Windows API程序設計。不然以後會碰到無窮無盡的問題,沒有這個基礎,是不行的。代碼給你隨便貼一段吧:HBITMAP CopyDCToBitmap(HDC hScrDC, LPRECT lpRect)
{
 HDC        hMemDC;      
 // 屏幕和內存設備描述表
 HBITMAP    hBitmap,hOldBitmap;   
 // 點陣圖句柄
 int       nX, nY, nX2, nY2;      
 // 選定區域坐標
 int       nWidth, nHeight;      
 // 點陣圖寬度和高度
 // 確保選定區域不為空矩形
 if (IsRectEmpty(lpRect))
  return NULL;
 
 // 獲得選定區域坐標
 nX = lpRect->left;
 nY = lpRect->top;
 nX2 = lpRect->right;
 nY2 = lpRect->bottom;
 nWidth = nX2 - nX;
 nHeight = nY2 - nY;
 //為指定設備描述表創建兼容的內存設備描述表
 hMemDC = CreateCompatibleDC(hScrDC);
 // 創建一個與指定設備描述表兼容的點陣圖
 hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
 // 把新點陣圖選到內存設備描述表中
 hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
 // 把屏幕設備描述表拷貝到內存設備描述表中
 StretchBlt(hMemDC,0,0,nWidth,nHeight,hScrDC,nX,nY,nWidth,nHeight,SRCCOPY);
 //BitBlt(hMemDC, 0, 0, nWidth, nHeight,hScrDC, nX, nY, SRCCOPY);
 //得到屏幕點陣圖的句柄 
 hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
 //清除 
 
 DeleteDC(hMemDC);
 DeleteObject(hOldBitmap);
 // 返回點陣圖句柄
 return hBitmap;
}
//把HBITMAP保存成點陣圖
BOOL SaveBmp(HBITMAP hBitmap, CString FileName)
{
 HDC hDC;
 //當前解析度下每象素所佔位元組數
 int iBits;
 //點陣圖中每象素所佔位元組數
 WORD wBitCount;
 //定義調色板大小, 點陣圖中像素位元組大小 ,點陣圖文件大小 , 寫入文件位元組數 
 DWORD dwPaletteSize=0, dwBmBitsSize=0, dwDIBSize=0, dwWritten=0; 
 //點陣圖屬性結構 
 BITMAP Bitmap;  
 //點陣圖文件頭結構
 BITMAPFILEHEADER bmfHdr;  
 //點陣圖信息頭結構 
 BITMAPINFOHEADER bi;  
 //指向點陣圖信息頭結構  
 LPBITMAPINFOHEADER lpbi;  
 //定義文件,分配內存句柄,調色板句柄 
 HANDLE fh, hDib, hPal,hOldPal=NULL; 
 
 //計算點陣圖文件每個像素所佔位元組數 
 hDC = CreateDC("DISPLAY", NULL, NULL, NULL);
 iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES); 
 DeleteDC(hDC); 
 if (iBits <= 1)  wBitCount = 1; 
 else if (iBits <= 4)  wBitCount = 4; 
 else if (iBits <= 8)  wBitCount = 8; 
 else      wBitCount = 24; 
 
 GetObject(hBitmap, sizeof(Bitmap), (LPSTR)&Bitmap);
 bi.biSize   = sizeof(BITMAPINFOHEADER);
 bi.biWidth   = Bitmap.bmWidth;
 bi.biHeight   = Bitmap.bmHeight;
 bi.biPlanes   = 1;
 bi.biBitCount  = wBitCount;
 bi.biCompression = BI_RGB;
 bi.biSizeImage  = 0;
 bi.biXPelsPerMeter = 0;
 bi.biYPelsPerMeter = 0;
 bi.biClrImportant = 0;
 bi.biClrUsed  = 0;
 
 dwBmBitsSize = ((Bitmap.bmWidth * wBitCount + 31) / 32) * 4 * Bitmap.bmHeight;
 
 //為點陣圖內容分配內存 
 hDib = GlobalAlloc(GHND,dwBmBitsSize + dwPaletteSize + sizeof(BITMAPINFOHEADER)); 
 lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib); 
 *lpbi = bi; 
 // 處理調色板  
 hPal = GetStockObject(DEFAULT_PALETTE); 
 if (hPal) 
 { 
  hDC = ::GetDC(NULL); 
  hOldPal = ::SelectPalette(hDC, (HPALETTE)hPal, FALSE); 
  RealizePalette(hDC); 
 }
 // 獲取該調色板下新的像素值 
 GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight, (LPSTR)lpbi + sizeof(BITMAPINFOHEADER) 
   +dwPaletteSize, (BITMAPINFO *)lpbi, DIB_RGB_COLORS); 
 
 //恢復調色板  
 if (hOldPal) 
 { 
  ::SelectPalette(hDC, (HPALETTE)hOldPal, TRUE); 
  RealizePalette(hDC); 
  ::ReleaseDC(NULL, hDC); 
 } 
 //創建點陣圖文件  
 fh = CreateFile(FileName, GENERIC_WRITE,0, NULL, CREATE_ALWAYS, 
     FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); 
 
 if (fh == INVALID_HANDLE_VALUE)  return FALSE; 
 
 // 設置點陣圖文件頭 
 bmfHdr.bfType = 0x4D42; // "BM" 
 dwDIBSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwPaletteSize + dwBmBitsSize;  
 bmfHdr.bfSize = dwDIBSize; 
 bmfHdr.bfReserved1 = 0; 
 bmfHdr.bfReserved2 = 0; 
 bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER) + dwPaletteSize; 
 // 寫入點陣圖文件頭 
 WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL); 
 // 寫入點陣圖文件其餘內容 
 WriteFile(fh, (LPSTR)lpbi, dwDIBSize, &dwWritten, NULL); 
 //清除  
 GlobalUnlock(hDib); 
 GlobalFree(hDib); 
 CloseHandle(fh); 
 return TRUE;
}
