#include #include #include #include Block PrintManager::smVInfoBlock; 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; } BOOL PrintManager::getPrinter(String &strPrinterKey,Printer &printer) { RegKey mchKey(RegKey::LocalMachine); String strPrinterNameKey("Name"); String strPrinterDriverKey("Printer Driver"); String strPrinterPortKey("Port"); String strQuery; if(!mchKey.openKey(strPrinterKey))return FALSE; mchKey.queryValue(strPrinterNameKey,strQuery); printer.printerName(strQuery); mchKey.queryValue(strPrinterDriverKey,strQuery); printer.driverName(strQuery); mchKey.queryValue(strPrinterPortKey,strQuery); printer.portName(strQuery); mchKey.closeKey(); return TRUE; } BOOL PrintManager::openPrinter(const String &strPrinterName,GUIWindow &parentWindow,const String &strPrintDocName) { mParentWindow=&parentWindow; return openPrinter(strPrinterName,strPrintDocName); } BOOL PrintManager::openPrinter(const String &strPrinterName,const String &strPrintDocName) { Printer printer; int index; closePrinter(); if(strPrinterName==mDefaultPrinter.printerName())printer=mDefaultPrinter; else for(index=0;index &strLines,Font &pageFont,Point xyPoint) { SIZE sizeData; if(!isInDoc()||!mPrinterDevice.isOkay())return FALSE; if(isInPage())endPage(); startPage(); mPrinterDevice.select((GDIObj)pageFont,TRUE); for(int index=0;indexdestroy();mAbortDlg.destroy();} mAbortDlg=::new AbortDlg; mAbortDlg.disposition(PointerDisposition::Delete); mAbortDlg->perform(*mParentWindow); return TRUE; } BOOL CALLBACK PrintManager::abortProc(HDC hDC,int nCode) { SmartPointer printManager; MSG msg; if(smVInfoBlock.size())for(int index=0;indexmAbortDlg.isOkay()&&!printManager->mAbortDlg->isDestroyed()) { printManager->mAbortDlg->yieldTask(); if(printManager->mAbortDlg->isCancelled())return FALSE; } while(::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } } return TRUE; }