Triangular Button

Tried out the CRoundButton class by Chris Maunder, and got inspired to make a Triangle Button instead (actually i copy/pasted the code structure from that) - Anyway it might be useful to someone, so here it is.

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


  • Resourece Leak at DeleteObject in PreSubClassWindow

    Posted by Legacy on 12/20/2002 12:00am

    Originally posted by: Jibesh

    It was great work 
    You got appreciation
    Very nice Buttons ...
    if(CurrentRegion.Detach()!=NULL) // Line 102
    // Check the Handle Value before deleting it
    // or It will produce a resource leak
    // I got this leak when i debug using Bounds checker in windows 2000

  • resource leak

    Posted by Legacy on 07/26/1999 12:00am

    Originally posted by: Peggy Van Lierde


    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),

    // 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; = ::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. = 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;


    return TRUE;

    Peggy Van Lierde.

  • TriangleButton works right out of the box!

    Posted by Legacy on 06/17/1999 12:00am

    Originally 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'.

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Enterprises are increasingly looking to platform as a service (PaaS) to lower their costs and speed their time to market for new applications. Developing, deploying, and managing applications in the cloud eliminates the time and expense of managing a physical infrastructure to support them. PaaS offerings must deliver additional long-term benefits, such as a lower total cost of ownership (TCO), rapid scalability, and ease of integration, all while providing robust security and availability. This report …

  • Moving from an on-premises environment to Office 365 does not remove the need to plan for disruptions or reduce the business risk requirements for protecting email services. If anything, some risks increase with a move to the cloud. Read how to ease the transition every business faces if considering or already migrating to cloud email. This white paper discusses: Setting expectations when migrating to Office 365 Understanding the implications of relying solely on Exchange Online security Necessary archiving …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date