Alexander Nicolaysen Sørnes : commdlg: PrintDlg16: Handle print quality combobox.
Alexandre Julliard
julliard at winehq.org
Tue Feb 26 05:45:24 CST 2008
Module: wine
Branch: master
Commit: 8487a5dc5995d4b9151709f2a01cba3252f14f7a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8487a5dc5995d4b9151709f2a01cba3252f14f7a
Author: Alexander Nicolaysen Sørnes <alex at thehandofagony.com>
Date: Tue Jan 29 22:40:23 2008 +0100
commdlg: PrintDlg16: Handle print quality combobox.
---
dlls/comdlg32/printdlg.c | 73 ++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 71 insertions(+), 2 deletions(-)
diff --git a/dlls/comdlg32/printdlg.c b/dlls/comdlg32/printdlg.c
index 93b99e9..b74c9fa 100644
--- a/dlls/comdlg32/printdlg.c
+++ b/dlls/comdlg32/printdlg.c
@@ -362,6 +362,21 @@ static BOOL PRINTDLG_UpdatePrintDlgA(HWND hDlg,
lppd->Flags &= ~PD_COLLATE;
lppd->nCopies = GetDlgItemInt(hDlg, edt3, NULL, FALSE);
}
+
+ /* Print quality, PrintDlg16 */
+ if(GetDlgItem(hDlg, cmb1))
+ {
+ HWND hQuality = GetDlgItem(hDlg, cmb1);
+ int Sel = SendMessageA(hQuality, CB_GETCURSEL, 0, 0);
+
+ if(Sel != CB_ERR)
+ {
+ LONG dpi = SendMessageA(hQuality, CB_GETITEMDATA, Sel, 0);
+ lpdm->dmFields |= DM_PRINTQUALITY | DM_YRESOLUTION;
+ lpdm->u1.s1.dmPrintQuality = LOWORD(dpi);
+ lpdm->dmYResolution = HIWORD(dpi);
+ }
+ }
}
return TRUE;
}
@@ -997,6 +1012,61 @@ BOOL PRINTDLG_ChangePrinterA(HWND hDlg, char *name,
if (lppd->Flags & PD_HIDEPRINTTOFILE)
ShowWindow(GetDlgItem(hDlg, chx1), SW_HIDE);
+ /* Fill print quality combo, PrintDlg16 */
+ if(GetDlgItem(hDlg, cmb1))
+ {
+ DWORD numResolutions = DeviceCapabilitiesA(PrintStructures->lpPrinterInfo->pPrinterName,
+ PrintStructures->lpPrinterInfo->pPortName,
+ DC_ENUMRESOLUTIONS, NULL, lpdm);
+
+ if(numResolutions != -1)
+ {
+ HWND hQuality = GetDlgItem(hDlg, cmb1);
+ LONG* Resolutions;
+ char buf[255];
+ int i;
+ int dpiX, dpiY;
+ HDC hPrinterDC = CreateDCA(PrintStructures->lpPrinterInfo->pDriverName,
+ PrintStructures->lpPrinterInfo->pPrinterName,
+ 0, lpdm);
+
+ Resolutions = HeapAlloc(GetProcessHeap(), 0, numResolutions*sizeof(LONG)*2);
+ DeviceCapabilitiesA(PrintStructures->lpPrinterInfo->pPrinterName,
+ PrintStructures->lpPrinterInfo->pPortName,
+ DC_ENUMRESOLUTIONS, (LPSTR)Resolutions, lpdm);
+
+ dpiX = GetDeviceCaps(hPrinterDC, LOGPIXELSX);
+ dpiY = GetDeviceCaps(hPrinterDC, LOGPIXELSY);
+ DeleteDC(hPrinterDC);
+
+ SendMessageA(hQuality, CB_RESETCONTENT, 0, 0);
+ for(i = 0; i < (numResolutions * 2); i += 2)
+ {
+ BOOL IsDefault = FALSE;
+ LRESULT Index;
+
+ if(Resolutions[i] == Resolutions[i+1])
+ {
+ if(dpiX == Resolutions[i])
+ IsDefault = TRUE;
+ sprintf(buf, "%d dpi", Resolutions[i]);
+ } else
+ {
+ if(dpiX == Resolutions[i] && dpiY == Resolutions[i+1])
+ IsDefault = TRUE;
+ sprintf(buf, "%d dpi x %d dpi", Resolutions[i], Resolutions[i+1]);
+ }
+
+ Index = SendMessageA(hQuality, CB_ADDSTRING, 0, (LPARAM)buf);
+
+ if(IsDefault)
+ SendMessageA(hQuality, CB_SETCURSEL, Index, 0);
+
+ SendMessageA(hQuality, CB_SETITEMDATA, Index, MAKELONG(dpiX,dpiY));
+ }
+ HeapFree(GetProcessHeap(), 0, Resolutions);
+ }
+ }
} else { /* PD_PRINTSETUP */
BOOL bPortrait = (lpdm->u1.s1.dmOrientation == DMORIENT_PORTRAIT);
@@ -1536,9 +1606,8 @@ LRESULT PRINTDLG_WMCommandA(HWND hDlg, WPARAM wParam,
}
break;
- case cmb1: /* Printer Combobox in PRINT SETUP, quality combobox in PRINT */
+ case cmb1: /* Printer Combobox in PRINT SETUP, quality combobox in PRINT16 */
if (PrinterComboID != LOWORD(wParam)) {
- FIXME("No handling for print quality combo box yet.\n");
break;
}
/* FALLTHROUGH */
More information about the wine-cvs
mailing list