?
Solved

Toolbar's images not showing in 256 color mode

Posted on 2002-03-27
7
Medium Priority
?
484 Views
Last Modified: 2013-12-03
Hello!

Hello!

Using plain Win32 Api
...I have an app with a  toolbar with bitmap images in 256
colors indexed . The
toolbar displays well in W2K 24-bit True Color graphics mode. But when I
changed
W2k's graphics mode to 256 colors, the toolbar was created and displayed
sans the images.

How do I solve the mystery of the disappearing images?
What guidelines should I follow so bitmaps for toolbars(or any other window
using bitmaps)
will display properly?

How do I create bitmaps to display properly in all color modes? And how do I insert them into a toolbar, using CreateToolbarEx using whole bitmaps  and CreateWindowEx using imagelists?

I'll add another 100 points to the one who gives the suitable solution to the problem!

Thanks in advance!

Maimee Arai


0
Comment
Question by:RolandAZ
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
7 Comments
 
LVL 5

Expert Comment

by:robpitt
ID: 6900517
You've discovered a fundamental problem with the toolbar control. I ran into this ages ago back when supporting 256 colour displays mattered. Obviously a lot of people don't care about 256 colour users any more ... but since I know the solution here goes...

The problem lies in the fact that the toolbar doesn't select or realise a palette before drawing itself. Thus when running on a palettised display it attempts to draw using the default 16 standard colours (which usually doesn't work very well).


The solution is to subclass the toolbar control and then replace the WM_PAINT handler with something like the following:

          BeginPaint(hWnd,&ps);

          hopal=SelectPalette(ps.hdc,hPalette,TRUE);
          RealizePalette(ps.hdc);
         
          flags=PRF_CHECKVISIBLE|PRF_CLIENT;
          if (ps.fErase) flags|=PRF_ERASEBKGND;
          SendMessage(hWnd,WM_PRINT,(WPARAM)ps.hdc,flags);

          SelectPalette(ps.hdc,hopal,TRUE);
          EndPaint(hWnd,&ps);
          return 0;


The above selects and realises a palette before using WM_PRINT to get the control to draw itself using the newly selected palette.



Rob

PS For those extra 100 pts, I'll send you a full working example - post your email here.
0
 
LVL 5

Expert Comment

by:robpitt
ID: 6900522
PPS

An alternative to subclassing the window is you use the NM_CUSTOMDRAW (CDDS_PREPAINT) notification and select the palette here. Note this feature is only supported on ComCtl32.dll v4.7 and later... then again most people do have this now as its included with Internet Explorer.
0
 
LVL 5

Expert Comment

by:robpitt
ID: 6900543
PPS

An alternative to subclassing the window is you use the NM_CUSTOMDRAW (CDDS_PREPAINT) notification and select the palette here. Note this feature is only supported on ComCtl32.dll v4.7 and later... then again most people do have this now as its included with Internet Explorer.
0
Veeam Task Manager for Hyper-V

Task Manager for Hyper-V provides critical information that allows you to monitor Hyper-V performance by displaying real-time views of CPU and memory at the individual VM-level, so you can quickly identify which VMs are using host resources.

 
LVL 1

Author Comment

by:RolandAZ
ID: 6902328
Thanks, Rob, for the tip!

Could you please send me your working example that used "subclassing" the toolbar and one using NM_CUSTOMDRAW in Win32 API C, or in non-MFC C++ ?

Send it to rolandaz@hotmail.com

Thanks again!

I'm increasing the points by 100...
another 100, when I have incorporated your solution and satisfied my program's need. I hope it will...
0
 
LVL 5

Accepted Solution

by:
robpitt earned 1200 total points
ID: 6904745
Can't send it, your mailbox is full.

Get it from : http://63.144.255.25/downloads/misc/TB256.zip
0
 
LVL 1

Author Comment

by:RolandAZ
ID: 6904845

Great programming!
Thanks, Rob!


0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

This article describes how to add a user-defined command button to the Windows 7 Explorer toolbar.  In the previous article (http://www.experts-exchange.com/A_2172.html), we saw how to put the Delete button back there where it belongs.  "Delete" is …
Entering time in Microsoft Access can be difficult. An input mask often bothers users more than helping them and won't catch all typing errors. This article shows how to create a textbox for 24-hour time input with full validation politely catching …
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Have you created a query with information for a calendar? ... and then, abra-cadabra, the calendar is done?! I am going to show you how to make that happen. Visualize your data!  ... really see it To use the code to create a calendar from a q…

765 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