Esempio n. 1
0
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));
    }
}
Esempio n. 2
0
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;
	}
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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;
        });
Esempio n. 6
0
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);
}
Esempio n. 7
0
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);
	}
}