Solved

In Visual C++ App, disabled toolbar buttons show as solid grey boxes

Posted on 2015-01-06
3
225 Views
Last Modified: 2015-01-07
I have a VC++ app created using VS2012.  In said app, I have a few toolbars.  When the toolbar images are enabled, the images on each toolbar button display nicely.  However, when a toolbar button is disabled (intentionally), the image(s) on the toolbar buttons display as a solid grey boxes, instead of as a greyed out (disabled) version of the original image.

Here's some more detail:

I am loading the images at run-time by using the following:

CToolBarCtrl& bar = m_wndMyToolBar.GetToolBarCtrl();      
CImageList *pList = bar.GetImageList();      

HICON hIconSomeImage = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_SOME_ENABLED_ICON));      
      
pList->Replace(0, hIconSomeImage);       
      
bar.SetImageList(pList);
m_wndMyToolBar.Invalidate();

This code works well to get the image to display when the toolbar button is enabled.

To solve the issue of the image being a solid grey box when the toolbar button is disabled, I tried creating an image list for disabled toolbar images, as follows:

CImageList m_imgListDisabled;
imgListDisabled.Create(16, 15, ILC_COLOR32, 8, 8);

HICON hIconTest = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_SOME_DISABLED_ICON));
      
m_imgListDisabled.Add(hIconTest);      
bar.SetDisabledImageList(&m_imgListDisabled);
m_wndMyToolBar.Invalidate();

The above code compiles, and runs without throwing any errors, yet the net result is a solid grey box instead of the disabled image.

I should add that the images I am using for the toolbar buttons are icon files (.ico files), and these icons have a high color depth.

Any help would be greatly appreciated.
0
Comment
Question by:cjm20
  • 2
3 Comments
 
LVL 33

Accepted Solution

by:
sarabande earned 500 total points
ID: 40535206
CImageList m_imgListDisabled;
from your code snippet it looks like the m_imgListDisabled is a local variable (and not a member). if that is the case the object will be freed after scope and the pointer to the disabled image list was invalid as well. either make it a static variable or a member to solve the issue.

Sara
0
 

Author Comment

by:cjm20
ID: 40535542
Bingo!  Moving the image list to the member level fixed my issue. I can now see the correct disabled icon when i would expect to. Thanks very much, Sara!
0
 

Author Closing Comment

by:cjm20
ID: 40535543
My kind of solution: nice and simple :)
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Having just graduated from college and entered the workforce, I don’t find myself always using the tools and programs I grew accustomed to over the past four years. However, there is one program I continually find myself reverting back to…R.   So …
If you haven’t already, I encourage you to read the first article (http://www.experts-exchange.com/articles/18680/An-Introduction-to-R-Programming-and-R-Studio.html) in my series to gain a basic foundation of R and R Studio.  You will also find the …
The goal of this video is to provide viewers with basic examples to understand and use conditional statements in the C programming language.
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…

831 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question