Solved

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

Posted on 2015-01-06
3
220 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

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
What's the most efficient way to load up a couple of large table in C#? 5 38
Host asp.net pages 5 25
Variable Event ? 3 23
Not seen Link button 5 15
There is an easy way, in .NET, to centralize the treatment of all unexpected errors. First of all, instead of launching the application directly in a Form, you need first to write a Sub called Main, in a module. Then, set the Startup Object to th…
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 …
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
This video teaches viewers about errors in exception handling.

895 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

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now