SetPixel (), BitBlt () problems with windows 9x

The Amyuni PDF Converter is our Printer Driver that enables you to convert any documents to PDF format. If you have any questions about installing and using the Amyuni PDF Converter please post them here.
Post Reply
Posts: 3
Joined: Tue May 06 2003
Location: Brazil

SetPixel (), BitBlt () problems with windows 9x

Post by tiagog » Tue May 06 2003


I'm using a developer PDF converter license to create PDFs from DWG files from a visual c++ application, using the COM interface (CDINTF.DLL). What I'm doing is initializing the driver (DriverInit ()) and getting a DC from it (CreateDC ()). Then I create a memory only DC and render my drawing on it (a simplified version of my code is shown below). Only after the rendering I start my printing job and copy the contents of my memory DC to the printers DC, using StretchDIBits () (first I have to convert my DDB to a DIB).
Well, this works fine for printing files in Windows 95 through XP, with any printer that I tested so far. The only problem I'm having is with generating PDFs on Windows 95/98 machines: I get a huge PDF file with nothing in it, just a blank page, and acrobat just reports something like "insuficient data to display" (my messages are in portuguese). The PDF generations works just fine in Windows NT/2000/XP.
I made a simple test in witch I just get a DC to the PDF printer and do some SetPixel () calls, and the same problem happens, again just in windows 9x. I tested this with PDF Converter versions 1.39 and 2.07, same problem. Below is my code just to illustrate:

Code: Select all


ICDIntfPtr ptrPdf;
HRESULT hr = ptrPdf.CreateInstance (__uuidof (CDIntf));
if (FAILED(hr))
ptrPdf->DriverInit ("PDF Compatible Printer Driver") ;

HDC dc = (HDC)ptrPdf->CreateDC (); //ptrPdf was initialized before
CDC dcPrint;
CRect rect;

CalculatePrintArea (rect); 

dcPrint.CreateCompatibleDC (CDC::FromHandle (dc));
CBitmap bitmap;
bitmap.CreateCompatibleBitmap (CDC::FromHandle (dcPrint), rect.Width (), rect.Height  ());	
dcPrint.SelectObject (&bitmap);
SetBkColor (dcPrint, RGB (255,255,255));		
RenderDWGFile (myfile, dcPrint.m_hDC); 
StartDoc(dc, &di);    
CPalette pal;
HANDLE hDIB = DDBToDIB ((HBITMAP)bitmap.GetSafeHandle (), BI_RGB, (HPALETTE)pal.GetSafeHandle ());
if (GetDeviceCaps (dc, RASTERCAPS) & RC_BITBLT)
        SetBkColor (dc, RGB(255,255,255));
        SetTextColor (dc, RGB(0,0,0));

	int nColors = lpbi->biClrUsed ? lpbi->biClrUsed : 1 <<     lpbi->biBitCount;
	if( bmInfo.bmiHeader.biBitCount > 8 )
		lpDIBBits = (LPVOID)((LPDWORD)(bmInfo.bmiColors +   bmInfo.bmiHeader.biClrUsed) + ((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));
		lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors);
    StretchDIBits(dc,				// hDC
			0,							// DestX
			0,							// DestY
			rect.Width (),			// nDestWidth
			rect.Height (),						// nDestHeight
			0,				// SrcX
			0,	// SrcY
			rect.Width (),			// wSrcWidth
			rect.Height (),						// wSrcHeight
			lpDIBBits,					// lpBits
			&bmInfo,					// lpBitsInfo
			DIB_RGB_COLORS,				// wUsage
			SRCCOPY);					// dwROP

    EndPage (dc);

Is this a bug with PDF Converter? Any suggestions / feedback appreciated,


Tiago Gehring

Post Reply