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

  • Lenovo recommends Windows 8 Pro. "I dropped my laptop getting out of the taxi." This probably sounds familiar to most IT professionals. If your employees are traveling, you know their devices are in for a rough go. Whether it's a trip to the conference room or a convention out of town, any time equipment leaves a user's desk it is at risk of being put into harm's way. Stay connected at all times, whether at the office or on the go, with agile, durable, and flexible devices like the Lenovo® …

  • 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