static UINT_PTR CALLBACK OfnHookProc(HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { static HWND hEncCombo; switch (uMsg) { case WM_INITDIALOG: { ENCODING enc; hEncCombo = GetDlgItem(hdlg, IDC_OFN_ENCCOMBO); for (enc = MIN_ENCODING; enc <= MAX_ENCODING; enc++) { WCHAR szEnc[MAX_STRING_LEN]; load_encoding_name(enc, szEnc, ARRAY_SIZE(szEnc)); SendMessageW(hEncCombo, CB_ADDSTRING, 0, (LPARAM)szEnc); } SendMessageW(hEncCombo, CB_SETCURSEL, (WPARAM)Globals.encOfnCombo, 0); } break; case WM_COMMAND: if (LOWORD(wParam) == IDC_OFN_ENCCOMBO && HIWORD(wParam) == CBN_SELCHANGE) { int index = SendMessageW(hEncCombo, CB_GETCURSEL, 0, 0); Globals.encOfnCombo = index==CB_ERR ? ENCODING_ANSI : (ENCODING)index; } break; case WM_NOTIFY: switch (((OFNOTIFYW*)lParam)->hdr.code) { case CDN_SELCHANGE: if (Globals.bOfnIsOpenDialog) { /* Check the start of the selected file for a BOM. */ ENCODING enc; WCHAR szFileName[MAX_PATH]; SendMessageW(GetParent(hdlg), CDM_GETFILEPATH, ARRAY_SIZE(szFileName), (LPARAM)szFileName); enc = detect_encoding_of_file(szFileName); if (enc != ENCODING_AUTO) { Globals.encOfnCombo = enc; SendMessageW(hEncCombo, CB_SETCURSEL, (WPARAM)enc, 0); } } break; default: break; } break; default: break; } return 0; }
static int AlertUnicodeCharactersLost(LPCWSTR szFileName) { WCHAR szMsgFormat[MAX_STRING_LEN]; WCHAR szEnc[MAX_STRING_LEN]; WCHAR szMsg[ARRAY_SIZE(szMsgFormat) + MAX_PATH + ARRAY_SIZE(szEnc)]; WCHAR szCaption[MAX_STRING_LEN]; LoadStringW(Globals.hInstance, STRING_LOSS_OF_UNICODE_CHARACTERS, szMsgFormat, ARRAY_SIZE(szMsgFormat)); load_encoding_name(ENCODING_ANSI, szEnc, ARRAY_SIZE(szEnc)); wnsprintfW(szMsg, ARRAY_SIZE(szMsg), szMsgFormat, szFileName, szEnc); LoadStringW(Globals.hInstance, STRING_NOTEPAD, szCaption, ARRAY_SIZE(szCaption)); return MessageBoxW(Globals.hMainWnd, szMsg, szCaption, MB_OKCANCEL|MB_ICONEXCLAMATION); }
static int AlertUnicodeCharactersLost(LPCWSTR szFileName) { WCHAR szCaption[MAX_STRING_LEN]; WCHAR szMsgFormat[MAX_STRING_LEN]; WCHAR szEnc[MAX_STRING_LEN]; WCHAR* szMsg; DWORD_PTR args[2]; int rc; LoadStringW(Globals.hInstance, STRING_NOTEPAD, szCaption, ARRAY_SIZE(szCaption)); LoadStringW(Globals.hInstance, STRING_LOSS_OF_UNICODE_CHARACTERS, szMsgFormat, ARRAY_SIZE(szMsgFormat)); load_encoding_name(ENCODING_ANSI, szEnc, ARRAY_SIZE(szEnc)); args[0] = (DWORD_PTR)szFileName; args[1] = (DWORD_PTR)szEnc; FormatMessageW(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_ARGUMENT_ARRAY, szMsgFormat, 0, 0, (LPWSTR)&szMsg, 0, (__ms_va_list*)args); rc = MessageBoxW(Globals.hMainWnd, szMsg, szCaption, MB_OKCANCEL|MB_ICONEXCLAMATION); LocalFree(szMsg); return rc; }