GetBitmapDC example for Access 2.0

Take the following steps to demonstrate how GDI functions can be used to print text on the bitmap and on the control. The text printed on the bitmap is a permanent part of the bitmap and becomes permanent if the bitmap is saved; whereas the text on the control is superficial and does not affect the bitmap.

Note: For an easier way of drawing text, refer to the Font example.

1. Start with the project that you created in Loading and Displaying an Image.

2. Add the following form-level variables to the declarations procedure of the general object in your main form. In online help, you can use the Edit pull-down menu to copy the block of code. (Refer to the Access 2.0 documentation for instructions on using API functions.)

Declare Function SetBkMode Lib "GDI" (ByVal hDC As Integer, ByVal nBkMode As Integer) As Integer
Declare Function SelectObject Lib "GDI" (ByVal hDC As Integer, ByVal hObject As Integer) As Integer
Declare Function TextOut Lib "GDI" (ByVal hDC As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal lpString As String, ByVal nCount As Integer) As Integer
Declare Function GetStockObject Lib "GDI" (ByVal nIndex As Integer) As Integer
Const SYSTEM_FONT = 13
Const TRANSPARENT = 1

3. image\btncmd.gif Select the Command Button control; then add a control to your form. Put the control at the top of the form to keep it away from the image.

4. In the Properties box, change the Command Button control's Name property to PrintText and change the Caption property to Print Text.

5. Use the right mouse button to click the command button, select Build Event, and select Code Builder.

6. Add the following code to the click event. In online help, you can use the Edit pull-down menu to copy the block of code.

Notice that the code prints in two different places: the bitmap and the control. You can see the difference when you run the program.

Sub Command1_Click ()
    'Ensure that the Lead control is visible
    Me![LEAD1].Visible = True

    'First, print text on the bitmap.

    'Create a device context for the bitmap that the GDI functions can access
    LeadDC = Me![LEAD1].Object.GetBitmapDC 

    'Get the system font and select it. The old font is saved.
    'Using other fonts is more complex. Refer to the Windows API documentation.
    hfnt = GetStockObject(SYSTEM_FONT)
    hOldFont = SelectObject(LeadDC, hfnt)

    'Make the background transparent, so that the text will overlay the image
    MyReturn = SetBkMode(LeadDC, TRANSPARENT)
    'Assign the string value
    mystring$ = "Text on the bitmap"
    'Print the text on the bitmap. This is a permanent change in the bitmap
    MyReturn = TextOut(LeadDC, 20, 40, mystring$, Len(mystring$) )

    'Restore the previous font
    MyReturn = SelectObject(LeadDC, hOldFont)

    'Remove the lock from the device control
    Me![LEAD1].Object.ReleaseBitmapDC

    'Repaint the part of the image that has changed
    Me![LEAD1].Object.BackErase = False
    Me![LEAD1].Object.ForceRepaint

    'Allow full repainting again
    Me![LEAD1].Object.BackErase = True

    'Next, print text on the control.

    'Create a device context for the control that the GDI functions can access
    LeadClientDC = Me![LEAD1].Object.GetClientDC 

    'Get the system font and select it. The old font is saved.
    'Using other fonts is more complex. Refer to the Windows API documentation.
    hfnt = GetStockObject(SYSTEM_FONT)
    hOldFont = SelectObject(LeadDC, hfnt)

    'Make the background transparent, so that the text will overlay the image
    MyReturn = SetBkMode(LeadClientDC, TRANSPARENT)
    'Assign the string value
    mystring$ = "Text on the LEAD control"
    'Print the text on the control. This overlay does not affect the bitmap.
    MyReturn = TextOut(LeadClientDC, 20, 80, mystring$, Len(mystring$))

    'Restore the previous font
    MyReturn = SelectObject(LeadClientDC, hOldFont)
    'Remove the lock from the device control
    Me![LEAD1].Object.ReleaseClientDC

End Sub

7. Run your program to test it. Notice that the text printed on the bitmap is scaled as part of the bitmap. If you zoom in, it becomes larger, and if you zoom out, it becomes smaller. The text printed on the control is the normal size for the system font and is not affected by zooming.