2009-12-26 43 views
0
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); 

從Screen to Window對StretchBlt的單個調用可以正常工作,但上面沒有。 任何有用的提示?通過內存直接播放直流不起作用

[編輯] 沒有錯誤被觸發,所以一切似乎工作正常,但與mWin相關的窗口是空白的。

回答

3

您需要創建一個位圖並使用SelectObject將其選擇到內存DC中。

+0

工作正常! HBITMAP hBit = CreateCompatibleBitmap(hdcWindow,300,300); \ SelectObject(hdcMem,hBit); \ .. DeleteObject(hBit); – Default 2009-12-26 17:49:45

+2

是的。修復你的清理代碼,ReleaseDC(mWin,hdcMem)是錯誤的。使用DeleteDC()。在刪除hdcMem之前,您必須還原舊的位圖。 – 2009-12-26 17:52:11