Triangular Button
Posted
by Janus Kjempff
on November 24th, 1998
A class derived from CButton, that displays the button as a triangle pointing in one of four directions (LEFT, RIGHT, UP, DOWN) (see demo).
Download source 31KB
Comments
Resourece Leak at DeleteObject in PreSubClassWindow
Posted by Legacy on 12/20/2002 12:00amOriginally posted by: Jibesh
resource leak
Posted by Legacy on 07/26/1999 12:00amOriginally posted by: Peggy Van Lierde
Hi,
First of all, I love the control. It really adds something more
to the interface than just the common rectangular button,
or even the bitmapbutton.
When checking my project with boundschecker, I discovered
a resource-leak for each csxbutton I created.
Has anyone else noticed this too, or did I forget something ?
I added here the message which boundschecker reported:
Resource leak: allocated by CopyImage in Sxbutton.cpp (116), HANDLE: 0x7B050D58
Following, I copy-pasted the method in which boundschecker detects this resource leak :
BOOL CSXButton::SetBitmapCommon( UINT nID, int nWidth, int nHeight, COLORREF crTransparentMask, BOOL bUseMask )
{
if (m_hBitmapDisabled != 0)
DeleteObject( m_hBitmapDisabled);
if ( m_hBitmap )
DeleteObject( m_hBitmap );
// GS980730 added AfxFindResourceHandle to make MFC find resources in DLLs too...
HINSTANCE hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nID),
RT_BITMAP);
// If it is not a masked bitmap, just go through the
// motions as if it was, but set then number of color mappings to 0
COLORMAP mapColor;
mapColor.from = crTransparentMask;
mapColor.to = ::GetSysColor( COLOR_BTNFACE );
HBITMAP bmTemp = (HBITMAP)::CreateMappedBitmap(hInstResource, nID, IMAGE_BITMAP, &mapColor;, bUseMask ? 1 : 0 );
//Resource leak is in following line
m_hBitmap = (HBITMAP)::CopyImage( bmTemp, IMAGE_BITMAP, nWidth, nHeight, LR_COPYDELETEORG );
// Create disabled bitmap. We need to make the masked area white so
// it will appear transparent when the bitmap is rendered as an
// 'embossed' (disabled) image in DrawItem() below. Since DrawState
// converts the image to monochrome, white is transparent, black is
// graphics data.
mapColor.to = RGB( 255, 255, 255 );
bmTemp = (HBITMAP)::CreateMappedBitmap(hInstResource, nID, IMAGE_BITMAP, &mapColor;, bUseMask ? 1 : 0 );
m_hBitmapDisabled = (HBITMAP)::CopyImage( bmTemp, IMAGE_BITMAP, nWidth, nHeight, LR_COPYDELETEORG );
if( m_hBitmap == 0 || m_hBitmapDisabled == 0 )
return FALSE;
m_nImageWidth = nWidth;
m_nImageHeight = nHeight;
m_hIcon = 0;
Redraw();
return TRUE;
}
Regards,
ReplyPeggy Van Lierde.
TriangleButton works right out of the box!
Posted by Legacy on 06/17/1999 12:00amOriginally posted by: G Larkin
Downloaded the code, and it worked the first try when I incorporated it into my code where I needed triangular buttons. Commented out the focus code in the DrawItem function, as it was leaving some 'droppings'.
Reply