Search code examples
c++inheritancevisual-c++gdiownerdrawn

CStatic Custom Control


I am trying to create a custom CStatic control in vc++ and have a few problems.

I originally was just using a CStatic control with the SS_BLACKRECT style. This was good for the situation until I needed to display an image over the control on demand.

I figured out all the logistics behind actually drawing the image onto the control but I cant seem to figure out how to do so without interfering with other things.

Basically I want the control to function as a normal CStatic with the SS_BLACKRECT style most of the time.

Then I need to be able to call a method that will cause it to draw an image over the control instead. I am doing the drawing using GDI and have tried it both in the OnPaint() method and the DrawItem() method without success. I can get it to draw in the OnPaint() but when I call the base CStatic::OnPaint() it draws over my image.

I need to be able to allow it to draw like normal but then just throw an image in on top. When I tried to do it in the DrawItem() method I had a problem because obviously it was not drawing using the SS_BLACKRECT style but waiting for me to draw the control like its supposed to.

I guess what I think I'm looking for is one of three things. A way to draw using GDI after the base OnPaint() method finishes. A way to have the control draw the default SS_BLACKRECT style and then OWNERDRAW the image afterwards. Or the code to mimic the drawing of SS_BLACKRECT.

The last one might be the easiest but I just don't know all the things I need to set up to draw a CStatic control like the default DrawItem.


Solution

  • Try calling Default() in your OnPaint() handler.

    Then, depending on whether you're drawing your image, you can then draw over the top of the standard CStatic control.