SAMPLE: Drawing a Bitmap in a Foundation Class Dialog BoxLast reviewed: June 26, 1997Article ID: Q141863 |
The information in this article applies to:
This is the 32-bit version of this sample.
SUMMARYIn a Microsoft Foundation Class (MFC) Libraried application for Windows, it is occasionally useful to be able to display a bitmap larger than a normal icon in a dialog box. This can either be done using the resource editor or at run time. To display a bitmap using the resource editor place a picture control on a dialog template. Bring up the properties dialog for the picture control and associate the control with a bitmap type (SS_BITMAP style) and an image by specifying a bitmap resource ID. If you want to associate a bitmap resource ID with the picture control only at run time or if you would like to change the bitmap at run time then use the function CStatic::SetBitmap().
To display a bitmap at runtime, the following are the four possible methods:
~ Bdlg32.exe (size: 38810 bytes)For more information about downloading files from the Microsoft Software Library, please see the following article in the Microsoft Knowledge Base:
ARTICLE-ID: Q119591 TITLE : How to Obtain Microsoft Support Files from Online ServicesNOTE: Use the -d option when running BDLG32.EXE to decompress the file and recreate the proper directory structure.
MORE INFORMATIONThe following four methods, implemented in the BDLG32 sample, demonstrate some possible ways to display a bitmap in a dialog box using the Microsoft Foundation Classes.
Method 1: BitBlt() in OnDraw()The first method uses a simple BitBlt(), when the dialog box receives a WM_PAINT message, to paint a bitmap in a hard-coded location on a dialog box. This method demonstrates the following:
One other thing to note is that the CDC and CPaintDC objects in the code above are created on the stack so you do not need to call the Windows API functions DeleteDC() and ReleaseDC() on the memory and paint DC objects, respectively. For more information about bitmaps and device contexts, refer to the documentation for the Windows API and MFC versions of BitBlt(), SelectObject(), and CreateCompatibleDC(). For a more complete example of this, please see the BDLG32 sample.
Method 2: BitBlt() or StretchBlt() in "Static" Frame ControlThe second method uses StretchBlt() and, using techniques similar to those in the "Paint" dialog box, draws the bitmap in the client area of a "static" picture frame control. The BDLG32 sample uses the Class Wizard to associate a CStatic member variable with the static control using its "Edit Variables" capability. Besides the above techniques, it demonstrates calculating the client area of a child control. Note that subclassing the CStatic member (after using Class Wizard to associate the control, just change the type in the header from CStatic to a class you've derived from CStatic) would allow you to have the subclassed control paint a bitmap in its client area when it itself received a WM_PAINT.
Method 3: BitBlt() or StretchBlt() in OnEraseBkgnd()The third method StretchBlt's the bitmap onto the background of a dialog box in the dialog box's WM_ERASEBKGND handler, OnEraseBkgnd(). It also demonstrates handling WM_CTLCOLOR messages and returning background brushes from that handler (transparent in this case).
Method 4: CBitmapButton as Picture ControlThe fourth and last method uses a CBitmapButton class to CBitmapButton::AutoLoad() a bitmap into a disabled owner-draw button on a dialog box. It is probably the simplest method of the four, although it does not allow for much flexibility or changing of what is being painted to reflect changes in the dialog box. Please note the following when creating your resources for using a CBitmapButton class. When you add the button to your dialog box template, which you will later be associating with a CBitmapButton, the ID is relatively unimportant, but the button must be set as owner-draw and the caption text will be used to load your bitmap. If your button caption text is "BITB", you should create your bitmap and give it an ID of "BITBU". Your bitmap ID MUST have the double quotation marks or it will be saved as just a numeric ID and fail to load when you use CBitmapButton::AutoLoad(). See the documentation for CBitmapButton for more information.
|
Additional query words: BDLG 4.0 4.00 4.1 4.10 4.2 4.20
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |