[W->A] Fix printdlg.c
Dimitrie O. Paun
dpaun at rogers.com
Wed Sep 22 00:23:22 CDT 2004
Hmmm, there is one tricky transition that I have not
eliminated. It requires a unicode version of sscanf,
and the only one I know of is in msvcrt. Can we make use
of that one?
ChangeLog
Avoid W->A transitions in printdlg.c
Index: dlls/commdlg/printdlg.c
===================================================================
RCS file: /var/cvs/wine/dlls/commdlg/printdlg.c,v
retrieving revision 1.79
diff -u -r1.79 printdlg.c
--- dlls/commdlg/printdlg.c 18 Aug 2004 21:00:05 -0000 1.79
+++ dlls/commdlg/printdlg.c 22 Sep 2004 05:20:34 -0000
@@ -156,17 +156,15 @@
if(!name ||
(i = SendDlgItemMessageW(hDlg, id, CB_FINDSTRINGEXACT, -1,
(LPARAM)name)) == CB_ERR) {
-
- /* ansi is ok */
- char buf[260];
- DWORD dwBufLen = sizeof(buf);
- FIXME("Can't find '%s' in printer list so trying to find default\n",
+ WCHAR buf[260];
+ DWORD dwBufLen = sizeof(buf)/sizeof(buf[0]);
+ TRACE("Can't find '%s' in printer list so trying to find default\n",
debugstr_w(name));
- if(!GetDefaultPrinterA(buf, &dwBufLen))
+ if(!GetDefaultPrinterW(buf, &dwBufLen))
return num;
- i = SendDlgItemMessageA(hDlg, id, CB_FINDSTRINGEXACT, -1, (LPARAM)buf);
+ i = SendDlgItemMessageW(hDlg, id, CB_FINDSTRINGEXACT, -1, (LPARAM)buf);
if(i == CB_ERR)
- FIXME("Can't find default printer in printer list\n");
+ TRACE("Can't find default printer in printer list\n");
}
SendDlgItemMessageW(hDlg, id, CB_SETCURSEL, i, 0);
return num;
@@ -378,14 +376,14 @@
nToPage = GetDlgItemInt(hDlg, edt2, NULL, FALSE);
if (nFromPage < lppd->nMinPage || nFromPage > lppd->nMaxPage ||
nToPage < lppd->nMinPage || nToPage > lppd->nMaxPage) {
- char resourcestr[256];
- char resultstr[256];
- LoadStringA(COMDLG32_hInstance, PD32_INVALID_PAGE_RANGE,
+ WCHAR resourcestr[256];
+ WCHAR resultstr[256];
+ LoadStringW(COMDLG32_hInstance, PD32_INVALID_PAGE_RANGE,
resourcestr, 255);
- sprintf(resultstr,resourcestr, lppd->nMinPage, lppd->nMaxPage);
- LoadStringA(COMDLG32_hInstance, PD32_PRINT_TITLE,
+ wsprintfW(resultstr,resourcestr, lppd->nMinPage, lppd->nMaxPage);
+ LoadStringW(COMDLG32_hInstance, PD32_PRINT_TITLE,
resourcestr, 255);
- MessageBoxA(hDlg, resultstr, resourcestr,
+ MessageBoxW(hDlg, resultstr, resourcestr,
MB_OK | MB_ICONWARNING);
return FALSE;
}
@@ -681,13 +679,13 @@
TRACE(" Printer: %s, Port: %s, ComboID: %d\n",debugstr_w(PrinterName),debugstr_w(PortName),nIDComboBox);
/* query the dialog box for the current selected value */
- Sel = SendDlgItemMessageA(hDlg, nIDComboBox, CB_GETCURSEL, 0, 0);
+ Sel = SendDlgItemMessageW(hDlg, nIDComboBox, CB_GETCURSEL, 0, 0);
if(Sel != CB_ERR) {
/* we enter here only if a different printer is selected after
* the Print Setup dialog is opened. The current settings are
* stored into the newly selected printer.
*/
- oldWord = SendDlgItemMessageA(hDlg, nIDComboBox, CB_GETITEMDATA,
+ oldWord = SendDlgItemMessageW(hDlg, nIDComboBox, CB_GETITEMDATA,
Sel, 0);
if (dm) {
if (nIDComboBox == cmb2)
@@ -745,7 +743,7 @@
fwCapability_Words, (LPWSTR)Words, dm);
/* reset any current content in the combobox */
- SendDlgItemMessageA(hDlg, nIDComboBox, CB_RESETCONTENT, 0, 0);
+ SendDlgItemMessageW(hDlg, nIDComboBox, CB_RESETCONTENT, 0, 0);
/* store new content */
for (i = 0; i < NrOfEntries; i++) {
@@ -759,13 +757,13 @@
item order will change as more items are added */
Sel = 0;
for (i = 0; i < NrOfEntries; i++) {
- if(SendDlgItemMessageA(hDlg, nIDComboBox, CB_GETITEMDATA, i, 0) ==
+ if(SendDlgItemMessageW(hDlg, nIDComboBox, CB_GETITEMDATA, i, 0) ==
oldWord) {
Sel = i;
break;
}
}
- SendDlgItemMessageA(hDlg, nIDComboBox, CB_SETCURSEL, Sel, 0);
+ SendDlgItemMessageW(hDlg, nIDComboBox, CB_SETCURSEL, Sel, 0);
HeapFree(GetProcessHeap(),0,Words);
HeapFree(GetProcessHeap(),0,Names);
@@ -1094,13 +1092,12 @@
}
/* "All xxx pages"... */
{
- /* ansi is ok */
- char resourcestr[64];
- char result[64];
- LoadStringA(COMDLG32_hInstance, PD32_PRINT_ALL_X_PAGES,
+ WCHAR resourcestr[64];
+ WCHAR result[64];
+ LoadStringW(COMDLG32_hInstance, PD32_PRINT_ALL_X_PAGES,
resourcestr, 49);
- sprintf(result,resourcestr,lppd->nMaxPage - lppd->nMinPage + 1);
- SendDlgItemMessageA(hDlg, rad1, WM_SETTEXT, 0, (LPARAM) result);
+ wsprintfW(result,resourcestr,lppd->nMaxPage - lppd->nMinPage + 1);
+ SendDlgItemMessageW(hDlg, rad1, WM_SETTEXT, 0, (LPARAM) result);
}
/* Collate pages
@@ -1108,11 +1105,11 @@
* FIXME: The ico3 is not displayed for some reason. I don't know why.
*/
if (lppd->Flags & PD_COLLATE) {
- SendDlgItemMessageA(hDlg, ico3, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
+ SendDlgItemMessageW(hDlg, ico3, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
(LPARAM)PrintStructures->hCollateIcon);
CheckDlgButton(hDlg, chx2, 1);
} else {
- SendDlgItemMessageA(hDlg, ico3, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
+ SendDlgItemMessageW(hDlg, ico3, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
(LPARAM)PrintStructures->hNoCollateIcon);
CheckDlgButton(hDlg, chx2, 0);
}
@@ -1164,7 +1161,7 @@
PrintStructures->lpPrinterInfo->pPortName,
lpdm);
CheckRadioButton(hDlg, rad1, rad2, bPortrait ? rad1: rad2);
- SendDlgItemMessageA(hDlg, ico1, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
+ SendDlgItemMessageW(hDlg, ico1, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
(LPARAM)(bPortrait ? PrintStructures->hPortraitIcon :
PrintStructures->hLandscapeIcon));
@@ -1292,6 +1289,10 @@
static LRESULT PRINTDLG_WMInitDialogW(HWND hDlg, WPARAM wParam,
PRINT_PTRW* PrintStructures)
{
+ const static WCHAR PD32_COLLATE[] = { 'P', 'D', '3', '2', '_', 'C', 'O', 'L', 'L', 'A', 'T', 'E', 0 };
+ const static WCHAR PD32_NOCOLLATE[] = { 'P', 'D', '3', '2', '_', 'N', 'O', 'C', 'O', 'L', 'L', 'A', 'T', 'E', 0 };
+ const static WCHAR PD32_PORTRAIT[] = { 'P', 'D', '3', '2', '_', 'P', 'O', 'R', 'T', 'R', 'A', 'I', 'T', 0 };
+ const static WCHAR PD32_LANDSCAPE[] = { 'P', 'D', '3', '2', '_', 'L', 'A', 'N', 'D', 'S', 'C', 'A', 'P', 'E', 0 };
LPPRINTDLGW lppd = PrintStructures->lpPrintDlg;
DEVNAMES *pdn;
DEVMODEW *pdm;
@@ -1302,18 +1303,18 @@
/* We load these with LoadImage because they are not a standard
size and we don't want them rescaled */
PrintStructures->hCollateIcon =
- LoadImageA(COMDLG32_hInstance, "PD32_COLLATE", IMAGE_ICON, 0, 0, 0);
+ LoadImageW(COMDLG32_hInstance, PD32_COLLATE, IMAGE_ICON, 0, 0, 0);
PrintStructures->hNoCollateIcon =
- LoadImageA(COMDLG32_hInstance, "PD32_NOCOLLATE", IMAGE_ICON, 0, 0, 0);
+ LoadImageW(COMDLG32_hInstance, PD32_NOCOLLATE, IMAGE_ICON, 0, 0, 0);
/* These can be done with LoadIcon */
PrintStructures->hPortraitIcon =
- LoadIconA(COMDLG32_hInstance, "PD32_PORTRAIT");
+ LoadIconW(COMDLG32_hInstance, PD32_PORTRAIT);
PrintStructures->hLandscapeIcon =
- LoadIconA(COMDLG32_hInstance, "PD32_LANDSCAPE");
+ LoadIconW(COMDLG32_hInstance, PD32_LANDSCAPE);
/* display the collate/no_collate icon */
- SendDlgItemMessageA(hDlg, ico3, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
+ SendDlgItemMessageW(hDlg, ico3, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
(LPARAM)PrintStructures->hNoCollateIcon);
if(PrintStructures->hCollateIcon == 0 ||
@@ -1331,7 +1332,7 @@
*/
if (lppd->Flags & PD_SHOWHELP) {
if((PrintStructures->HelpMessageID =
- RegisterWindowMessageA(HELPMSGSTRINGA)) == 0) {
+ RegisterWindowMessageW(HELPMSGSTRINGW)) == 0) {
COMDLG32_SetCommDlgExtendedError(CDERR_REGISTERMSGFAIL);
return FALSE;
}
@@ -1608,10 +1609,10 @@
case chx2: /* collate pages checkbox */
if (IsDlgButtonChecked(hDlg, chx2) == BST_CHECKED)
- SendDlgItemMessageA(hDlg, ico3, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
+ SendDlgItemMessageW(hDlg, ico3, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
(LPARAM)PrintStructures->hCollateIcon);
else
- SendDlgItemMessageA(hDlg, ico3, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
+ SendDlgItemMessageW(hDlg, ico3, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
(LPARAM)PrintStructures->hNoCollateIcon);
break;
case edt1: /* from page nr editbox */
@@ -1663,7 +1664,7 @@
if (lppd->Flags & PD_PRINTSETUP)
{
lpdm->u1.s1.dmOrientation = DMORIENT_PORTRAIT;
- SendDlgItemMessageA(hDlg, ico1, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
+ SendDlgItemMessageW(hDlg, ico1, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
(LPARAM)(PrintStructures->hPortraitIcon));
}
break;
@@ -1672,7 +1673,7 @@
if (lppd->Flags & PD_PRINTSETUP)
{
lpdm->u1.s1.dmOrientation = DMORIENT_LANDSCAPE;
- SendDlgItemMessageA(hDlg, ico1, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
+ SendDlgItemMessageW(hDlg, ico1, STM_SETIMAGE, (WPARAM) IMAGE_ICON,
(LPARAM)(PrintStructures->hLandscapeIcon));
}
break;
@@ -1693,9 +1694,9 @@
case cmb2: /* Papersize */
{
- DWORD Sel = SendDlgItemMessageA(hDlg, cmb2, CB_GETCURSEL, 0, 0);
+ DWORD Sel = SendDlgItemMessageW(hDlg, cmb2, CB_GETCURSEL, 0, 0);
if(Sel != CB_ERR)
- lpdm->u1.s1.dmPaperSize = SendDlgItemMessageA(hDlg, cmb2,
+ lpdm->u1.s1.dmPaperSize = SendDlgItemMessageW(hDlg, cmb2,
CB_GETITEMDATA,
Sel, 0);
}
@@ -1703,7 +1704,7 @@
case cmb3: /* Bin */
{
- DWORD Sel = SendDlgItemMessageA(hDlg, cmb3, CB_GETCURSEL, 0, 0);
+ DWORD Sel = SendDlgItemMessageW(hDlg, cmb3, CB_GETCURSEL, 0, 0);
if(Sel != CB_ERR)
lpdm->dmDefaultSource = SendDlgItemMessageW(hDlg, cmb3,
CB_GETITEMDATA, Sel,
@@ -1718,20 +1719,20 @@
if (IsDlgButtonChecked(hDlg, rad1) == BST_CHECKED) {
if(lpdm->u1.s1.dmOrientation != DMORIENT_PORTRAIT) {
lpdm->u1.s1.dmOrientation = DMORIENT_PORTRAIT;
- SendDlgItemMessageA(hDlg, stc10, STM_SETIMAGE,
+ SendDlgItemMessageW(hDlg, stc10, STM_SETIMAGE,
(WPARAM)IMAGE_ICON,
(LPARAM)PrintStructures->hPortraitIcon);
- SendDlgItemMessageA(hDlg, ico1, STM_SETIMAGE,
+ SendDlgItemMessageW(hDlg, ico1, STM_SETIMAGE,
(WPARAM)IMAGE_ICON,
(LPARAM)PrintStructures->hPortraitIcon);
}
} else {
if(lpdm->u1.s1.dmOrientation != DMORIENT_LANDSCAPE) {
lpdm->u1.s1.dmOrientation = DMORIENT_LANDSCAPE;
- SendDlgItemMessageA(hDlg, stc10, STM_SETIMAGE,
+ SendDlgItemMessageW(hDlg, stc10, STM_SETIMAGE,
(WPARAM)IMAGE_ICON,
(LPARAM)PrintStructures->hLandscapeIcon);
- SendDlgItemMessageA(hDlg, ico1, STM_SETIMAGE,
+ SendDlgItemMessageW(hDlg, ico1, STM_SETIMAGE,
(WPARAM)IMAGE_ICON,
(LPARAM)PrintStructures->hLandscapeIcon);
}
@@ -2382,23 +2383,26 @@
return;
}
static void
-_c_size2strW(PageSetupDataW *pda,DWORD size,LPSTR strout) {
- strcpy(strout,"<undef>");
+_c_size2strW(PageSetupDataW *pda,DWORD size,LPWSTR strout) {
+ const static WCHAR UNDEF[] = { '<', 'u', 'n', 'd', 'e', 'f', 0 };
+ const static WCHAR mm_fmt[] = { '%', '.', '2', 'f', 'm', 'm', 0 };
+ const static WCHAR in_fmt[] = { '%', '.', '2', 'f', 'i', 'n', 0 };
+ lstrcpyW(strout, UNDEF);
if (pda->dlga->Flags & PSD_INHUNDREDTHSOFMILLIMETERS) {
- sprintf(strout,"%.2fmm",(size*1.0)/100.0);
+ wsprintfW(strout,mm_fmt,(size*1.0)/100.0);
return;
}
if (pda->dlga->Flags & PSD_INTHOUSANDTHSOFINCHES) {
- sprintf(strout,"%.2fin",(size*1.0)/1000.0);
+ wsprintfW(strout,in_fmt,(size*1.0)/1000.0);
return;
}
pda->dlga->Flags |= PSD_INHUNDREDTHSOFMILLIMETERS;
- sprintf(strout,"%.2fmm",(size*1.0)/100.0);
+ wsprintfW(strout,mm_fmt,(size*1.0)/100.0);
return;
}
static DWORD
-_c_str2size(PAGESETUPDLGA *dlga,LPCSTR strin) {
+_c_str2sizeA(PAGESETUPDLGA *dlga,LPCSTR strin) {
float val;
char rest[200];
@@ -2437,6 +2441,17 @@
}
+static DWORD
+_c_str2sizeW(PAGESETUPDLGW *dlga, LPCWSTR strin) {
+ char buf[200];
+
+ /* this W -> A transition is OK */
+ /* we need a unicode version of sscanf to avoid it */
+ WideCharToMultiByte(CP_ACP, 0, strin, -1, buf, sizeof(buf), NULL, NULL);
+ return _c_str2sizeA((PAGESETUPDLGA *)dlga, buf);
+}
+
+
/*
* This is called on finish and will update the output fields of the
* struct.
@@ -2462,7 +2477,7 @@
pda->dlga->ptPaperSize.y = _c_10mm2size(pda->dlga,pda->dlga->ptPaperSize.y);
} else
FIXME("could not get dialog text for papersize cmbbox?\n");
-#define GETVAL(id,val) if (GetDlgItemTextA(hDlg,id,buf,sizeof(buf))>0) { val = _c_str2size(pda->dlga,buf); } else { FIXME("could not get dlgitemtexta for %x\n",id); }
+#define GETVAL(id,val) if (GetDlgItemTextA(hDlg,id,buf,sizeof(buf))>0) { val = _c_str2sizeA(pda->dlga,buf); } else { FIXME("could not get dlgitemtexta for %x\n",id); }
GETVAL(edt4,pda->dlga->rtMargin.left);
GETVAL(edt5,pda->dlga->rtMargin.top);
GETVAL(edt6,pda->dlga->rtMargin.right);
@@ -2487,8 +2502,7 @@
DEVMODEW *dm;
LPWSTR devname,portname;
WCHAR papername[64];
-
- char buf[200];
+ WCHAR buf[200];
dn = GlobalLock(pda->pdlg.hDevNames);
dm = GlobalLock(pda->pdlg.hDevMode);
@@ -2503,7 +2517,7 @@
pda->dlga->ptPaperSize.y = _c_10mm2size((LPPAGESETUPDLGA)pda->dlga,pda->dlga->ptPaperSize.y);
} else
FIXME("could not get dialog text for papersize cmbbox?\n");
-#define GETVAL(id,val) if (GetDlgItemTextA(hDlg,id,buf,sizeof(buf))>0) { val = _c_str2size((LPPAGESETUPDLGA)pda->dlga,buf); } else { FIXME("could not get dlgitemtexta for %x\n",id); }
+#define GETVAL(id,val) if (GetDlgItemTextW(hDlg,id,buf,sizeof(buf)/sizeof(buf[0]))>0) { val = _c_str2sizeW(pda->dlga,buf); } else { FIXME("could not get dlgitemtextw for %x\n",id); }
GETVAL(edt4,pda->dlga->rtMargin.left);
GETVAL(edt5,pda->dlga->rtMargin.top);
GETVAL(edt6,pda->dlga->rtMargin.right);
@@ -2703,13 +2717,16 @@
static INT_PTR CALLBACK
PageDlgProcW(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
+ const static WCHAR __WINE_PAGESETUPDLGDATA[] =
+ { '_', '_', 'W', 'I', 'N', 'E', '_', 'P', 'A', 'G', 'E',
+ 'S', 'E', 'T', 'U', 'P', 'D', 'L', 'G', 'D', 'A', 'T', 'A', 0 };
PageSetupDataW *pda;
BOOL res = FALSE;
if (uMsg==WM_INITDIALOG) {
res = TRUE;
pda = (PageSetupDataW*)lParam;
- SetPropA(hDlg,"__WINE_PAGESETUPDLGDATA",pda);
+ SetPropW(hDlg, __WINE_PAGESETUPDLGDATA, pda);
if (pda->dlga->Flags & PSD_ENABLEPAGESETUPHOOK) {
res = pda->dlga->lpfnPageSetupHook(hDlg,uMsg,wParam,(LPARAM)pda->dlga);
if (!res) {
@@ -2739,24 +2756,24 @@
}
/* We fill them out enabled or not */
if (pda->dlga->Flags & PSD_MARGINS) {
- char str[100];
+ WCHAR str[100];
_c_size2strW(pda,pda->dlga->rtMargin.left,str);
- SetDlgItemTextA(hDlg,edt4,str);
+ SetDlgItemTextW(hDlg,edt4,str);
_c_size2strW(pda,pda->dlga->rtMargin.top,str);
- SetDlgItemTextA(hDlg,edt5,str);
+ SetDlgItemTextW(hDlg,edt5,str);
_c_size2strW(pda,pda->dlga->rtMargin.right,str);
- SetDlgItemTextA(hDlg,edt6,str);
+ SetDlgItemTextW(hDlg,edt6,str);
_c_size2strW(pda,pda->dlga->rtMargin.bottom,str);
- SetDlgItemTextA(hDlg,edt7,str);
+ SetDlgItemTextW(hDlg,edt7,str);
} else {
/* default is 1 inch */
DWORD size = _c_inch2size((LPPAGESETUPDLGA)pda->dlga,1000);
- char str[20];
+ WCHAR str[20];
_c_size2strW(pda,size,str);
- SetDlgItemTextA(hDlg,edt4,str);
- SetDlgItemTextA(hDlg,edt5,str);
- SetDlgItemTextA(hDlg,edt6,str);
- SetDlgItemTextA(hDlg,edt7,str);
+ SetDlgItemTextW(hDlg,edt4,str);
+ SetDlgItemTextW(hDlg,edt5,str);
+ SetDlgItemTextW(hDlg,edt6,str);
+ SetDlgItemTextW(hDlg,edt7,str);
}
PRINTDLG_PS_ChangePrinterW(hDlg,pda);
if (pda->dlga->Flags & PSD_DISABLEPAPER) {
@@ -2765,7 +2782,7 @@
}
return TRUE;
} else {
- pda = (PageSetupDataW*)GetPropA(hDlg,"__WINE_PAGESETUPDLGDATA");
+ pda = (PageSetupDataW*)GetPropW(hDlg, __WINE_PAGESETUPDLGDATA);
if (!pda) {
WARN("__WINE_PAGESETUPDLGDATA prop not set?\n");
return FALSE;
More information about the wine-patches
mailing list