GetBitmapDC example for C++ Builder

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.

image\btncmd.gif Add a button to your form and name it as follows:

 

Name

Caption

 

Button1

GDI for Text

3.

Code the Button1 control's Click procedure as the following. 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.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 HDC LeadDC;
 HDC LeadClientDC;
HFONT hfnt;
HFONT hOldFont;
AnsiString mystring;

//Ensure that the Lead control is visible
LEADRasterView1->Visible = True;
//First, print text on the bitmap->
//Create a device context for the bitmap that the GDI functions can access
LeadDC = (HDC)LEADRasterView1->Raster->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 = (HFONT)GetStockObject(SYSTEM_FONT);
hOldFont = (HFONT)SelectObject(&LeadDC, &hfnt);
//Make the background transparent, so that the text will overlay the image
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
TextOut(LeadDC, 20, 40, mystring.c_str(), StrLen(mystring.c_str()));
//Restore the previous font
SelectObject(&LeadDC, &hOldFont);
//Remove the lock from the device control
LEADRasterView1->Raster->ReleaseBitmapDC ();
//Repaint the part of the image that has changed
LEADRasterView1->BackErase = False;
LEADRasterView1->ForceRepaint ();
//Allow full repainting again
LEADRasterView1->BackErase = True;
//Next, print text on the control.
//Create a device context for the control that the GDI functions can access
LeadClientDC = (HDC)LEADRasterView1->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 = (HFONT)GetStockObject(SYSTEM_FONT);
hOldFont = (HFONT)SelectObject(&LeadDC, &hfnt);
//Make the background transparent, so that the text will overlay the image
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.
TextOut(LeadClientDC, 20, 80, mystring.c_str(), StrLen(mystring.c_str()));
//Restore the previous font
SelectObject(LeadClientDC, hOldFont);
//Remove the lock from the device control
LEADRasterView1->ReleaseClientDC ();
}

4.

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.