如题

解决方案 »

  1.   

    创建一个CBitmap,然后把DC中的内容BitBlt到已经选入这个CBitmap的DC中,
    代码不想写
      

  2.   

    这是截取界面上一部分内容的代码,你可以看一看!
    HBITMAP CPaintArea::CopyScreenToBitmap(LPRECT lpRect) 

    HDC hScrDC, hMemDC; 
    HBITMAP hBitmap,hOldBitmap; 
    int nX, nY, nX2, nY2; 
    int nWidth, nHeight; 
    int xScrn, yScrn; if (IsRectEmpty(lpRect)) 
    return NULL; 
    hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); 
    hMemDC = CreateCompatibleDC(hScrDC); nX = lpRect->left; 
    nY = lpRect->top; 
    nX2 = lpRect->right; 
    nY2 = lpRect->bottom; xScrn = GetDeviceCaps(hScrDC, HORZRES); 
    yScrn = GetDeviceCaps(hScrDC, VERTRES); if (nX < 0) 
    nX = 0; 
    if (nY < 0) 
    nY = 0; 
    if (nX2 > xScrn) 
    nX2 = xScrn; 
    if (nY2 > yScrn) 
    nY2 = yScrn; 
    nWidth = nX2 - nX; 
    nHeight = nY2 - nY; 
    hBitmap=CreateCompatibleBitmap(hScrDC,nWidth,nHeight); 
    hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBitmap); 
    BitBlt(hMemDC,0,0, nWidth,nHeight,hScrDC, nX, nY, SRCCOPY); hBitmap=(HBITMAP)SelectObject(hMemDC,hOldBitmap); DeleteDC(hScrDC); 
    DeleteDC(hMemDC); return hBitmap; 
    } BOOL CPaintArea::SaveBitmapToFile(HBITMAP hBitmap, LPSTR lpFileName) 

    HDC hDC; 
    CDC dc; 
    int iBits; // Bits per pixel in current resolution 
    WORD wBitCount; // Bits per pixel in bitmap 
    DWORD dwPaletteSize = 0, dwBmBitsSize, dwDIBSize, dwWritten; 
    BITMAP Bitmap; 
    BITMAPFILEHEADER bmfHdr; 
    BITMAPINFOHEADER bi; 
    LPBITMAPINFOHEADER lpbi; 
    HANDLE fh, hDib, hPal; 
    HPALETTE hOldPal = NULL; // Compute use bits per pixel of bitmap 
    dc.CreateDC("DISPLAY", NULL, NULL, NULL); 
    iBits = GetDeviceCaps(dc, BITSPIXEL) * GetDeviceCaps(dc, PLANES); 
    DeleteDC(dc); if (iBits <= 1) 
    wBitCount = 1; 
    else if (iBits <= 4) 
    wBitCount = 4; 
    else if (iBits <= 8) 
    wBitCount = 8; 
    else if (iBits <= 24) 
    wBitCount = 24; 
    else if (iBits <= 32) 
    wBitCount = 32; // Compute palette size 
    if (wBitCount <= 8) 
    dwPaletteSize=(1< 
    // Set bitmap header 
    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.biClrUsed = 0; 
    bi.biClrImportant = 0; dwBmBitsSize = ((Bitmap.bmWidth*wBitCount+31)/32)*4*Bitmap.bmHeight; // Allocate memory for bitmap 
    hDib = GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER)); 
    lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib); 
    *lpbi = bi; // Process palette 
    hPal = GetStockObject(DEFAULT_PALETTE); 
    if (hPal) 

    hDC = ::GetDC(NULL); 
    hOldPal = SelectPalette(hDC,(HPALETTE)hPal,FALSE); 
    RealizePalette(hDC); 
    } // Gain pixel value in new palette 
    GetDIBits(hDC,hBitmap,0,(UINT)Bitmap.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize, (BITMAPINFO *)lpbi,DIB_RGB_COLORS); // Restore palette 
    if (hOldPal) 

    SelectPalette(hDC, hOldPal, TRUE); 
    RealizePalette(hDC); 
    ::ReleaseDC(NULL, hDC); 
    } // Create bitmap file 
    fh = CreateFile(lpFileName, GENERIC_WRITE,0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL); 
    if (fh==INVALID_HANDLE_VALUE) 
    return FALSE; // Set bitmap file header 
    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; // Write bitmap file header 
    WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL); // Write bitmap body 
    WriteFile(fh, (LPSTR)lpbi, dwDIBSize, 
    &dwWritten, NULL); // Memory release 
    GlobalUnlock(hDib); 
    GlobalFree(hDib); 
    CloseHandle(fh); 
    return TRUE; 

      

  3.   

    你说的是windows系统的吗?应用程序应该没什么问题啊!系统的好象是个固定值!