gpt4 book ai didi

c++ - CreateCompatibleDC() 失败

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:47 26 4
gpt4 key购买 nike

我正在使用 win32 制作 2D 动画。到目前为止,我的程序加载了一组从资源创建的 HBITMAP 对象。当在下面的代码中从“OnUpdate()”调用 CreateCompatibleDC() 时,动画期间会出现问题。在多次调用 OnUpdate 函数后,未创建 HDC 对象(可能未在内存中分配)。当调用 DeleteDC() 删除 HDC 对象时,这会导致意外结果。这是来自 main.cpp 的更新函数代码:

    void OnUpdate(
HWND hwnd)
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd,&ps);
if(!hdc)
{
MessageBox(NULL, L"Failed to Create Compatible DC - 'hdc' in OnUpdate()", L"ALERT", MB_OK);
PostMessage(hwnd, WM_DESTROY, NULL, NULL);
}
HPALETTE hpalT = SelectPalette(hdc,hpal,FALSE);

BITMAP bm;
HDC hdcMem = CreateCompatibleDC(hdc);
if(!hdcMem)
{
MessageBox(NULL, L"Failed to CreateCompatibleDC - 'hdcMem' in OnUpdate()", L"ALERT", MB_OK);
PostMessage(hwnd, WM_DESTROY, NULL, NULL);
}
SelectBitmap(hdcMem, bkgMain);
GetObject(bkgMain, sizeof(bm), &bm);
BitBlt(backDC, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);

// Clean up.
if(!DeleteDC(hdcMem))
{
MessageBox(NULL, L"Failed to DeleteDC - 'hdcMem' in OnUpdate()", L"ALERT", MB_OK);
PostMessage(hwnd, WM_DESTROY, NULL, NULL);
}
SelectPalette(hdc,hpalT,FALSE);
EndPaint(hwnd,&ps);
}

最佳答案

什么是SelectBitmap()?如果它是 SelectObject() 的包装器/别名|那么你正在泄漏位图。

SelectBitmap(hdcMem, bkgMain); 

您应该在删除旧位图之前将其选回 DC:

This function returns the previously selected object of the specified type. An application should always replace a new object with the original, default object after it has finished drawing with the new object.

关于c++ - CreateCompatibleDC() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10643505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com