Available in the LEADTOOLS Imaging toolkit. |
GetBitmapDC example for Visual Basic
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 DrawText example.
1. Start with the project that you created in Loading and Displaying an Image.
2. Open the C DLL Viewer by double-clicking the C DLL Text Viewer icon in the Visual Basic program group on your desktop.
3. From the File menu, choose Load Text File.
4. Open either WIN31API.TXT (16-bit Windows declares, types, and constants), or WIN32API.TXT (32-bit Windows declares, types, and constants), which are located in the \WINAPI subdirectory of the main Visual Basic directory.
5. In the C DLL Type drop-down list box, select Declares; then select and add the following items:
SetBkMode
TextOut
GetStockObject
SelectObject
6. In the C DLL Type drop-down list box, select Constants; then select and add the following items:
SYSTEM_FONT
TRANSPARENT
7. Copy the selected items, and paste them into the declarations procedure of the general object in your form. In this example, you must edit the declarations and constants to make them private. On a 16-bit system, they should appear as follows:
Private Declare Function SetBkMode Lib "GDI" (ByVal hDC As Integer, ByVal nBkMode As Integer) As Integer
Private Declare Function SelectObject Lib "GDI" (ByVal hDC As Integer, ByVal hObject As Integer) As Integer
Private 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
Private Declare Function GetStockObject Lib "GDI" (ByVal nIndex As Integer) As Integer
Const SYSTEM_FONT = 13
Const TRANSPARENT = 1
8. Select the CommandButton control; then add the control to your main form. Put the control at the top of the form to keep it away from the image.
9. In the Properties box, change the CommandButton control's Caption property to GDI for Text.
10. Add the following code to the CommandButton control's Click procedure. 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
Lead1.Visible = True
'First, print text on the bitmap.
'Create a device context for the bitmap that the GDI functions can access
LeadDC = Lead1.GetBitmapDC
'Get the system font and select it. The old font is saved.
'Using other fonts is more complex. Refer to the Windows C DLL 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
Lead1.ReleaseBitmapDC
'Repaint the part of the image that has changed
Lead1.BackErase = False
Lead1.ForceRepaint
'Allow full repainting again
Lead1.BackErase = True
'Next, print text on the control.
'Create a device context for the control that the GDI functions can access
LeadClientDC = Lead1.GetClientDC
'Get the system font and select it. The old font is saved.
'Using other fonts is more complex. Refer to the Windows C DLL 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 is an overlay that 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
Lead1.ReleaseClientDC
End Sub
11. 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.