The BiPrint DLL or OCX contain the printing functions or methods. These methods can print device independent bitmaps with several options. You can display dialogs to change printing properties before printing.
[C++]
#include “BiPrint.h”
void CMyDoc::MyPrint()
{
GPRINT sPrint;
DWORD nPageCnt;
// Set printig properties
sPrint.bDisplay = 1;
sPrint.bCenterVertImg = 0;
sPrint.bCenterHorizImg = 0;
sPrint.bScalePage = 1;
sPrint.bUseDPI = 1;
sPrint.nNumCopies = 1;
sPrint.bConvertCtoB = 0;
sPrint.bStretchPage = 0;
sPrint.bAllPage = 1;
// Prepares to print
// 1. parameter (HWND): Handle to the window
// 2. parameter (HDC): Printer DC. Can be NULL.
// 3. parameter (LPGPRINT): Pointer to the print information structure
// 4. parameter (LPTSTR): Name of the file to print
// 5. parameter (UINT): Number of pages in the document
int ret = PrepareToPrint(AfxGetMainWnd()->m_hWnd, App->m_PrinterDC
,&sPrint, szFileName, nImages);
POINT ptDPI;
LPPOINT lpPointDPI = NULL;
LPBITMAPINFOHEADER lpbmi =
(LPBITMAPINFOHEADER)GlobalLock(hDib);
if(lpbmi->biXPelsPerMeter && lpbmi->biYPelsPerMeter)
{
ptDPI.x = (int)( (float)lpbmi->biXPelsPerMeter / 39.37 + 0.5 );
ptDPI.y = (int)( (float)lpbmi->biYPelsPerMeter / 39.37 + 0.5 );
lpPointDPI = &ptDPI;
}
GlobalUnlock(hDib);
if (!ret)
{
if(sPrint.bAllPage)
{
for(nPageCnt = 0; nPageCnt < nImages; nPageCnt++)
{
// Load specified page into DIB
HDIB hDibTmp = LoadImage(szTiffFileName, nPageCnt);
if (hDibTmp)
{
// 1. parameter: Handle of the DIB
// 2. parameter: Image DPI
// 3. parameter: Scaling factor
// 4. parameter: Current Page number
// 5. parameter: A positive absolute offset in pixel on the X
// coordinate on the page to start printing.
// 6. parameter: A positive absolute offset in pixel on the Y
// coordinate on the page to start printing.
PrintDIBPage(hDibTmp, lpPointDPI, &rScale, nPageCnt,
0, 0);
…
GlobalFree(hDibTmp);
}
}
}
else
PrintDIBPage(hDib, lpPointDPI, &rScale, nCurPage,0,0);
}
EndPrint(NULL);
}
[C#]
private void Print()
{
long hDib = BiDisp.hDib;
long hwnd = BiDisp.hWnd;
int[] sRect;
sRect = new int[4];
sRect[0] = 1;
sRect[1] = 1;
sRect[2] = 1;
sRect[3] = 1;
if (PrinterSettings.InstalledPrinters.Count > 0)
{
// Print the actual DIB
if (hDib != 0)
{
// 1. parameter: Window handle for dialog boxes
// 2. parameter: Capture text to print
// 3. parameter: maximum page number
// 4. parameter: Number of copies
// 5. parameter: Display print dialog box
// 6. parameter: Center image vertically
// 7. parameter: Center image horizontally
// 8. parameter: Scale image to fit proportionally
// 9. parameter: Convert bitmap to monochrome
// 10. parameter: Stretch bitmap
// 11. parameter: All pages
// 12. parameter: Use DPI settings
// 13. parameter: Display or not cancel printing dialog box
BiPrint.PrepareToPrint(hwnd, GetDocument().szFileName,
maxPage, 1, true, false, false, false, false, false, false, true, false);
BiPrint.PrintDIBPage(hDib, ref sRect[0], 1, 0, 0);
BiPrint.EndPrint();
}
}
else
{
// Error
}
}