Blt'ing через память DC не работает - PullRequest
0 голосов
/ 26 декабря 2009
HDC hdcScreen = GetDC(NULL);
HDC hdcWindow = GetDC(mWin);
HDC hdcMem = CreateCompatibleDC(hdcScreen);
if (!hdcScreen || !hdcWindow || !hdcMem){
    MessageBox(NULL, "could not locate hdc's", "Viewer", MB_ICONERROR);
}

if (!StretchBlt(hdcMem, 0, 0, 300, 300, hdcScreen, 0, 0, 300, 300, SRCCOPY)){
    MessageBox(NULL, "stretchblt failed", "Viewer", MB_ICONERROR);
}
else if (!BitBlt(hdcWindow, 0, 0, 300, 300, hdcMem, 0, 0, SRCCOPY)){
    // error
    MessageBox(NULL, "stretchblt failed", "Viewer", MB_ICONERROR);
}

ReleaseDC(NULL, hdcScreen);
ReleaseDC(mWin, hdcWindow);
ReleaseDC(mWin, hdcMem);

Один вызов StretchBlt из экрана в окно работает нормально, но выше не работает. Любые полезные советы?

[Изменить] Ошибки не вызываются, поэтому все работает нормально, однако окно, связанное с mWin, пустое.

1 Ответ

3 голосов
/ 26 декабря 2009

Вам необходимо создать растровое изображение и выделить его в памяти DC с помощью SelectObject.

...