Weg Lass Problem

Faller

Erfahrenes Mitglied
Ich schreibe gerade an einem kleinem Screen schot programm.

was eigentlich auch schon längst fertig ist.

aber bei einem freund aufm Rechner braucht das ding ellen lange.

Computer
1250 MHZ
3*256 MB SDRam

trotzdem brauch diese Programm 1.0 Sekunden.

Also hab ich mal versucht herauszufinden wo es denn solange dauert.

dada zeile gefunden.
::BitBlt(memDC, 0, 0, nWidth, nHeight, hdc, rc.left, rc.top, SRCCOPY);//diese funktion brauch zulange

Diese Zeile brauch 0.9 sek.

also Dachte ich mir gut wenn du das net in ein anders HDC splitten kannst dann must du das ursprungs hdc nutzen.

also mal die gesammte funktion
Code:
    int r=0;
    clock_t endOp, startOp;
    long difference;
    HDC     hdc;
    startOp = clock();

    HWND hWnd = 0;
    hWnd=GetDesktopWindow();
    RECT rc;
    ::GetWindowRect(hWnd, &rc);
    int nWidth  = rc.right  - rc.left;
    int nHeight = rc.bottom - rc.top;

    HWND    hWndSc = ::GetDesktopWindow();
    hdc    = ::GetDC(hWndSc);
    HDC     memDC  = ::CreateCompatibleDC(hdc);

    BITMAPINFO    bmi;
    LPBYTE      pBits;

    ZeroMemory(&bmi, sizeof(bmi));

    bmi.bmiHeader.biSize        = sizeof(BITMAPINFOHEADER);
    bmi.bmiHeader.biWidth        = nWidth;
    bmi.bmiHeader.biHeight        = nHeight;
    bmi.bmiHeader.biPlanes        = 1;
    bmi.bmiHeader.biBitCount    = 32;
    bmi.bmiHeader.biCompression = BI_RGB;
    bmi.bmiHeader.biSizeImage   = 32*nWidth*nHeight/8;
    HBITMAP hbm;

    hbm = CreateDIBSection(memDC, &bmi, DIB_RGB_COLORS, (void **)&pBits, NULL, 0);

    ::BringWindowToTop(hWnd);
    HBITMAP hbmOld = (HBITMAP)::SelectObject(memDC, hbm);

    ::BitBlt(memDC, 0, 0, nWidth,  nHeight, hdc, rc.left, rc.top, SRCCOPY);//diese funktion brauch zulange

BYTE *zeiger=pBits;

int i=0;

for(i=0;i<32*nWidth*nHeight/8;i++)
    {
        pbBits[we-1][i]=(unsigned char)*zeiger;
        zeiger++;
    }

So undeswegen nun zur eigentlichn frage.
ich kopiere mir ja das komplete Fenster ind die variable hdc wie ist es möglich direkt aus dieser zu lessen.
Weil wenn ich net den umweg über memhD machen müste fürde da ja denne das BIT blit wegfallen.

hoffe ihr konntet meine frage verstehen.

mfg Faller
 
Zurück