Есть функция в 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 или кривые руки?
Здравствуйте, migel, Вы писали:
M>Здравствуйте, maks__, Вы писали:
M>Это баг в WTL ?
Забавно, что даже в транке это до сих пор не пофиксано.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
Здравствуйте, maks__, Вы писали:
M>>Это баг в WTL
__>Не понял твой вопрос.
Извени, просто BackSpace не дожал
На самом деле это
баг в WTL — контекст освобождать надо