Skinning (BitBlt Introduction)

BitBlt API

The first API function I'm going to teach you about is BitBlt. If you already know how to use this function then this tutorial will not be of much use to you, otherwise keep on reading. The decleration of BitBlt is a long one, check it out:

Declare Function BitBlt Lib "gdi32" ( _
  ByVal hDestDC As Long, _
  ByVal X As Long, _
  ByVal Y As Long, _
  ByVal nWidth As Long, _
  ByVal nHeight As Long, _
  ByVal hSrcDC As Long, _
  ByVal xSrc As Long, _
  ByVal ySrc As Long, _
  ByVal dwRop As Long) As Long


Don't be scared off by the complex look of it. In practice it's quite easy to use.

Let's start by going through each parameter.

The first is hDestDC and this is just a handle to the container you want to draw onto. This can be any control with a DC (which stands for device context). You can usually get the DC of a control via the hDC property. For my example we will be painting onto the form so we will use the forms hDC property for this parameter.

Then we have to pass the X & Y coordinates (in pixels) for where on the destination we want to start the painting. This is the equivilant of the Top & Left properties of VB controls. In this tutorial we will use 0 for both these values as we want the entire form painted from top to bottom.

We then specify the width & height (nWidth and nHeight) of the painting. This is equivilant to the Width & Height properties of VB controls. If the source image is larger than either of these it will be cropped (cut off at the right or bottom sides). To cover the entire form we will need to set these as the forms height and width.

The next parameter is the source DC (hSrcDC) which is where BitBlt gets the data to be copied over. In this tutorial we will be using the DC of the picture box that contains the image.

Then we have to give BitBlt xSrc & ySrc values, these are the values that BitBlt will start copying over from. For this basic tutorial they will be set as 0 always.
You might have noticed that there is no nSrcWidth or nSrcHeight variables. That is because BitBlt uses the nWidth value for the destination width and source width.

The last parameter is what we use to tell BitBlt how to copy the image over. VB contains it's own constants for this parameter so we might as well use them. You could define your own constants but as VB already provides them I think it's easiest to use the ones already provided. In this tutorial we're only going to use vbSrcCopy.

You might also like...

Comments

About the author

Marc Pritchard

Marc Pritchard United States

Apart from my school work I put most of my effort into running my joke site, I'd like to think that it makes someone smile each day. For about 1/2 a year I've been programming more and more in s...

Interested in writing for us? Find out more.

Contribute

Why not write for us? Or you could submit an event or a user group in your area. Alternatively just tell us what you think!

Our tools

We've got automatic conversion tools to convert C# to VB.NET, VB.NET to C#. Also you can compress javascript and compress css and generate sql connection strings.

“Some people, when confronted with a problem, think "I know, I’ll use regular expressions." Now they have two problems.” - Jamie Zawinski