我的GDI程序在Windows XP上运行良好,但在Windows Vista和7上看起来非常糟糕,因为缺乏GDI硬件加速。我记得几年前读过一篇文章,说Windows 7添加了对某些GDI函数的硬件加速,包括BitBlt()函数。据说,如果您绘制到内存位图,然后使用BitBlt()将图像复制到主窗口,它的速度与XP大致相同。这是真的吗?
如果是真的,怎么做?我很菜,有点困难。我创建了下面的类来尝试使其工作:
在窗口的OnPaint()函数中,我添加了以下行:
我希望在窗口的角落看到一个100x100的黑色方块,但它没有起作用。我可能做错了一切,所以如果有人能告诉我怎样才能正确地做到这一点,我会很感激。
非常感谢您提供的任何建议。
如果是真的,怎么做?我很菜,有点困难。我创建了下面的类来尝试使其工作:
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);
}
在窗口的OnPaint()函数中,我添加了以下行:
pDC->BitBlt(2, 2, 100, 100, &m_MemBmp, 0, 0, SRCCOPY);
我希望在窗口的角落看到一个100x100的黑色方块,但它没有起作用。我可能做错了一切,所以如果有人能告诉我怎样才能正确地做到这一点,我会很感激。
非常感谢您提供的任何建议。