comdlg32: Do not use GetDlgItemText to get combo box text during an CBN_SELCHANGE notification.

This commit is contained in:
Aric Stewart 2012-07-03 10:21:47 -05:00 committed by Alexandre Julliard
parent eec0adac14
commit aefd9b5533
1 changed files with 19 additions and 6 deletions

View File

@ -1783,9 +1783,13 @@ static LRESULT PRINTDLG_WMCommandA(HWND hDlg, WPARAM wParam,
/* FALLTHROUGH */ /* FALLTHROUGH */
case cmb4: /* Printer combobox */ case cmb4: /* Printer combobox */
if (HIWORD(wParam)==CBN_SELCHANGE) { if (HIWORD(wParam)==CBN_SELCHANGE) {
char PrinterName[256]; char *PrinterName;
GetDlgItemTextA(hDlg, LOWORD(wParam), PrinterName, 255); INT index = SendDlgItemMessageW(hDlg, LOWORD(wParam), CB_GETCURSEL, 0, 0);
INT length = SendDlgItemMessageW(hDlg, LOWORD(wParam), CB_GETLBTEXTLEN, index, 0);
PrinterName = HeapAlloc(GetProcessHeap(),0,length+1);
SendDlgItemMessageA(hDlg, LOWORD(wParam), CB_GETLBTEXT, index, (LPARAM)PrinterName);
PRINTDLG_ChangePrinterA(hDlg, PrinterName, PrintStructures); PRINTDLG_ChangePrinterA(hDlg, PrinterName, PrintStructures);
HeapFree(GetProcessHeap(),0,PrinterName);
} }
break; break;
@ -1934,9 +1938,14 @@ static LRESULT PRINTDLG_WMCommandW(HWND hDlg, WPARAM wParam,
/* FALLTHROUGH */ /* FALLTHROUGH */
case cmb4: /* Printer combobox */ case cmb4: /* Printer combobox */
if (HIWORD(wParam)==CBN_SELCHANGE) { if (HIWORD(wParam)==CBN_SELCHANGE) {
WCHAR PrinterName[256]; WCHAR *PrinterName;
GetDlgItemTextW(hDlg, LOWORD(wParam), PrinterName, 255); INT index = SendDlgItemMessageW(hDlg, LOWORD(wParam), CB_GETCURSEL, 0, 0);
INT length = SendDlgItemMessageW(hDlg, LOWORD(wParam), CB_GETLBTEXTLEN, index, 0);
PrinterName = HeapAlloc(GetProcessHeap(),0,sizeof(WCHAR)*(length+1));
SendDlgItemMessageW(hDlg, LOWORD(wParam), CB_GETLBTEXT, index, (LPARAM)PrinterName);
PRINTDLG_ChangePrinterW(hDlg, PrinterName, PrintStructures); PRINTDLG_ChangePrinterW(hDlg, PrinterName, PrintStructures);
HeapFree(GetProcessHeap(),0,PrinterName);
} }
break; break;
@ -3378,10 +3387,14 @@ static BOOL pagesetup_wm_command(HWND hDlg, WPARAM wParam, LPARAM lParam, pagese
case cmb1: /* Printer combo */ case cmb1: /* Printer combo */
if(msg == CBN_SELCHANGE) if(msg == CBN_SELCHANGE)
{ {
WCHAR name[256]; WCHAR *name;
GetDlgItemTextW(hDlg, id, name, sizeof(name) / sizeof(name[0])); INT index = SendDlgItemMessageW(hDlg, id, CB_GETCURSEL, 0, 0);
INT length = SendDlgItemMessageW(hDlg, id, CB_GETLBTEXTLEN, index, 0);
name = HeapAlloc(GetProcessHeap(),0,sizeof(WCHAR)*(length+1));
SendDlgItemMessageW(hDlg, id, CB_GETLBTEXT, index, (LPARAM)name);
pagesetup_change_printer(name, data); pagesetup_change_printer(name, data);
pagesetup_init_combos(hDlg, data); pagesetup_init_combos(hDlg, data);
HeapFree(GetProcessHeap(),0,name);
} }
break; break;
case cmb2: /* Paper combo */ case cmb2: /* Paper combo */