- Change ListBox to ListView

- Added list of code pages

svn path=/trunk/; revision=32464
This commit is contained in:
Dmitry Chapyshev 2008-02-24 10:56:35 +00:00
parent fae9aa5c48
commit f87aaee1e6
10 changed files with 176 additions and 10 deletions

View file

@ -1,10 +1,173 @@
#include <windows.h>
#include <commctrl.h>
#include <setupapi.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <cpl.h>
#include "intl.h"
#include "resource.h"
typedef struct CPStruct
{
WORD Status;
UINT CPage;
HANDLE hCPage;
TCHAR Name[MAX_PATH];
struct CPStruct *NextItem;
} CPAGE, *LPCPAGE;
static LPCPAGE PCPage = NULL;
static HINF hIntlInf;
static BOOL
GetSupportedCP(VOID)
{
UINT uiCPage, Count, Number;
INFCONTEXT infCont;
LPCPAGE lpCPage;
HANDLE hCPage;
Count = (UINT) SetupGetLineCount(hIntlInf, _T("CodePages"));
if (Count <= 0) return FALSE;
for (Number = 0; Number < Count; Number++)
{
if (SetupGetLineByIndex(hIntlInf, _T("CodePages"), Number, &infCont) &&
SetupGetIntField(&infCont, 0, (PINT)&uiCPage))
{
if (!(hCPage = GlobalAlloc(GHND, sizeof(CPAGE)))) return FALSE;
lpCPage = GlobalLock(hCPage);
lpCPage->CPage = uiCPage;
lpCPage->hCPage = hCPage;
lpCPage->Status = 0;
(lpCPage->Name)[0] = 0;
CPINFOEX cpInfEx;
if (GetCPInfoEx(uiCPage, 0, &cpInfEx))
{
_tcscpy(lpCPage->Name, cpInfEx.CodePageName);
}
else if (!SetupGetStringField(&infCont, 1, lpCPage->Name, MAX_PATH, NULL))
{
GlobalUnlock(hCPage);
GlobalFree(hCPage);
continue;
}
TCHAR Section[MAX_PATH];
_stprintf(Section, TEXT("%s%d"), _T("CODEPAGE_REMOVE_"), uiCPage);
if ((uiCPage == GetACP()) || (uiCPage == GetOEMCP()) ||
(!SetupFindFirstLine(hIntlInf, Section, _T("AddReg"), &infCont)))
{
lpCPage->Status |= (0x0001 | 0x0002);
}
lpCPage->NextItem = PCPage;
PCPage = lpCPage;
}
}
return TRUE;
}
static BOOL CALLBACK
InstalledCPProc(LPTSTR lpStr)
{
LPCPAGE lpCP;
UINT uiCP;
lpCP = PCPage;
uiCP = _ttol(lpStr);
for (;;)
{
if (!lpCP) break;
if (lpCP->CPage == uiCP)
{
lpCP->Status |= 0x0001;
break;
}
lpCP = lpCP->NextItem;
}
return TRUE;
}
static VOID
InitLangList(HWND hwndDlg)
{
LPCPAGE lpCPage;
INT ItemIndex;
HWND hList;
hList = GetDlgItem(hwndDlg, IDC_CONV_TABLES);
hIntlInf = SetupOpenInfFile(_T("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;
LV_COLUMN column;
LV_ITEM item;
RECT ListRect;
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;
}
}
/* Property page dialog callback */
INT_PTR CALLBACK
AdvancedPageProc(HWND hwndDlg,
@ -15,7 +178,10 @@ AdvancedPageProc(HWND hwndDlg,
switch(uMsg)
{
case WM_INITDIALOG:
break;
{
InitLangList(hwndDlg);
}
break;
}
return FALSE;

View file

@ -50,7 +50,7 @@ BEGIN
LTEXT "Тази настройка позволява на неуникод приложенията да показват правилно изборниците и прозорците на присъщия им език. Тя не засяга уникод приложенията, но засяга всички потребители на компютъра.", -1, 14, 18, 216, 33
LTEXT "Изберете подходящ език за неуникод приложенията:", -1, 14, 55, 216, 10
GROUPBOX "Знаков набор", -1, 6, 92, 233, 88
LISTBOX IDC_CONV_TABLES, 14, 105, 218, 70, LBS_STANDARD
CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Подразбрани потребителски настройки", -1, 6, 183, 233, 33
CHECKBOX "Прилагане на всички настройки за текущия потребител и по подразбиране", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 192, 223, 22, BS_MULTILINE
END

View file

@ -50,7 +50,7 @@ BEGIN
LTEXT "Diese Einstellung ermöglicht es Unicode-Inkompatiblen Programmen, Menüs und Dialoge in der örtlichen Sprache darzustellen. Dies beeinflusst Unicode-Kompatible Programme nicht, wird aber für alle Nutzer des Computers angewendet.", -1, 14, 18, 223, 33
LTEXT "Wählen Sie eine Sprache aus, die der Sprachversion des Programmes entspricht, dass Sie nutzen wollen:", -1, 14, 55, 223, 18
GROUPBOX "Codepage Konvertierungstabellen", -1, 5, 101, 234, 88
LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Standardeinstellungen für Benutzerkonten", -1, 5, 193, 234, 30
CHECKBOX "Einstellungen &auf das aktive und Standardkonto anwenden.", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END

View file

@ -50,7 +50,7 @@ BEGIN
LTEXT "This system setting enables non-Unicode programs to display menus and dialogs in their native language. It does not affect Unicode programs, but it does apply to all users of this computer.", -1, 14, 18, 223, 33
LTEXT "Select a language to match the language version of the non-Unicode programs you want to use:", -1, 14, 55, 223, 18
GROUPBOX "Code page conversion tables", -1, 5, 101, 234, 88
LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Default user account settings", -1, 5, 193, 234, 30
CHECKBOX "Apply all settings to the current user account and to the default", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END

View file

@ -56,7 +56,7 @@ BEGIN
LTEXT "Esta configuración de sistema permite que algunos programas no Unicode muestren menús y diálogos en sus idiomas originales. No afecta a los programas Unicode pero afecta a todos los usuarios de este equipo.", -1, 14, 18, 223, 33
LTEXT "Seleccione un idioma que coincida con la versión de idioma de los programas no Unicode que desea utilizar:", -1, 14, 55, 223, 18
GROUPBOX "Tablas de conversión de páginas de código", -1, 5, 101, 234, 88
LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Configuración de la cuenta de usuario predeterminada", -1, 5, 193, 234, 30
CHECKBOX "Aplicar toda la configuración a la cuenta de usuario actual y al perfil de usuario predeterminado", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END

View file

@ -53,7 +53,7 @@ BEGIN
LTEXT "Ce paramètre système permet aux programmes non-Unicode d'afficher les menus et les dialogues dans leur langue native. Cela n'affecte pas es programmes Unicode, mais s'applique à tous les utilisateurs de cet ordinateur.", -1, 14, 18, 223, 33
LTEXT "Sélectionnez une langue qui corresponde à la version de la langue des programmes que vous voulez utiliser :", -1, 14, 55, 223, 18
GROUPBOX "Tables de conversion des pages de code", -1, 5, 101, 234, 88
LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Paramètres du compte de l'utilisateur par défaut ", -1, 5, 193, 234, 30
CHECKBOX "Appliquer tous ces paramètres au compte utilisateur actuel et à celui par défaut", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END

View file

@ -52,7 +52,7 @@ BEGIN
LTEXT "In base a questa impostazione di sistema è possibile visualizzare menù e finestre di dialogo di programmi non Unicode nella lingua di origine. I programmi Unicode resteranno invariati, ma l'impostazione verrà applicata per tutti gli utenti che utilizzano il computer.", -1, 14, 18, 223, 33
LTEXT "Selezionare una lingua per i programmi non Unicode da utilizzare:", -1, 14, 55, 223, 18
GROUPBOX "Tabella di conversione di tabelle codici", -1, 5, 101, 234, 88
LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Impostazioni account utente predefinito", -1, 5, 193, 234, 30
CHECKBOX "Appli&ca tutte le impostazioni all'account utente corrente e al profilo utente predefinito", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END

View file

@ -57,7 +57,7 @@ BEGIN
LTEXT "Te ustawienia umożliwiają programom bez standardu Unicode wyświetlać menu i dialogi w odpowiednich językach. Nie ma to wpływu na programy Unicode ale dotyczy profili domyślnych.", -1, 14, 18, 223, 33
LTEXT "Wybierz taki język, który ma być używany przez programy bez Unicode:", -1, 14, 55, 223, 18
GROUPBOX "Tablice konwersji stron kodowych", -1, 5, 101, 234, 88
LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Ustawienia domyślne użytkownika", -1, 5, 193, 234, 30
CHECKBOX "Zastosuj ustawienia dla obecnego konta jak i dla profilu domyślnego.", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END

View file

@ -51,7 +51,7 @@ BEGIN
LTEXT "Этот параметр позволяет программам, не поддерживающим Юникод, отображать меню и диалоги на своем языке. Он не влияет на Юникод-совместимые программы, но применяется для всех пользователей этого компьютера.", -1, 14, 18, 223, 33
LTEXT "Выберите язык, соответствующий языку используемых программ, которые не поддерживают Юникод:", -1, 14, 55, 223, 18
GROUPBOX "Кодовые страницы таблиц преобразования", -1, 5, 101, 234, 88
LISTBOX IDC_CONV_TABLES, 14, 114, 217, 70, LBS_STANDARD
CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Параметры для стандартной учетной записи", -1, 5, 193, 234, 30
CHECKBOX "Применить эти параметры для текущей учетной записи и для стандартного профиля", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END

View file

@ -59,7 +59,7 @@ BEGIN
LTEXT "Цей системний параметр дає змогу програмам, які не підтримують Юнікод, показувати меню та діалоги рідною мовою. Він не впливає на програми з підтримкою Юнікоду, але застосовується до всіх користувачів цього комп'ютера.", -1, 14, 18, 223, 33
LTEXT "Виберіть мову, яка відповідає мовній версії бажаних програм без підтримки Юнікоду.", -1, 14, 55, 223, 18
GROUPBOX "Таблиці перетворення кодових сторінок", -1, 5, 101, 234, 88
LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Параметри стандартного облікового запису", -1, 5, 193, 234, 30
CHECKBOX "Застосувати всі параметри до поточного облікового запису та до стандартного профілю користувача", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END