zoukankan      html  css  js  c++  java
  • 窗口截图(可指定HWND窗口句柄)(三篇文章)

    [cpp] view plain copy
     
    1. BOOL SaveHwndToBmpFile(HWND hWnd, LPCTSTR lpszPath)  
    2. {  
    3.     HWND hDesktop = ::GetDesktopWindow();  
    4.     ASSERT(hDesktop);  
    5.     if(NULL == hWnd)  
    6.     {  
    7.         hWnd = hDesktop;  
    8.     }  
    9.     RECT rect;  
    10.     ::GetWindowRect(hWnd, &rect);  
    11.   
    12.     int nWidht = rect.right - rect.left;  
    13.     int nHeight = rect.bottom - rect.top;  
    14.   
    15.     HDC hSrcDC = ::GetWindowDC(hWnd);  
    16.     ASSERT(hSrcDC);  
    17.     HDC hMemDC = ::CreateCompatibleDC(hSrcDC);  
    18.     ASSERT(hMemDC);  
    19.     HBITMAP hBitmap = ::CreateCompatibleBitmap(hSrcDC, nWidht, nHeight);  
    20.     ASSERT(hBitmap);  
    21.     HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hMemDC, hBitmap);  
    22.     ::BitBlt(hMemDC, 0, 0, nWidht, nHeight, hSrcDC, 0, 0, SRCCOPY);  
    23.   
    24.     BITMAP bitmap = {0};  
    25.     ::GetObject(hBitmap, sizeof(BITMAP), &bitmap);  
    26.     BITMAPINFOHEADER bi = {0};  
    27.     BITMAPFILEHEADER bf = {0};  
    28.       
    29.     CONST int nBitCount = 24;  
    30.     bi.biSize = sizeof(BITMAPINFOHEADER);  
    31.     bi.biWidth = bitmap.bmWidth;  
    32.     bi.biHeight = bitmap.bmHeight;  
    33.     bi.biPlanes = 1;  
    34.     bi.biBitCount = nBitCount;  
    35.     bi.biCompression = BI_RGB;  
    36.     DWORD dwSize = ((bitmap.bmWidth * nBitCount + 31) / 32) * 4 * bitmap.bmHeight;  
    37.   
    38.     HANDLE hDib = GlobalAlloc(GHND, dwSize + sizeof(BITMAPINFOHEADER));  
    39.     LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);  
    40.     *lpbi = bi;  
    41.   
    42.     ::GetDIBits(hMemDC, hBitmap, 0, bitmap.bmHeight, (BYTE*)lpbi + sizeof(BITMAPINFOHEADER), (BITMAPINFO*)lpbi, DIB_RGB_COLORS);  
    43.   
    44.     try  
    45.     {  
    46.         CFile file;  
    47.         file.Open(lpszPath, CFile::modeCreate | CFile::modeWrite);  
    48.         bf.bfType = 0x4d42;  
    49.         dwSize += sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);  
    50.         bf.bfSize = dwSize;  
    51.         bf.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);  
    52.   
    53.         file.Write((BYTE*)&bf, sizeof(BITMAPFILEHEADER));  
    54.         file.Write((BYTE*)lpbi, dwSize);  
    55.         file.Close();  
    56.     }  
    57.     catch(CFileException* e)  
    58.     {  
    59.         e->ReportError();  
    60.         e->Delete();  
    61.     }  
    62.       
    63.     GlobalUnlock(hDib);  
    64.     GlobalFree(hDib);  
    65.       
    66.     ::SelectObject(hMemDC, hOldBitmap);  
    67.     ::DeleteObject(hBitmap);  
    68.     ::DeleteDC(hMemDC);  
    69.     ::ReleaseDC(hWnd, hSrcDC);  
    70.   
    71.     return TRUE;  
    72. }  
    73.   
    74. // 调用方法  
    75. HWND hWnd = ::FindWindow(NULL, _T("XXX"));     
    76. if(hWnd)     
    77. {     
    78.    SaveHwndToBmpFile(hWnd, _T("F://12.bmp"));     
    79. }   

    http://blog.csdn.net/visualeleven/article/details/6202796

    http://blog.csdn.net/visualeleven/article/details/6206715

    http://blog.csdn.net/visualeleven/article/details/6093484

  • 相关阅读:
    bzoj1415 NOI2005聪聪和可可
    Tyvj1952 Easy
    poj2096 Collecting Bugs
    COGS 1489玩纸牌
    COGS1487 麻球繁衍
    cf 261B.Maxim and Restaurant
    cf 223B.Two Strings
    cf 609E.Minimum spanning tree for each edge
    cf 187B.AlgoRace
    cf 760B.Frodo and pillows
  • 原文地址:https://www.cnblogs.com/findumars/p/6005823.html
Copyright © 2011-2022 走看看