1. 擷取預設印表機名稱
BOOL GetDefaultPrinter(LPTSTR szPrinterName, int nPrintNameBufferLen) { *szPrinterName = 0; CPrintDialog pd(FALSE); if (pd.GetDefaults()) { if (pd.m_pd.hDC) DeleteDC(pd.m_pd.hDC); if (pd.m_pd.hDevNames) { LPDEVNAMES pdn = (LPDEVNAMES)GlobalLock(pd.m_pd.hDevNames); nPrintNameBufferLen--; *(szPrinterName + nPrintNameBufferLen) = 0; _tcsncpy(szPrinterName, (LPTSTR)pdn + pdn-> wDeviceOffset, nPrintNameBufferLen); //印表機名稱 GlobalUnlock(pd.m_pd.hDevNames); GlobalFree(pd.m_pd.hDevNames); } } return (*szPrinterName); }
2. 列印菜單
BOOL PrintMenu(CString &strContent){ParserOrder parser;if(FALSE == parser.parserOrderText(strContent)){return FALSE;}DOCINFO di; CDC dc; HDC hDC; ZeroMemory(&di, sizeof(DOCINFO)); di.cbSize = sizeof(DOCINFO); di.lpszDocName = _T("order"); di.fwType = DI_APPBANDING; hDC = CreateDC( _T("WINSPOOL "), m_PrinterName, NULL, NULL); dc.Attach(hDC); dc.StartDoc(&di); dc.StartPage();CString str;int top =LINE_INTERVAL;dc.TextOut(LEFT_MARGIN+50, top , _T("點菜單")); top+=LINE_HEIGHT;str=_T("餐台號")+parser.m_TableId+_T("下單時間:")+parser.m_StreamLine;dc.TextOut(LEFT_MARGIN, top , str); top+=LINE_HEIGHT;str=_T("人數:")+parser.m_PersonCount;dc.TextOut(LEFT_MARGIN, top , str); top+=LINE_HEIGHT;str=_T("點菜詳情:");dc.TextOut(LEFT_MARGIN, top , str); top+=LINE_HEIGHT;str=_T("名稱 數量 單位單價 小計");dc.TextOut(LEFT_MARGIN, top , str); POSITION pos=NULL;OrderItem *pItem;pos=parser.m_Items.GetHeadPosition();while(pos!=NULL){pItem=(OrderItem *)parser.m_Items.GetNext(pos);int col,row;top+=LINE_HEIGHT;str=pItem->dishName+_T(" ")+pItem->dishNum+_T(" ")+pItem->dishUnit+_T("")+pItem->dishPrice+_T(" ")+pItem->dishPrice;dc.TextOut(LEFT_MARGIN, top , str); if(pItem->dishMake.GetLength()>0){top+=LINE_HEIGHT;dc.TextOut(LEFT_MARGIN, top , pItem->dishMake); }}top+=LINE_HEIGHT;str=_T("金額總計:")+parser.m_Price;dc.TextOut(LEFT_MARGIN, top , str); dc.EndPage(); dc.EndDoc(); dc.DeleteDC(); return TRUE; }