Утечка GDI объектов в _ReplaceVistaBitmapFromImageList
От: maks__  
Дата: 24.11.09 00:17
Оценка:
Есть функция в WTL:
    void WTL.CCommandBarCtrlImpl._ReplaceVistaBitmapFromImageList(int nIndex)
    {
        // Delete existing bitmap
        if(m_arrVistaBitmap[nIndex] != NULL)
            ::DeleteObject(m_arrVistaBitmap[nIndex]);

        // Create display compatible memory DC
        HDC hDC = ::GetDC(NULL);
        CDC dcMem;
        dcMem.CreateCompatibleDC(hDC);
        HBITMAP hBitmapSave = dcMem.GetCurrentBitmap();

        // Create bitmap for menu item
        T* pT = static_cast<T*>(this);
        HBITMAP hBitmap = pT->_CreateVistaBitmapHelper(nIndex, hDC, dcMem);

        // Select saved bitmap back and replace bitmap in the array
        dcMem.SelectBitmap(hBitmapSave);
        m_arrVistaBitmap.SetAtIndex(nIndex, hBitmap);
    }
На Vista она у меня работает нормально, а на Windows 7 вызывает утечку GDI объектов. И на х86, и на 64-bit.

Если добавить в конце функции:
::ReleaseDC(0, hDC);
то объекты не утекают.

Это баг в WTL или кривые руки?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.