Dialog als Bitmap exportieren
-
Hallo!
Ich bräuchte mal nen Denkanstoß! Wie kann ich einen Dialog als Bitmap exportieren. Sozusagen ein Screenshot von meinem Dialog und dann speichern. Ach und wie siehts mit .jpg aus? Geht das auch?
Gruß,
Phips
-
Hi
hab vor ziemlich langer Zeit mal ne Funktion geschrieben.
Darin kannst du sehen, wie sowas funktioniert.
Du musst sie aber ein bisschen abwandeln:CBitmap* MakeScreenShot(CWnd* pWnd) { if(pWnd == NULL) return NULL; // Das Rechteck, was gezeichnet wird (x = 230, y = 10, Länge x = 8, Länge y = 12): int nX = 230; int nY = 10; int nWidth = 8; int nHeight = 12; CDC* pSource = pWnd->GetDC(); // das DC des Fensters CDC* pMemDC = new CDC; // das DC, das mit dem Bitmap verknüpft wird pMemDC->CreateCompatibleDC(pSource); // beide DCs gleich CBitmap* pBitmap = new CBitmap; pBitmap->CreateCompatibleBitmap(pSource, nWidth, nHeight); pBitmap->SetBitmapDimension(nWidth, nHeight); // damit GetBitmapDimension funktioniert pMemDC->SelectObject(pBitmap); // pMemDC mit Bitmap verknüpfen if(! pMemDC->BitBlt(0, 0, nWidth, nHeight, pSource, nX, nY, SRCCOPY)) { pMemDC->DeleteDC(); delete pMemDC; pApp->ReleaseDC(pSource); } pMemDC->DeleteDC(); delete pMemDC; pWnd->ReleaseDC(pSource); return pBitmap; // Bitmap muss nachher UNBEDINGT gelöscht werden }Speichern kannst du das im bmp Format folgendermaßen:
BOOL WriteBitmap( LPTSTR szFile, HBITMAP hbitmap, HDC memdc) { BITMAP bmp; if(GetObject(hbitmap, sizeof(BITMAP), &bmp)) { BITMAPINFOHEADER BmpInfoHdr; //Struktur für Bitmap-Infoheader BITMAPFILEHEADER BmpFileHdr; //Struktur für Bitmap-Dateiheader BmpInfoHdr.biSize = sizeof(BITMAPINFOHEADER); BmpInfoHdr.biWidth = bmp.bmWidth; BmpInfoHdr.biHeight = bmp.bmHeight; BmpInfoHdr.biPlanes = bmp.bmPlanes; BmpInfoHdr.biBitCount = 24; BmpInfoHdr.biCompression = BI_RGB; BmpInfoHdr.biSizeImage = bmp.bmWidth*bmp.bmHeight*3; BmpFileHdr.bfType = 0x4d42; BmpFileHdr.bfReserved1 = 0; BmpFileHdr.bfReserved2 = 0; BmpFileHdr.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); BmpFileHdr.bfSize = BmpFileHdr.bfOffBits+BmpInfoHdr.biSizeImage; bmp.bmBits = (void*)GlobalAlloc(GMEM_FIXED, BmpInfoHdr.biSizeImage); if(GetDIBits(memdc, hbitmap, 0, BmpInfoHdr.biHeight, bmp.bmBits, (BITMAPINFO*)&BmpInfoHdr, DIB_RGB_COLORS) == BmpInfoHdr.biHeight) { HANDLE hFile = CreateFile(szFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL); if(hFile != INVALID_HANDLE_VALUE) { DWORD dwTmp; WriteFile(hFile, &BmpFileHdr, sizeof(BITMAPFILEHEADER), &dwTmp, NULL); WriteFile(hFile, &BmpInfoHdr, sizeof(BITMAPINFOHEADER), &dwTmp, NULL); WriteFile(hFile, bmp.bmBits, BmpInfoHdr.biSizeImage, &dwTmp, NULL); } CloseHandle(hFile); } GlobalFree(bmp.bmBits); return TRUE; } return FALSE; }Wenn du das Bitmap in einem anderen Format speichern willst, brauchst du eine Klasse, die das kann. Bei Codeguru und Codeprojekt gibts duzente

Grüße Rapha