Placing A Bitmap In The PropertySheet Button Area

I was recently asked to write an application for a company
that wanted their logo on every single window in the program. As
the application grew there became less and less space for a
company bitmap logo within some of the tabbed-dialog boxes. Due
to this I decided to see if I could place the bitmap logo in the
PropertySheet area that is normally only used by the the OK,
Cancel and Apply buttons. The picture below shows what I
achived…

To do this is quite easy.

1. Firstly create a subclass of
CPropertySheet called CMyPropertySheet.

2. Override the WM_PAINT message by creating
an OnPaint() member function for CMyPropertySheet, and paste the
follwing code into it.

CBitmap bmp, *poldbmp;
CDC memdc;
CRect rect;

//Load the bitmap resource 
bmp.LoadBitmap(IDB_BITMAPLOGO);

//Create a compatible memory DC
memdc.CreateCompatibleDC(&dc);

//Select the bitmap into the DC
poldbmp = memdc.SelectObject(&bmp);//bmp

//Get size of PropertySheet
GetClientRect(&rect);

//Copy (BitBlt) bitmap from memory DC to screen DC
dc.BitBlt(left, rect.bottom - lower, w, h, &memdc, 0, 0, SRCCOPY);

memdc.SelectObject(poldbmp);

The dc.BitBlt places a w pixel wide by
h pixel high image left pixels away from the
left hand edge, and lower pixels away from the bottom of
the PropertySheet. Change these values as you see fit.

3. #include "MyPropertSheet.h"
in the calling dialog that you wish to use the new property page
in.

4. Add PropertyPages to the PropertySheet and
call it, e.g…..

    CMyPropertySheet sheet("Personnel Details");
CPerFildlg perfildlgPage;
CAddDetdlg adddetdlgPage;
CDelDetdlg deldetdlgPage;

sheet.AddPage(&perfildlgPage);
sheet.AddPage(&adddetdlgPage);
sheet.AddPage(&deldetdlgPage);

sheet.DoModal();

More advanced code for drawing bitmaps / DIBs which also uses
palettes may be found on this site.

Download source – 1KB

Date Posted: 05/04/98

More by Author

Must Read