Click here to Skip to main content
Click here to Skip to main content

Menu Bitmaps from Minimal Source Code

By , 1 Feb 2002
 

A menu with bitmaps

Introduction

This article describes a method of adding bitmaps to your menus. The method is very easy to use, for example adding all the bitmaps on a tool bar is accomplished by a single function call. The demo project includes a class called BitmapMenu that can be used to add bitmap menus to your own projects. This class is made up of a small amount of source code, making it easy to understand and maintain.

There are two good related articles on the code project about adding bitmaps to menus. They are:

These are both excellent articles with lots of good accompanying code. Brent Corkum's code in particular produces nice looking bitmaps, and it has been extensively tested and updated. So of course you are thinking: "Why do I need to bother with your article?"

The main disadvantage of the Corkum method is the size of the code. Something as simple as placing bitmaps on menus requires a significant amount of code which must be maintained by you (or you have to hope that Mr. Corkum is nice enough to keep updating his classes). For this reason I chose to use the much more compact Denisov method. Nikolay Denisov's article addresses much more than putting bitmaps on menus, and the bitmap code is intertwined with his other code, so it is difficult to use independently. Therefore, I developed a class based on the Denisov method that is modular. The result is that both my method and the Corkum method are easy to setup, but there is a significant difference in the resulting amount of source code. The approximate lines of source code required by the two methods are:

  • Corkum method: 2,350 lines
  • This method: 250 lines

Unlike Corkum's work, this code has not been well tested. It has only been tested under Windows 98, and will not work under Windows 95/NT.

To use this code download the demo project. The demo has a second tool bar which demonstrates two of the class member functions: AddToolBar and RemoveToolBar. To add bitmap menus to your own project follow these 5 steps:

  1. Add the following files to your project:
    BitmapMenu.cpp, BitmapMenu.h, winuser2.h
    
  2. In MainFrm.h - Add this line to the top of the file:
    #include "BitmapMenu.h"
    
  3. In MainFrm.h - Inherit your main frame window from BitmapMenu rather than from CFrameWnd or CMDIFrameWnd.
    class CMainFrame : public BitmapMenu<CFrameWnd>
    
  4. In MainFrm.cpp - Add three message handlers between BEGIN_MESSAGE_MAP and END_MESSAGE_MAP.
    ON_WM_INITMENUPOPUP()
    ON_WM_MEASUREITEM()
    ON_WM_DRAWITEM()
    
  5. In MainFrm.cpp - At the end of the CMainFrame::OnCreate() function add each tool bar that you want to appear on the menu:
    AddToolBar(&m_wndToolBar);
    

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Warren Gardner
United States United States
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionImage dimensionsmemberandrewtruckle4 Nov '09 - 22:02 
QuestionHow to add bitmaps for menu items without using the app resource. i.e. using external bmp file at run time.memberbrijMos12 Aug '08 - 21:28 
GeneralThank you very muchmemberYogesh P. Dhakad17 Jul '07 - 4:50 
QuestionHow to change checkmark style?memberLZL101023 Aug '06 - 20:08 
GeneralTo show or hide the toolbarmemberHanney Wang13 Sep '04 - 16:18 
GeneralFix to solve crashes on Windows NT/95memberPEK8 Sep '04 - 8:59 
If you run an application with BitmapMenu on Windows NT/95 the application will crash when the menu is drawn (it will at least do this on NT). The simple solution to this is to disable bitmaps when running on this system (so a classic menu without bitmaps will be used). The following code will do this. It should be placed in BitmapMenu:OnInitMenuPopup after the base class is called:
 
//Version check will only be run once per instance
  //(updating from Win95/NT to other system without rebooting
  //is not very likely :-).
  static int allowBitmapMenu = -1;
 
  if(allowBitmapMenu == -1)
  {
    allowBitmapMenu = 1;
 
    OSVERSIONINFO version;
    version.dwOSVersionInfoSize = sizeof(version);
    GetVersionEx(&version);
 
    //Running NT/95 ?
    if(  version.dwMajorVersion <= 4 && version.dwMinorVersion <= 0 )
    {
      if(version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
      {
        TRACE(_T("Running Windows 95. No bitmaps in menus.\n"));
        allowBitmapMenu = 0;
      }
      else if(version.dwPlatformId == VER_PLATFORM_WIN32_NT)
      {
        TRACE(_T("Running Windows NT. No bitmaps in menus.\n"));
        allowBitmapMenu = 0;
      }
 
    }
  }
 
  //Bitmaps are not allowed
  if(allowBitmapMenu == 0)
    return;
 
I have tested this code in 95 and NT (no bitmaps), 98 and XP and works as expected.

QuestionHelp - Context Menu?memberJayant_Mukherjee8 Jul '04 - 18:53 
GeneralMenu Bitmaps from Hidden Toolbarsmembervjplusplus21 Mar '04 - 23:09 
GeneralRe: Menu Bitmaps from Hidden ToolbarsmemberWarren Gardner29 Mar '04 - 5:24 
GeneralStudent from Poland need help with menumemberhaiaw22 May '03 - 23:08 
QuestionWin32 SDK Example?memberajax197124 Jan '03 - 4:04 
AnswerRe: Win32 SDK Example?memberWarren Gardner4 Feb '03 - 10:41 
GeneralRe: Win32 SDK Example?memberTimWallace16 Jun '03 - 4:13 
GeneralRe: Win32 SDK Example?memberHallsoft27 Aug '04 - 0:12 
GeneralChange checkmarks stylemembercaranthol17 Jan '03 - 6:51 
GeneralRe: Change checkmarks stylememberWarren Gardner4 Feb '03 - 10:35 
GeneralCompile errormemberLinas23 May '02 - 22:19 
GeneralRe: Compile errormemberWarren Gardner28 May '02 - 7:54 
Generalthe BitmapMenu project doesn't workmembersohi4 May '02 - 4:50 
GeneralRe: the BitmapMenu project doesn't workmemberWarren Gardner15 May '02 - 8:28 
GeneralRe: the BitmapMenu project doesn't workmembercaranthol2 Jan '03 - 0:44 
GeneralWhen the toolbar can be customized...memberwuwuli4 Apr '02 - 19:57 
GeneralRe: When the toolbar can be customized...memberWarren Gardner10 Apr '02 - 4:26 
GeneralRe: When the toolbar can be customized...memberSiuming10 Apr '02 - 23:45 
GeneralRe: When the toolbar can be customized...memberWarren Gardner19 Apr '02 - 16:43 
QuestionIs there any way to show menu items with different colors and /or fonts?memberGhasem Karimi26 Mar '02 - 2:15 
AnswerRe: Is there any way to show menu items with different colors and /or fonts?memberWarren Gardner10 Apr '02 - 4:15 
GeneralA few problemsmemberNeville Franks3 Feb '02 - 22:17 
GeneralRe: A few problemsmemberWarren Gardner4 Feb '02 - 12:23 
GeneralRe: A few problemsmemberNeville Franks6 Feb '02 - 1:24 
GeneralGood peace of code, but...memberJean-Michel LE FOL3 Feb '02 - 6:54 
GeneralRe: Good peace of code, but...memberWarren Gardner4 Feb '02 - 15:00 
GeneralRe: Good peace of code, but...memberPierre C12 Feb '02 - 4:12 
GeneralAbout dialog.memberdsteuz2 Feb '02 - 18:24 
GeneralRe: About dialog.memberWarren Gardner4 Feb '02 - 14:28 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 2 Feb 2002
Article Copyright 2002 by Warren Gardner
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid