__private_extern__ CFStringEncoding *__CFStringEncodingCreateListOfAvailablePlatformConverters(CFAllocatorRef allocator, CFIndex *numberOfConverters) { CFStringEncoding *encodings; EnumSystemCodePages((CODEPAGE_ENUMPROC)&__CFWin32EnumCodePageProc, CP_INSTALLED); __CFWin32EncodingList = (uint32_t *)CFAllocatorAllocate(allocator, sizeof(uint32_t) * __CFWin32EncodingIndex, 0); EnumSystemCodePages((CODEPAGE_ENUMPROC)&__CFWin32EnumCodePageProc, CP_INSTALLED); *numberOfConverters = __CFWin32EncodingIndex; encodings = __CFWin32EncodingList; __CFWin32EncodingIndex = 0; __CFWin32EncodingList = NULL; return encodings; }
/* * Check if given codepage is available */ static BOOL IDNA_CheckCodePage (UINT cp) { cp_requested = cp; cp_found = FALSE; EnumSystemCodePages (print_cp_info, CP_INSTALLED); return (cp_found); }
bool IsCodePageSupported(uintptr_t CodePage) { // Для стандартных кодовых страниц ничего проверять не надо // BUGBUG: мы не везде поддержиаем все стандартные кодовые страницы. Это не проверяется if (CodePage == CP_DEFAULT || IsStandardCodePage(CodePage)) return true; // Проходим по всем кодовым страницам системы и проверяем поддерживаем мы или нет её CallbackCallSource = CodePageCheck; currentCodePage = CodePage; CodePageSupported = false; EnumSystemCodePages((CODEPAGE_ENUMPROCW)EnumCodePagesProc, CP_INSTALLED); return CodePageSupported; }
// Добавляем все необходимые таблицы символов void AddCodePages(DWORD codePages) { // Добавляем стандартные таблицы символов uintptr_t cp_auto = CP_DEFAULT; if ( 0 != (codePages & ::DefaultCP) ) { AddStandardCodePage(MSG(MDefaultCP), CP_DEFAULT, -1, true); cp_auto = CP_REDETECT; } AddStandardCodePage((codePages & ::SearchAll) ? MSG(MFindFileAllCodePages) : MSG(MEditOpenAutoDetect), cp_auto, -1, (codePages & (::SearchAll | ::Auto)) != 0); AddSeparator(MSG(MGetCodePageSystem)); AddStandardCodePage(L"OEM", GetOEMCP(), -1, (codePages & ::OEM) != 0); AddStandardCodePage(L"ANSI", GetACP(), -1, (codePages & ::ANSI) != 0); AddSeparator(MSG(MGetCodePageUnicode)); if (codePages & ::UTF7) AddStandardCodePage(L"UTF-7", CP_UTF7, -1, true); //?? не поддерживается, да и нужно ли? AddStandardCodePage(L"UTF-8", CP_UTF8, -1, (codePages & ::UTF8) != 0); AddStandardCodePage(L"UTF-16 (Little endian)", CP_UNICODE, -1, (codePages & ::UTF16LE) != 0); AddStandardCodePage(L"UTF-16 (Big endian)", CP_REVERSEBOM, -1, (codePages & ::UTF16BE) != 0); // Получаем таблицы символов установленные в системе allow_m2 = (codePages & ::AllowM2) != 0; EnumSystemCodePages((CODEPAGE_ENUMPROCW)EnumCodePagesProc, CP_INSTALLED); }
extern "C" int __declspec(dllexport) Load(void) { mir_getLP(&pluginInfo); YAMN_STATUS = ID_STATUS_OFFLINE; // we get the Miranda Root Path PathToAbsoluteT( _T("."), szMirandaDir); // retrieve the current profile name CallService(MS_DB_GETPROFILENAMET, (WPARAM)_countof(ProfileName), (LPARAM)ProfileName); //not to pass entire array to fcn TCHAR *fc = _tcsrchr(ProfileName, '.'); if ( fc != NULL ) *fc = 0; // we get the user path where our yamn-account.book.ini is stored from mirandaboot.ini file GetProfileDirectory(UserDirectory, _countof(UserDirectory)); // Enumerate all the code pages available for the System Locale EnumSystemCodePages(EnumSystemCodePagesProc, CP_INSTALLED); CodePageNamesSupp = new _tcptable[CPLENSUPP]; for (int i = 0, k = 0; i < CPLENALL; i++) { if (CodePageNamesAll[i].isValid) { CodePageNamesSupp[k] = CodePageNamesAll[i]; k++; } } // Registering YAMN as protocol PROTOCOLDESCRIPTOR pd = { PROTOCOLDESCRIPTOR_V3_SIZE }; pd.szName = YAMN_DBMODULE; pd.type = PROTOTYPE_VIRTUAL; Proto_RegisterModule(&pd); InitializeCriticalSection(&AccountStatusCS); InitializeCriticalSection(&FileWritingCS); InitializeCriticalSection(&PluginRegCS); if (NULL == (NoWriterEV = CreateEvent(NULL, TRUE, TRUE, NULL))) return 1; if (NULL == (WriteToFileEV = CreateEvent(NULL, FALSE, FALSE, NULL))) return 1; if (NULL == (ExitEV = CreateEvent(NULL, TRUE, FALSE, NULL))) return 1; PosX = db_get_dw(NULL, YAMN_DBMODULE, YAMN_DBPOSX, 0); PosY = db_get_dw(NULL, YAMN_DBMODULE, YAMN_DBPOSY, 0); SizeX = db_get_dw(NULL, YAMN_DBMODULE, YAMN_DBSIZEX, 800); SizeY = db_get_dw(NULL, YAMN_DBMODULE, YAMN_DBSIZEY, 200); HeadPosX = db_get_dw(NULL, YAMN_DBMODULE, YAMN_DBMSGPOSX, 0); HeadPosY = db_get_dw(NULL, YAMN_DBMODULE, YAMN_DBMSGPOSY, 0); HeadSizeX = db_get_dw(NULL, YAMN_DBMODULE, YAMN_DBMSGSIZEX, 690); HeadSizeY = db_get_dw(NULL, YAMN_DBMODULE, YAMN_DBMSGSIZEY, 300); HeadSplitPos = db_get_w(NULL, YAMN_DBMODULE, YAMN_DBMSGPOSSPLIT, 250); optDateTime = db_get_b(NULL, YAMN_DBMODULE, YAMN_DBTIMEOPTIONS, optDateTime); // Create new window queues for broadcast messages YAMNVar.MessageWnds = WindowList_Create(); YAMNVar.NewMailAccountWnd = WindowList_Create(); YAMNVar.Shutdown = FALSE; hCurSplitNS = LoadCursor(NULL, IDC_SIZENS); hCurSplitWE = LoadCursor(NULL, IDC_SIZEWE); #ifdef _DEBUG InitDebug(); #endif CreateServiceFunctions(); SkinAddNewSoundEx(YAMN_NEWMAILSOUND, YAMN_DBMODULE, YAMN_NEWMAILSNDDESC); SkinAddNewSoundEx(YAMN_CONNECTFAILSOUND, YAMN_DBMODULE, YAMN_CONNECTFAILSNDDESC); HookEvents(); LoadIcons(); LoadPlugins(); HOTKEYDESC hkd = {0}; hkd.cbSize = sizeof(hkd); hkd.pszName = "YAMN_hotkey"; hkd.pszService = MS_YAMN_FORCECHECK; hkd.pszSection = YAMN_DBMODULE; hkd.pszDescription = LPGEN("Check mail"); hkd.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL, VK_F11); Hotkey_Register(&hkd); //Create thread that will be executed every second if (!(SecTimer = SetTimer(NULL, 0, 1000, TimerProc))) return 1; return 0; }
static INT_PTR CALLBACK DlgProcUserPrefs(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { HANDLE hContact = (HANDLE)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: { DWORD sCodePage; int i; DWORD maxhist = M->GetDword((HANDLE)lParam, "maxhist", 0); BYTE bIEView = M->GetByte((HANDLE)lParam, "ieview", 0); BYTE bHPP = M->GetByte((HANDLE)lParam, "hpplog", 0); int iLocalFormat = M->GetDword((HANDLE)lParam, "sendformat", 0); BYTE bRTL = M->GetByte((HANDLE)lParam, "RTL", 0); BYTE bLTR = M->GetByte((HANDLE)lParam, "RTL", 1); BYTE bSplit = M->GetByte((HANDLE)lParam, "splitoverride", 0); BYTE bInfoPanel = M->GetByte((HANDLE)lParam, "infopanel", 0); BYTE bAvatarVisible = M->GetByte((HANDLE)lParam, "hideavatar", -1); char *szProto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)lParam, 0); int def_log_index = 1, hpp_log_index = 1, ieview_log_index = 1; have_ieview = ServiceExists(MS_IEVIEW_WINDOW); have_hpp = ServiceExists("History++/ExtGrid/NewWindow"); hContact = (HANDLE)lParam; TranslateDialogDefault(hwndDlg); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)lParam); SendDlgItemMessage(hwndDlg, IDC_INFOPANEL, CB_INSERTSTRING, -1, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_IPGLOBAL)); SendDlgItemMessage(hwndDlg, IDC_INFOPANEL, CB_INSERTSTRING, -1, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_IPON)); SendDlgItemMessage(hwndDlg, IDC_INFOPANEL, CB_INSERTSTRING, -1, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_IPOFF)); SendDlgItemMessage(hwndDlg, IDC_INFOPANEL, CB_SETCURSEL, bInfoPanel == 0 ? 0 : (bInfoPanel == 1 ? 1 : 2), 0); SendDlgItemMessage(hwndDlg, IDC_SHOWAVATAR, CB_INSERTSTRING, -1, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_IPGLOBAL)); SendDlgItemMessage(hwndDlg, IDC_SHOWAVATAR, CB_INSERTSTRING, -1, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_AVON)); SendDlgItemMessage(hwndDlg, IDC_SHOWAVATAR, CB_INSERTSTRING, -1, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_AVOFF)); SendDlgItemMessage(hwndDlg, IDC_SHOWAVATAR, CB_SETCURSEL, bAvatarVisible == 0xff ? 0 : (bAvatarVisible == 1 ? 1 : 2), 0); SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_INSERTSTRING, -1, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_IPGLOBAL)); SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_INSERTSTRING, -1, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_FORCEDEFAULT)); SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_SETITEMDATA, 0, 0); SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_SETITEMDATA, 1, 1); if(have_hpp) { SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_INSERTSTRING, -1, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_FORCEHPP)); SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_SETITEMDATA, 2, 2); } if(have_ieview) { SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_INSERTSTRING, -1, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_FORCEIEV)); SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_SETITEMDATA, have_hpp ? 3 : 2, 3); } if (bIEView == 0 && bHPP == 0) SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_SETCURSEL, 0, 0); else if (bIEView == 0xff && bHPP == 0xff) SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_SETCURSEL, 1, 0); else { if(bHPP == 1) SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_SETCURSEL, have_hpp ? 2 : 0, 0); if(bIEView == 1) SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_SETCURSEL, (have_hpp && have_ieview) ? 3 : (have_ieview ? 2 : 0), 0); } SendDlgItemMessage(hwndDlg, IDC_TEXTFORMATTING, CB_INSERTSTRING, -1, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_IPGLOBAL)); SendDlgItemMessage(hwndDlg, IDC_TEXTFORMATTING, CB_INSERTSTRING, -1, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_BBCODE)); SendDlgItemMessage(hwndDlg, IDC_TEXTFORMATTING, CB_INSERTSTRING, -1, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_FORMATTING_OFF)); SendDlgItemMessage(hwndDlg, IDC_TEXTFORMATTING, CB_SETCURSEL, iLocalFormat == 0 ? 0 : (iLocalFormat == -1 ? 2 : (1)), 0); if (CheckMenuItem(PluginConfig.g_hMenuFavorites, (UINT_PTR)lParam, MF_BYCOMMAND | MF_UNCHECKED) == -1) CheckDlgButton(hwndDlg, IDC_ISFAVORITE, FALSE); else CheckDlgButton(hwndDlg, IDC_ISFAVORITE, TRUE); CheckDlgButton(hwndDlg, IDC_PRIVATESPLITTER, bSplit); CheckDlgButton(hwndDlg, IDC_TEMPLOVERRIDE, M->GetByte(hContact, TEMPLATES_MODULE, "enabled", 0)); CheckDlgButton(hwndDlg, IDC_RTLTEMPLOVERRIDE, M->GetByte(hContact, RTLTEMPLATES_MODULE, "enabled", 0)); //MAD CheckDlgButton(hwndDlg, IDC_LOADONLYACTUAL, M->GetByte(hContact, "ActualHistory", 0)); // SendDlgItemMessage(hwndDlg, IDC_TRIMSPIN, UDM_SETRANGE, 0, MAKELONG(1000, 5)); SendDlgItemMessage(hwndDlg, IDC_TRIMSPIN, UDM_SETPOS, 0, maxhist); Utils::enableDlgControl(hwndDlg, IDC_TRIMSPIN, maxhist != 0); Utils::enableDlgControl(hwndDlg, IDC_TRIM, maxhist != 0); CheckDlgButton(hwndDlg, IDC_ALWAYSTRIM2, maxhist != 0); hCpCombo = GetDlgItem(hwndDlg, IDC_CODEPAGES); sCodePage = M->GetDword(hContact, "ANSIcodepage", 0); EnumSystemCodePages((CODEPAGE_ENUMPROC)FillCpCombo, CP_INSTALLED); SendDlgItemMessage(hwndDlg, IDC_CODEPAGES, CB_INSERTSTRING, 0, (LPARAM)CTranslator::getOpt(CTranslator::OPT_UPREFS_DEFAULTCP)); if (sCodePage == 0) SendDlgItemMessage(hwndDlg, IDC_CODEPAGES, CB_SETCURSEL, (WPARAM)0, 0); else { for (i = 0; i < SendDlgItemMessage(hwndDlg, IDC_CODEPAGES, CB_GETCOUNT, 0, 0); i++) { if (SendDlgItemMessage(hwndDlg, IDC_CODEPAGES, CB_GETITEMDATA, (WPARAM)i, 0) == (LRESULT)sCodePage) SendDlgItemMessage(hwndDlg, IDC_CODEPAGES, CB_SETCURSEL, (WPARAM)i, 0); } } CheckDlgButton(hwndDlg, IDC_FORCEANSI, M->GetByte(hContact, "forceansi", 0) ? 1 : 0); CheckDlgButton(hwndDlg, IDC_IGNORETIMEOUTS, M->GetByte(hContact, "no_ack", 0)); ShowWindow(hwndDlg, SW_SHOW); return TRUE; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_ALWAYSTRIM2: Utils::enableDlgControl(hwndDlg, IDC_TRIMSPIN, IsDlgButtonChecked(hwndDlg, IDC_ALWAYSTRIM2)); Utils::enableDlgControl(hwndDlg, IDC_TRIM, IsDlgButtonChecked(hwndDlg, IDC_ALWAYSTRIM2)); break; case WM_USER + 100: { struct TWindowData *dat = 0; DWORD *pdwActionToTake = (DWORD *)lParam; int iIndex = CB_ERR, iMode = -1; DWORD newCodePage; unsigned int iOldIEView; HWND hWnd = M->FindWindow(hContact); DWORD sCodePage = M->GetDword(hContact, "ANSIcodepage", 0); BYTE bInfoPanel, bOldInfoPanel = M->GetByte(hContact, "infopanel", 0); BYTE bAvatarVisible = 0; if (hWnd) { dat = (struct TWindowData *)GetWindowLongPtr(hWnd, GWLP_USERDATA); if (dat) iOldIEView = GetIEViewMode(hWnd, dat->hContact); } iIndex = SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_GETCURSEL, 0, 0); iMode = SendDlgItemMessage(hwndDlg, IDC_IEVIEWMODE, CB_GETITEMDATA, iIndex, 0); if (iIndex != CB_ERR && (iMode >= 0 && iMode <= 3)) { unsigned int iNewIEView; switch (iMode) { case 0: M->WriteByte(hContact, SRMSGMOD_T, "ieview", 0); M->WriteByte(hContact, SRMSGMOD_T, "hpplog", 0); break; case 1: M->WriteByte(hContact, SRMSGMOD_T, "ieview", -1); M->WriteByte(hContact, SRMSGMOD_T, "hpplog", -1); break; case 2: M->WriteByte(hContact, SRMSGMOD_T, "ieview", -1); M->WriteByte(hContact, SRMSGMOD_T, "hpplog", 1); break; case 3: M->WriteByte(hContact, SRMSGMOD_T, "ieview", 1); M->WriteByte(hContact, SRMSGMOD_T, "hpplog", -1); break; default: break; } if (hWnd && dat) { iNewIEView = GetIEViewMode(hWnd, dat->hContact); if (iNewIEView != iOldIEView) { if(pdwActionToTake) *pdwActionToTake |= UPREF_ACTION_SWITCHLOGVIEWER; } } } if ((iIndex = SendDlgItemMessage(hwndDlg, IDC_TEXTFORMATTING, CB_GETCURSEL, 0, 0)) != CB_ERR) { if (iIndex == 0) DBDeleteContactSetting(hContact, SRMSGMOD_T, "sendformat"); else M->WriteDword(hContact, SRMSGMOD_T, "sendformat", iIndex == 2 ? -1 : 1); } iIndex = SendDlgItemMessage(hwndDlg, IDC_CODEPAGES, CB_GETCURSEL, 0, 0); if ((newCodePage = (DWORD)SendDlgItemMessage(hwndDlg, IDC_CODEPAGES, CB_GETITEMDATA, (WPARAM)iIndex, 0)) != sCodePage) { M->WriteDword(hContact, SRMSGMOD_T, "ANSIcodepage", (DWORD)newCodePage); if (hWnd && dat) { dat->codePage = newCodePage; SendMessage(hWnd, DM_UPDATETITLE, 0, 1); } } if ((IsDlgButtonChecked(hwndDlg, IDC_FORCEANSI) ? 1 : 0) != M->GetByte(hContact, "forceansi", 0)) { M->WriteByte(hContact, SRMSGMOD_T, "forceansi", (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_FORCEANSI) ? 1 : 0)); if (hWnd && dat) dat->sendMode = IsDlgButtonChecked(hwndDlg, IDC_FORCEANSI) ? dat->sendMode | SMODE_FORCEANSI : dat->sendMode & ~SMODE_FORCEANSI; } if (IsDlgButtonChecked(hwndDlg, IDC_ISFAVORITE)) { if (!M->GetByte(hContact, SRMSGMOD_T, "isFavorite", 0)) AddContactToFavorites(hContact, NULL, NULL, NULL, 0, 0, 1, PluginConfig.g_hMenuFavorites); } else DeleteMenu(PluginConfig.g_hMenuFavorites, (UINT_PTR)hContact, MF_BYCOMMAND); M->WriteByte(hContact, SRMSGMOD_T, "isFavorite", (WORD)(IsDlgButtonChecked(hwndDlg, IDC_ISFAVORITE) ? 1 : 0)); M->WriteByte(hContact, SRMSGMOD_T, "splitoverride", (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_PRIVATESPLITTER) ? 1 : 0)); M->WriteByte(hContact, TEMPLATES_MODULE, "enabled", (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_TEMPLOVERRIDE))); M->WriteByte(hContact, RTLTEMPLATES_MODULE, "enabled", (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_RTLTEMPLOVERRIDE))); bAvatarVisible = (BYTE)SendDlgItemMessage(hwndDlg, IDC_SHOWAVATAR, CB_GETCURSEL, 0, 0); if(bAvatarVisible == 0) DBDeleteContactSetting(hContact, SRMSGMOD_T, "hideavatar"); else M->WriteByte(hContact, SRMSGMOD_T, "hideavatar", (BYTE)(bAvatarVisible == 1 ? 1 : 0)); bInfoPanel = (BYTE)SendDlgItemMessage(hwndDlg, IDC_INFOPANEL, CB_GETCURSEL, 0, 0); if (bInfoPanel != bOldInfoPanel) { M->WriteByte(hContact, SRMSGMOD_T, "infopanel", (BYTE)(bInfoPanel == 0 ? 0 : (bInfoPanel == 1 ? 1 : -1))); if (hWnd && dat) SendMessage(hWnd, DM_SETINFOPANEL, 0, 0); } if (IsDlgButtonChecked(hwndDlg, IDC_ALWAYSTRIM2)) M->WriteDword(hContact, SRMSGMOD_T, "maxhist", (DWORD)SendDlgItemMessage(hwndDlg, IDC_TRIMSPIN, UDM_GETPOS, 0, 0)); else M->WriteDword(hContact, SRMSGMOD_T, "maxhist", 0); //MAD if (IsDlgButtonChecked(hwndDlg, IDC_LOADONLYACTUAL)){ M->WriteByte(hContact, SRMSGMOD_T, "ActualHistory", 1); if (hWnd && dat) dat->bActualHistory=TRUE; }else{ M->WriteByte(hContact, SRMSGMOD_T, "ActualHistory", 0); if (hWnd && dat) dat->bActualHistory=FALSE; } // if (IsDlgButtonChecked(hwndDlg, IDC_IGNORETIMEOUTS)) { M->WriteByte(hContact, SRMSGMOD_T, "no_ack", 1); if (hWnd && dat) dat->sendMode |= SMODE_NOACK; } else { DBDeleteContactSetting(hContact, SRMSGMOD_T, "no_ack"); if (hWnd && dat) dat->sendMode &= ~SMODE_NOACK; } if (hWnd && dat) { SendMessage(hWnd, DM_CONFIGURETOOLBAR, 0, 1); dat->panelWidth = -1; ShowPicture(dat, FALSE); SendMessage(hWnd, WM_SIZE, 0, 0); DM_ScrollToBottom(dat, 0, 1); } DestroyWindow(hwndDlg); break; } default: break; } break; } return FALSE; }
static VOID InitCodePagesList(HWND hwndDlg) { LPCPAGE lpCPage; INT ItemIndex; HWND hList; LV_COLUMN column; LV_ITEM item; RECT ListRect; hList = GetDlgItem(hwndDlg, IDC_CONV_TABLES); hIntlInf = SetupOpenInfFileW(L"intl.inf", NULL, INF_STYLE_WIN4, NULL); if (hIntlInf == INVALID_HANDLE_VALUE) return; if (!SetupOpenAppendInfFile(NULL, hIntlInf, NULL)) { SetupCloseInfFile(hIntlInf); hIntlInf = NULL; return; } if (!GetSupportedCP()) return; SetupCloseInfFile(hIntlInf); if (!EnumSystemCodePages(InstalledCPProc, CP_INSTALLED)) return; ZeroMemory(&column, sizeof(LV_COLUMN)); column.mask = LVCF_FMT|LVCF_TEXT|LVCF_WIDTH; column.fmt = LVCFMT_LEFT; GetClientRect(hList, &ListRect); column.cx = ListRect.right - GetSystemMetrics(SM_CYHSCROLL); (VOID) ListView_InsertColumn(hList, 0, &column); (VOID) ListView_SetExtendedListViewStyle(hList, LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT); lpCPage = PCPage; for (;;) { if (!lpCPage) break; ZeroMemory(&item, sizeof(LV_ITEM)); item.mask = LVIF_TEXT|LVIF_PARAM|LVIF_STATE; item.state = 0; item.stateMask = LVIS_STATEIMAGEMASK; item.pszText = lpCPage->Name; item.lParam = (LPARAM)lpCPage; ItemIndex = ListView_InsertItem(hList, &item); if (ItemIndex >= 0) { if (lpCPage->Status & 0x0001) { ListView_SetItemState(hList, ItemIndex, INDEXTOSTATEIMAGEMASK(LVIS_SELECTED), LVIS_STATEIMAGEMASK); } else { ListView_SetItemState(hList, ItemIndex, INDEXTOSTATEIMAGEMASK(LVIS_FOCUSED), LVIS_STATEIMAGEMASK); } } lpCPage = lpCPage->NextItem; } }
installed_codepages::installed_codepages() { system_codepages_enumerator::context = this; EnumSystemCodePages(system_codepages_enumerator::enum_cp, CP_INSTALLED); system_codepages_enumerator::context = nullptr; }