Unersichtlicher fehler



  • Hallo,
    folgender code liefert fehler die ihr weiter unten findet.
    Verstehen tue ich sie nicht. Ihr?

    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main()
    {
     // get desktop window (but can be any window)
     HWND capture = GetDesktopWindow();
     if(!IsWindow(capture)) return 1;
    
     // get window dimensions
     RECT rect;
     GetWindowRect(capture, &rect);
    
     size_t dx = rect.right - rect.left;
     size_t dy = rect.bottom - rect.top;
    
     // create BITMAPINFO structure
     // used by CreateDIBSection
     BITMAPINFO info;
     info.bmiHeader.biSize          = sizeof(BITMAPINFOHEADER);
     info.bmiHeader.biWidth         = dx;
     info.bmiHeader.biHeight        = dy;
     info.bmiHeader.biPlanes        = 1;
     info.bmiHeader.biBitCount      = 24;
     info.bmiHeader.biCompression   = BI_RGB;
     info.bmiHeader.biSizeImage     = 0;
     info.bmiHeader.biXPelsPerMeter = 0;
     info.bmiHeader.biYPelsPerMeter = 0;
     info.bmiHeader.biClrUsed       = 0;
     info.bmiHeader.biClrImportant  = 0;
    
     // a bitmap handle and a pointer its bit data
     HBITMAP bitmap = 0;
     BYTE*   memory = 0;
    
     // create bitmap
     HDC device = GetDC(capture);
     bitmap = CreateDIBSection(device, &info, DIB_RGB_COLORS, (void**)&memory, 0, 0);
     ReleaseDC(capture, device);
     if(!bitmap || !memory) return 1;
    
     // blit the contents of the desktop (winDC)
     // to the bitmap (selected in memDC)
     HDC winDC = GetWindowDC(capture);
     HDC memDC = CreateCompatibleDC(winDC);
     SelectObject(memDC, bitmap);
     BitBlt(memDC, 0, 0, dx, dy, winDC, 0, 0, SRCCOPY);
     DeleteDC(memDC);
     ReleaseDC(capture, winDC);
    
     char *buffer;
     sprintf(buffer,"capture%d%d.bmp",dx,dy);
     // create bitmap file
     basic_ofstream<char> file(buffer, ios::binary);
     if(!file) { DeleteObject(bitmap); return 1; }
    
     // initialize bitmap file headers
     BITMAPFILEHEADER fileHeader;
     BITMAPINFOHEADER infoHeader;
    
     fileHeader.bfType      = 0x4d42;
     fileHeader.bfSize      = 0;
     fileHeader.bfReserved1 = 0;
     fileHeader.bfReserved2 = 0;
     fileHeader.bfOffBits   = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
    
     infoHeader.biSize          = sizeof(infoHeader);
     infoHeader.biWidth         = dx;
     infoHeader.biHeight        = dy;
     infoHeader.biPlanes        = 1;
     infoHeader.biBitCount      = 24;
     infoHeader.biCompression   = BI_RGB;
     infoHeader.biSizeImage     = 0;
     infoHeader.biXPelsPerMeter = 0;
     infoHeader.biYPelsPerMeter = 0;
     infoHeader.biClrUsed       = 0;
     infoHeader.biClrImportant  = 0;
    
     // save file headers
     file.write((char*)&fileHeader, sizeof(fileHeader));
     file.write((char*)&infoHeader, sizeof(infoHeader));
    
     // save 24-bit bitmap data
     int wbytes = (((24*dx + 31) & (~31))/8);
     int tbytes = (((24*dx + 31) & (~31))/8)*dy;
     file.write((char*)memory, tbytes);
    
     // delete bitmap
     DeleteObject(bitmap);
     bitmap = 0;
     memory = 0;
        return 0;
    }
    

    In function int main()':| main.cpp|56|error: variablestd::basic_ofstream<char, std::char_traits<char> > file' has initializer but incomplete type|
    warning: unused variable 'wbytes'|
    ||=== Build finished: 1 errors, 1 warnings ===|



  • #include <fstream>


Anmelden zum Antworten