Хорошо, даже если код работает, есть некоторая очистка.
RAII - одна из тех фраз, которые вам действительно нужны, когда вы работаете в MFC!
if( !pNewBitmap->CreateCompatibleBitmap(&dcDest, newWidth, newHeight) )
{
return FALSE;
}
Когда вы возвращаете FALSE или возникает исключение, которое вы не вызвали
cSource.SelectObject(pSourceOld);
dcDest.SelectObject(pDestold);
для очистки, прежде чем покинуть функцию.
Создайте небольшой вспомогательный класс для постоянной очистки, вам не нужно беспокоиться о операторах return или throw.
class SelectObjectAndCleanUp
{
CDC& deviceContext;
CBitmap *const oldSource;
public:
SelectObjectCleanUp( CDC& deviceContext, CBitmap* source )
: deviceContext(deviceContext),
oldSource( deviceContext.SelectObject(source) ) {
}
~SelectObjectCleanUp() {
deviceContext.SelectObject(oldSource)
}
};
// use of the helper
SelectObjectCleanUp sourceSelectionAndCleanup(dcSource, pBitmap );
SelectObjectCleanUp destionationSelectionAndCleanup(dcDest, pNewBitmap );