A Menu Button

.

CMenuButton in action

Download Source

In my latest project, File Axe, I decided I wanted something very like the little arrow buttons that one can find in DevStudio's Tools|Customize... property sheet, Tools tab. The little button on the right of the edit control for "Arguments:" to be precise. So, after a quick browse on codeguru reveled nothing, I decide it would not be hard to make, and I could wrap Randy More's cool way of using the TrackPopupMenu in immediate mode. I have a feeling I will be using it more you see. (:

Uses code from...

The niffy way of using the menu in immediate mode is (directly) from Using CMenu::TrackPopupMenu as an Immediate Function - Randy More, General owner draw format from Flat owner drawn buttons - Girish Bharadwaj, and the idea for drawing the arrow from PushButton with bitmap & text - Michael Santoro

UNICODE?

I have no way to test if this will work with UNICODE, however it SHOULD. (:
This was compiled with VC5 and MFC4.2. Tested on Win95 OSR2 (no IE4 integration). This code should compile cleanly under warning level 4.

To Use:

Simply include "MenuButton.h" and "MenuButton.cpp" in your project, and include "MenuButton.h" in whatever file you wish to use it in ("stdafx.h" mayhaps).

Then in the dialog editor, make a normal button, a suggested size is 12x14. The little arrow gfx will be centered in the button in any case. Make a handler for a button click, and copy the sample usage code to there, then of course modify to suit your needs.

A way to use CMenuButton... (aka the sample usage code)


// -[Feral]---------------------------------------------------------------
// pop up a menu, and add pre defined text to the edit ctrl.
void CPP_Split::OnBUTTONNameFormatOptions()
{
    // -[Feral]-----------------------------------------------------------
    // Vars and Assignment
    CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_NameFormat);


    // -[Feral]-----------------------------------------------------------
    // popup a menu and let the user make a selection...
    DWORD dwSelectionMade = m_menubuttonNameFormatOptions.DoSingleClick(IDM_NameFormatOptions);

    // -[Feral]-----------------------------------------------------------
    // Do something with the selection
    // -------------------------------------------------------------------
    // The value of dwSelectionMade is the id of the command selected or 0 if no selection was made
    switch(dwSelectionMade)
    {
        default:                        // Do nothing (No selection)
            break;
        case `Menu Resource ID`:
            pEdit->ReplaceSel(_T("`Text to add at cursor, or replace selection with`") );
            break;
// Example case...
//Tip: Open the resource file (<apname>.rc) and copy your menu from there... much easier.
        case ID_PREDEFINEDPOPUP_SAMPLE1FILENAME1XEXTSPLITPIECE:       // "Sample #&1: Filename.1_X.Ext.SplitPiece",
            pEdit->ReplaceSel(_T("<File>.<1_X>.<Ext>.SplitPiece") );
            break;
    }

    // -[Feral]-----------------------------------------------------------
    // Clean Up and Return
}

Questions, comments, bug fixes (gasp! (: ) and whatever else comes to mind are always welcome!

Happy Coding!



Comments

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

Top White Papers and Webcasts

  • Live Event Date: March 19, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT The 2015 Enterprise Mobile Application Survey asked 250 mobility professionals what their biggest mobile challenges are, how many employees they are equipping with mobile apps, and their methods for driving value with mobility. Join Dan Woods, Editor and CTO of CITO Research, and Alan Murray, SVP of Products at Apperian, as they break down the results of this survey and discuss how enterprises are using mobile application management and private …

  • The mobile market is white hot. Building a well-crafted product development plan that addresses market research, strategy, design, and development will provide the greatest chance for success. Each phase of an app's lifecycle is critical to the its overall success and feeds into the next step of the process of product development for the app. This white paper examines the five key phases of mobile app creation, one by one, to understand how they work together to help create a successful mobile app.

Most Popular Programming Stories

More for Developers

RSS Feeds

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