void dialog_print(HWND hMainWnd, LPWSTR wszFileName) { PRINTDLGW pd; HWND hEditorWnd = GetDlgItem(hMainWnd, IDC_EDITOR); int from = 0; int to = 0; ZeroMemory(&pd, sizeof(pd)); pd.lStructSize = sizeof(pd); pd.hwndOwner = hMainWnd; pd.Flags = PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE; pd.nMinPage = 1; pd.nMaxPage = -1; pd.hDevMode = devMode; pd.hDevNames = devNames; SendMessageW(hEditorWnd, EM_GETSEL, (WPARAM)&from, (LPARAM)&to); if(from == to) pd.Flags |= PD_NOSELECTION; if(PrintDlgW(&pd)) { devMode = pd.hDevMode; devNames = pd.hDevNames; print(&pd, wszFileName); update_ruler(get_ruler_wnd(hMainWnd)); } }
static BOOL SetDefaultPSD(void){ // HDC hdc; int dpix, dpiy; ZeroMemory(&g_pPdlg, sizeof(g_pPdlg)); g_pPdlg.lStructSize = sizeof(g_pPdlg); g_pPdlg.hInstance = g_hInstance; g_pPdlg.Flags = PD_RETURNDEFAULT | PD_RETURNDC; if(PrintDlgW(&g_pPdlg)){ // hdc = CreatePrinterDC(g_pPdlg.hDevMode, g_pPdlg.hDevNames); g_pSetup.rtMargin.left = 1000; g_pSetup.rtMargin.right = 1000; g_pSetup.rtMargin.top = 750; g_pSetup.rtMargin.bottom = 750; dpix = GetDeviceCaps(g_pPdlg.hDC, LOGPIXELSX); dpiy = GetDeviceCaps(g_pPdlg.hDC, LOGPIXELSY); g_pSetup.ptPaperSize.x = (GetDeviceCaps(g_pPdlg.hDC, PHYSICALWIDTH) * 1000) / dpix; g_pSetup.ptPaperSize.y = (GetDeviceCaps(g_pPdlg.hDC, PHYSICALHEIGHT) * 1000) / dpiy; g_pSetup.rtMinMargin.left = (GetDeviceCaps(g_pPdlg.hDC, PHYSICALOFFSETX) * 1000) / dpix; g_pSetup.rtMinMargin.top = (GetDeviceCaps(g_pPdlg.hDC, PHYSICALOFFSETY) * 1000) / dpiy; g_pSetup.rtMinMargin.right = g_pSetup.ptPaperSize.x - g_pSetup.rtMinMargin.left - (GetDeviceCaps(g_pPdlg.hDC, HORZRES) * 1000) / dpix; g_pSetup.rtMinMargin.bottom = g_pSetup.ptPaperSize.y - g_pSetup.rtMinMargin.top - (GetDeviceCaps(g_pPdlg.hDC, VERTRES) * 1000) / dpiy; GlobalFree(g_pPdlg.hDevMode); GlobalFree(g_pPdlg.hDevNames); // DeleteDC(hdc); return TRUE; } else{ return FALSE; } }
void get_default_printer_opts(void) { PRINTDLGW pd; ZeroMemory(&pd, sizeof(pd)); ZeroMemory(&pd, sizeof(pd)); pd.lStructSize = sizeof(pd); pd.Flags = PD_RETURNDC | PD_RETURNDEFAULT; pd.hDevMode = devMode; PrintDlgW(&pd); devMode = pd.hDevMode; devNames = pd.hDevNames; }
VOID DIALOG_FilePrinterSetup(VOID) { PRINTDLGW printer; ZeroMemory(&printer, sizeof(printer)); printer.lStructSize = sizeof(printer); printer.hwndOwner = Globals.hMainWnd; printer.hDevMode = Globals.hDevMode; printer.hDevNames = Globals.hDevNames; printer.hInstance = Globals.hInstance; printer.Flags = PD_PRINTSETUP; printer.nCopies = 1; PrintDlgW(&printer); Globals.hDevMode = printer.hDevMode; Globals.hDevNames = printer.hDevNames; }
int QPrintDialogPrivate::openWindowsPrintDialogModally() { Q_Q(QPrintDialog); QWidget *parent = q->parentWidget(); if (parent) parent = parent->window(); else parent = qApp->activeWindow(); QWidget modal_widget; modal_widget.setAttribute(Qt::WA_NoChildEventsForParent, true); modal_widget.setParent(parent, Qt::Window); QApplicationPrivate::enterModal(&modal_widget); HGLOBAL *tempDevNames = ep->createDevNames(); bool result; bool done; void *pd = QT_WA_INLINE( (void*)(qt_win_make_PRINTDLG<PRINTDLGW, DEVMODEW>(parent, q, this, tempDevNames)), (void*)(qt_win_make_PRINTDLG<PRINTDLGA, DEVMODEA>(parent, q, this, tempDevNames)) ); do { done = true; QT_WA({ PRINTDLGW *pdw = reinterpret_cast<PRINTDLGW *>(pd); result = PrintDlgW(pdw); if ((pdw->Flags & PD_PAGENUMS) && (pdw->nFromPage > pdw->nToPage)) done = false; if (result && pdw->hDC == 0) result = false; else if (!result) done = true; }, { PRINTDLGA *pda = reinterpret_cast<PRINTDLGA *>(pd); result = PrintDlgA(pda); if ((pda->Flags & PD_PAGENUMS) && (pda->nFromPage > pda->nToPage)) done = false; if (result && pda->hDC == 0) result = false; else if (!result) done = true; });
VOID DIALOG_FilePrint(VOID) { DOCINFOW di; PRINTDLGW printer; int page, dopage, copy; LOGFONTW lfFont; HFONT hTextFont, old_font = 0; DWORD size; BOOL ret = FALSE; RECT rc; LPWSTR pTemp; TEXTINFO tInfo; WCHAR cTemp[PRINT_LEN_MAX]; /* Get Current Settings */ ZeroMemory(&printer, sizeof(printer)); printer.lStructSize = sizeof(printer); printer.hwndOwner = Globals.hMainWnd; printer.hDevMode = Globals.hDevMode; printer.hDevNames = Globals.hDevNames; printer.hInstance = Globals.hInstance; /* Set some default flags */ printer.Flags = PD_RETURNDC | PD_NOSELECTION; printer.nFromPage = 0; printer.nMinPage = 1; /* we really need to calculate number of pages to set nMaxPage and nToPage */ printer.nToPage = 0; printer.nMaxPage = -1; /* Let commdlg manage copy settings */ printer.nCopies = (WORD)PD_USEDEVMODECOPIES; if (!PrintDlgW(&printer)) return; Globals.hDevMode = printer.hDevMode; Globals.hDevNames = printer.hDevNames; SetMapMode(printer.hDC, MM_TEXT); /* initialize DOCINFO */ di.cbSize = sizeof(DOCINFOW); di.lpszDocName = Globals.szFileTitle; di.lpszOutput = NULL; di.lpszDatatype = NULL; di.fwType = 0; if(printer.Flags & PD_PRINTTOFILE) { di.lpszOutput = dialog_print_to_file(printer.hwndOwner); if(!di.lpszOutput) return; } /* Get the file text */ size = GetWindowTextLengthW(Globals.hEdit) + 1; pTemp = HeapAlloc(GetProcessHeap(), 0, size * sizeof(WCHAR)); if (!pTemp) { DeleteDC(printer.hDC); ShowLastError(); return; } size = GetWindowTextW(Globals.hEdit, pTemp, size); if (StartDocW(printer.hDC, &di) > 0) { /* Get the page margins in pixels. */ rc.top = MulDiv(Globals.iMarginTop, GetDeviceCaps(printer.hDC, LOGPIXELSY), 2540) - GetDeviceCaps(printer.hDC, PHYSICALOFFSETY); rc.bottom = GetDeviceCaps(printer.hDC, PHYSICALHEIGHT) - MulDiv(Globals.iMarginBottom, GetDeviceCaps(printer.hDC, LOGPIXELSY), 2540); rc.left = MulDiv(Globals.iMarginLeft, GetDeviceCaps(printer.hDC, LOGPIXELSX), 2540) - GetDeviceCaps(printer.hDC, PHYSICALOFFSETX); rc.right = GetDeviceCaps(printer.hDC, PHYSICALWIDTH) - MulDiv(Globals.iMarginRight, GetDeviceCaps(printer.hDC, LOGPIXELSX), 2540); /* Create a font for the printer resolution */ lfFont = Globals.lfFont; lfFont.lfHeight = MulDiv(lfFont.lfHeight, GetDeviceCaps(printer.hDC, LOGPIXELSY), get_dpi()); /* Make the font a bit lighter */ lfFont.lfWeight -= 100; hTextFont = CreateFontIndirectW(&lfFont); old_font = SelectObject(printer.hDC, hTextFont); for (copy = 1; copy <= printer.nCopies; copy++) { page = 1; tInfo.mptr = pTemp; tInfo.mend = pTemp + size; tInfo.lptr = cTemp; tInfo.len = 0; do { if (printer.Flags & PD_PAGENUMS) { /* a specific range of pages is selected, so * skip pages that are not to be printed */ if (page > printer.nToPage) break; else if (page >= printer.nFromPage) dopage = 1; else dopage = 0; } else dopage = 1; ret = notepad_print_page(printer.hDC, &rc, dopage, page, &tInfo); page++; } while (ret && tInfo.mptr < tInfo.mend); if (!ret) break; } EndDoc(printer.hDC); SelectObject(printer.hDC, old_font); DeleteObject(hTextFont); } DeleteDC(printer.hDC); HeapFree(GetProcessHeap(), 0, pTemp); }
void PrintEdit(HWND hEdit, wchar_t * lpDocName){ FORMATRANGE fr; CHARRANGE chrg; HDC hPrintDC; int tempFlags; int pageMin = 0, pageMax = 0; HFONT hFontPageNumber, hFontOld; LOGFONTW lf; int xNP, yNP, yDoc; DOCINFOW docinfo; wchar_t szPage[32]; int oldAlign; COLORREF oldColor; ZeroMemory(&g_pPdlg, sizeof(g_pPdlg)); g_pPdlg.lStructSize = sizeof(g_pPdlg); g_pPdlg.hwndOwner = g_hMain; g_pPdlg.hInstance = g_hInstance; SendMessageW(hEdit, EM_EXGETSEL ,0, (LPARAM)&chrg); if(chrg.cpMax == 0 || chrg.cpMax == chrg.cpMin){ g_pPdlg.Flags = PD_ALLPAGES | PD_NOSELECTION; } else{ if(chrg.cpMax > chrg.cpMin){ g_pPdlg.Flags = PD_SELECTION; } else{ g_pPdlg.Flags = PD_ALLPAGES; } } g_pPdlg.Flags |= PD_RETURNDC | PD_HIDEPRINTTOFILE | 0x20000; //PD_NONETWORKBUTTON GetPageInfo(hEdit, FALSE); g_pPdlg.nFromPage = 1; g_pPdlg.nToPage = m_CountPage; g_pPdlg.nMinPage = 1; g_pPdlg.nMaxPage = m_CountPage; g_pPdlg.nCopies = 1; if(PrintDlgW(&g_pPdlg)){ hPrintDC = g_pPdlg.hDC; fr.hdc = hPrintDC; fr.hdcTarget = NULL; tempFlags = g_pPdlg.Flags; tempFlags &= PD_ALLPAGES | PD_SELECTION | PD_PAGENUMS; if(tempFlags == PD_ALLPAGES){ pageMin = 0; pageMax = m_CountPage; } else if(tempFlags == PD_SELECTION){ GetPageInfo(hEdit, TRUE); pageMin = 0; pageMax = m_CountPage; } else if(tempFlags == PD_PAGENUMS){ pageMin = g_pPdlg.nFromPage; pageMin--; pageMax = g_pPdlg.nToPage; } fr.rc.left = m_Margin.left; fr.rc.top = m_Margin.top; fr.rc.right = m_Paper.x - m_Margin.right; fr.rc.bottom = m_Paper.y - m_Margin.bottom; ZeroMemory(&lf, sizeof(lf)); lf.lfHeight = -MulDiv(10, GetDeviceCaps(hPrintDC, LOGPIXELSY), 72); wcscpy(lf.lfFaceName, FONT_NP); hFontPageNumber = CreateFontIndirectW(&lf); yNP = GetDeviceCaps(hPrintDC, VERTRES); xNP = GetDeviceCaps(hPrintDC, HORZRES) / 2; yDoc = 16; fr.rcPage.left = 0; fr.rcPage.top = 0; fr.rcPage.right = m_Paper.x; fr.rcPage.bottom = m_Paper.y ; ZeroMemory(&docinfo, sizeof(docinfo)); docinfo.cbSize = sizeof(docinfo); docinfo.lpszDocName = lpDocName; StartDocW(hPrintDC, &docinfo); if(pageMax){ do{ pageMin++; StartPage(hPrintDC); hFontOld = SelectFont(hPrintDC, hFontPageNumber); wsprintfW(szPage, L"Page %i", pageMin); oldAlign = SetTextAlign(hPrintDC, TA_CENTER | TA_BOTTOM); oldColor = SetTextColor(hPrintDC, 0); TextOutW(hPrintDC, xNP, yNP, szPage, wcslen(szPage)); SetTextAlign(hPrintDC, TA_CENTER | TA_TOP); TextOutW(hPrintDC, xNP, yDoc, lpDocName, wcslen(lpDocName)); SetTextColor(hPrintDC, oldColor); SelectFont(hPrintDC, hFontOld); SetTextAlign(hPrintDC, oldAlign); if(m_pChar){ int min = pageMin; min--; fr.chrg.cpMin = *(m_pChar + min); min++; fr.chrg.cpMax = *(m_pChar + min); } else{ fr.chrg.cpMin = 0; fr.chrg.cpMax = 0; } SendMessageW(hEdit, EM_FORMATRANGE, TRUE, (LPARAM)&fr); EndPage(hPrintDC); }while(pageMin < pageMax); } DeleteFont(hFontPageNumber); SendMessageW(hEdit, EM_FORMATRANGE, FALSE, (LPARAM)NULL); EndDoc(hPrintDC); DeleteDC(hPrintDC); } }