BOOL PrintManager::printBitmap(PureBitmap &pureBitmap,BOOL advancePage,int width,int height) { BitmapInfo bmInfo; PurePalette systemPalette; GlobalData bitmapBits; WORD bmWidth; WORD bmHeight; if(!pureBitmap.isOkay())return FALSE; if(!isInDoc()||!mPrinterDevice.isOkay())return FALSE; if(!(::GetDeviceCaps(mPrinterDevice,RASTERCAPS)&RC_BITBLT))return FALSE; if(advancePage&&isInPage())endPage(); if(!isInPage())startPage(); systemPalette.systemPalette(); bmWidth=pureBitmap.width(); bmHeight=pureBitmap.height(); pureBitmap.bitmapBits(bmWidth,bmHeight,bitmapBits); if(!width)width=bmWidth; if(!height)height=bmHeight; bmInfo.width(bmWidth); bmInfo.height(bmHeight); bmInfo=systemPalette; ::StretchDIBits(mPrinterDevice,0,0,width,height,0,0,bmInfo.width(),bmInfo.height(),(BYTE*)&bitmapBits[0],(BITMAPINFO*)bmInfo,DIB_RGB_COLORS,SRCCOPY); if(advancePage)endPage(); return TRUE; } /* BOOL PrintManager::getPrinters(void) { String strPrinterKey("System\\CurrentControlSet\\Control\\Print\\Printers"); String strDefaultPrinter; RegKey cfgKey(RegKey::CurrentConfig); Printer printer; String strPrinter; int enumKey(0); mPrinters.remove(); if(!cfgKey.openKey(strPrinterKey))return FALSE; cfgKey.queryValue("Default",strDefaultPrinter); if(getPrinter(strPrinterKey+String("\\")+strDefaultPrinter,printer))mDefaultPrinter=printer; while(TRUE) { if(!cfgKey.enumKey(enumKey++,strPrinter))break; if(getPrinter(strPrinterKey+String("\\")+strPrinter,printer))mPrinters.insert(&printer); } cfgKey.closeKey(); return TRUE; } */ ::OutputDebugString(String(String("Driver:")+printer.printerName()+String("\n")).str()); ::OutputDebugString(String(String("Device:")+printer.driverName()+String("\n")).str()); ::OutputDebugString(String(String("Output:")+printer.portName()+String("\n")).str()); ::OutputDebugString(String(String("DevMode:")+String("")+String("\n")).str()); // printDlg.Flags=PD_RETURNIC; getDefaultDevNames(devNames); // printer name (driver offset) "winspool" // drivername (device offset) "IO//" // portname (output offset) "LPT1:" printDlg.hDevNames=devNames.getHandle(); void PrintManager::getDefaultDevNames(GlobalData &devNames) { String printerName; String driverName; String portName; DEVNAMES *pDevNames; char *pChrDevNames; printerName=mDefaultPrinter.printerName(); driverName=mDefaultPrinter.driverName(); portName=mDefaultPrinter.portName(); devNames.size(sizeof(DEVNAMES)+printerName.length()+1+driverName.length()+1+portName.length()+1,GMEM_MOVEABLE); devNames.setZero(); pDevNames=(DEVNAMES*)&devNames[0]; pDevNames->wDriverOffset=sizeof(DEVNAMES); pDevNames->wDeviceOffset=sizeof(DEVNAMES)+printerName.length()+1; pDevNames->wOutputOffset=sizeof(DEVNAMES)+printerName.length()+1+driverName.length()+1; pDevNames->wDefault=true; pChrDevNames=((char*)pDevNames)+pDevNames->wDriverOffset; ::strcpy(pChrDevNames,printerName.str()); pChrDevNames=((char*)pDevNames)+pDevNames->wDeviceOffset; ::strcpy(pChrDevNames,driverName.str()); pChrDevNames=((char*)pDevNames)+pDevNames->wOutputOffset; ::strcpy(pChrDevNames,portName.str()); }