Przyspieszenie GDI W systemie Windows 7 / Rysunek do pamięci Bitmapa

Mój program GDI działa dobrze w systemie Windows XP, ale w systemie Windows Vista i 7 wygląda to dość okropnie z powodu braku akceleracji sprzętowej GDI. Pamiętam, że przeczytałem kilka lat temu artykuł mówiący, że Windows 7 dodał sprzętową akcelerację do niektórych funkcji GDI, w tym funkcji BitBlt (). Podobno, jeśli narysujesz bitmapę pamięci, a następnie użyjesz BitBlt (), aby skopiować obraz do głównego okna, będzie on działał z tą samą prędkością co XP. Czy to prawda?

Jeśli to prawda, jak to robisz? Jestem straszny w programowaniu i mam trochę kłopotów. Stworzyłem poniższą klasę, aby spróbować ją uruchomić:

class CMemBmpTest
{
private: 
    CDC         m_dcDeviceContext;
    CBitmap     m_bmpDrawSurface;

public:
    CMemBmpTest();
    ~CMemBmpTest();
    void Init();
    void Draw();
};

CMemBmpTest::CMemBmpTest()
{
}

CMemBmpTest::~CMemBmpTest()
{
    m_bmpDrawSurface.DeleteObject();
    m_dcDeviceContext.DeleteDC();
}

void CMemBmpTest::Init()
{  
    m_dcDeviceContext.CreateCompatibleDC(NULL);
    m_bmpDrawSurface.CreateCompatibleBitmap(&m_dcDeviceContext, 100, 100);
}

void CMemBmpTest::Draw()
{  
    m_dcDeviceContext.SelectObject(I.m_brshRedBrush);
    m_dcDeviceContext.PatBlt(0, 0, 100, 100, BLACKNESS);
}

W funkcji OnPaint () okna dodałem linię:

pDC->BitBlt(2, 2, 100, 100, &m_MemBmp, 0, 0, SRCCOPY);

Miałem nadzieję zobaczyć czarną skrzynkę 100x100 w rogu okna, ale to nie zadziałało. Prawdopodobnie robię wszystko okropnie źle, więc byłbym wdzięczny, gdyby ktoś mógł mi doradzić, jak to zrobić poprawnie.

Dziękujemy za wszelkie porady, które możesz zaoferować.

questionAnswers(2)

yourAnswerToTheQuestion