Index: base/applications/charmap/charmap.c =================================================================== --- base/applications/charmap/charmap.c (revision 51052) +++ base/applications/charmap/charmap.c (working copy) @@ -8,6 +8,7 @@ */ #include +#include "settings.c" #define ID_ABOUT 0x1 @@ -398,6 +399,8 @@ iccx.dwSize = sizeof(INITCOMMONCONTROLSEX); iccx.dwICC = ICC_TAB_CLASSES; InitCommonControlsEx(&iccx); + + LoadSettings(); if (RegisterMapClasses(hInstance)) { Index: base/applications/charmap/charmap.rbuild =================================================================== --- base/applications/charmap/charmap.rbuild (revision 51052) +++ base/applications/charmap/charmap.rbuild (working copy) @@ -5,6 +5,7 @@ gdi32 user32 comctl32 + advapi32 about.c charmap.c Index: base/applications/charmap/lang/en-US.rc =================================================================== --- base/applications/charmap/lang/en-US.rc (revision 51052) +++ base/applications/charmap/lang/en-US.rc (working copy) @@ -1,20 +1,29 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_CHARMAP DIALOGEX 6, 6, 293, 205 //233 +IDD_CHARMAP DIALOGEX 6, 6, 315, 295 //295 is for Windows7-like charmap, 205 for old one CAPTION "Character Map" FONT 8,"MS Shell Dlg",0,0 STYLE DS_SHELLFONT | WS_BORDER | WS_VISIBLE | WS_SYSMENU | WS_MINIMIZEBOX BEGIN LTEXT "Font:", IDC_STATIC, 6, 7, 24, 9 - COMBOBOX IDC_FONTCOMBO, 36, 5, 210, 210, WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT | CBS_HASSTRINGS - PUSHBUTTON "Help", IDC_CMHELP, 249, 5, 35, 13 - CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 + COMBOBOX IDC_FONTCOMBO, 36, 5, 232, 210, WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT | CBS_HASSTRINGS + PUSHBUTTON "Help", IDC_CMHELP, 271, 5, 35, 13 + CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 288, 156 LTEXT "Characters to copy:", IDC_STATIC, 6, 188, 66, 9 - CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 - DEFPUSHBUTTON "Select", IDC_SELECT, 194, 186, 44, 13 - PUSHBUTTON "Copy", IDC_COPY, 242, 186, 44, 13, WS_DISABLED - //AUTOCHECKBOX "Advanced view", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP - //EDITTEXT IDC_DISPLAY, 8, 217, 278, 13, WS_VISIBLE | WS_TABSTOP | ES_READONLY + EDITTEXT IDC_TEXTBOX, 75, 186, 136, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + DEFPUSHBUTTON "Select", IDC_SELECT, 216, 186, 44, 13 + PUSHBUTTON "Copy", IDC_COPY, 266, 186, 44, 13, WS_DISABLED + AUTOCHECKBOX "Advanced view", IDC_ADVVIEW, 6, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "Character set:", IDC_CHARSET, 6, 224, 66, 9 + COMBOBOX IDC_CHARSETCOMBO, 75, 221, 145, 210, WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT | CBS_HASSTRINGS | WS_TABSTOP + LTEXT "Go to Unicode:", IDC_GOTOUNICODE, 225, 224, 66, 9 + EDITTEXT IDC_GOTOUNICOTXT, 280, 221, 30, 13, WS_CHILD | WS_TABSTOP + LTEXT "Group by:", IDC_GROUPBY, 6, 244, 66, 9 + COMBOBOX IDC_GROUPBYCOMBO, 75, 241, 145, 105, WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT | CBS_HASSTRINGS | WS_TABSTOP + LTEXT "Search for:", IDC_SEARCHFOR, 6, 264, 66, 9 + EDITTEXT IDC_SEARCHFORTXT, 75, 261, 145, 13, WS_CHILD | WS_TABSTOP + PUSHBUTTON "Search", IDC_SEARCHBTN, 225, 261, 44, 13, WS_TABSTOP | WS_DISABLED + EDITTEXT IDC_DISPLAY, 6, 280, 305, 13, WS_VISIBLE | WS_TABSTOP | ES_READONLY END IDD_ABOUTBOX DIALOGEX 22,16,210,182 Index: base/applications/charmap/precomp.h =================================================================== --- base/applications/charmap/precomp.h (revision 51052) +++ base/applications/charmap/precomp.h (working copy) @@ -6,12 +6,15 @@ #include #include #include +#include +#include #include "resource.h" #define XCELLS 20 #define YCELLS 10 #define XLARGE 45 #define YLARGE 25 +#define COUNT_OF(a) (sizeof(a)/sizeof(a[0])) #define FM_SETFONT (WM_USER + 1) #define FM_GETCHAR (WM_USER + 2) Index: base/applications/charmap/resource.h =================================================================== --- base/applications/charmap/resource.h (revision 51052) +++ base/applications/charmap/resource.h (working copy) @@ -17,3 +17,23 @@ #define IDS_LICENSE 1010 #define IDS_ABOUT 1011 + +#define IDC_CHARSETCOMBO 1012 +#define IDC_CHARSET 1013 +#define IDC_GROUPBY 1014 +#define IDC_GROUPBYCOMBO 1015 +#define IDC_GOTOUNICODE 1016 +#define IDC_GOTOUNICOTXT 1017 +#define IDC_SEARCHFOR 1018 +#define IDC_SEARCHFORTXT 1019 +#define IDC_SEARCHBTN 1020 + +typedef struct +{ + TCHAR strFont[MAX_PATH]; + BOOL bAdvanced; +} CHARMAP_GLOBALS; + +extern CHARMAP_GLOBALS Globals; + +void LoadSettings(void); Index: base/applications/charmap/settings.c =================================================================== --- base/applications/charmap/settings.c (revision 0) +++ base/applications/charmap/settings.c (revision 0) @@ -0,0 +1,70 @@ +#include + +static LPCTSTR s_szRegistryKey = _T("Software\\Microsoft\\CharMap"); +CHARMAP_GLOBALS Globals; + +static BOOL QueryGeneric(HKEY hKey, LPCTSTR pszValueNameT, DWORD dwExpectedType, + LPVOID pvResult, DWORD dwResultSize) +{ + DWORD dwType, cbData; + LPVOID *pTemp = _alloca(dwResultSize); + + ZeroMemory(pTemp, dwResultSize); + + cbData = dwResultSize; + if (RegQueryValueEx(hKey, pszValueNameT, NULL, &dwType, (LPBYTE) pTemp, &cbData) != ERROR_SUCCESS) + return FALSE; + + if (dwType != dwExpectedType) + return FALSE; + + memcpy(pvResult, pTemp, cbData); + return TRUE; +} + +static BOOL QueryDword(HKEY hKey, LPCTSTR pszValueName, DWORD *pdwResult) +{ + return QueryGeneric(hKey, pszValueName, REG_DWORD, pdwResult, sizeof(*pdwResult)); +} + +// static BOOL QueryByte(HKEY hKey, LPCTSTR pszValueName, BYTE *pbResult) +// { + // DWORD dwResult; + // if (!QueryGeneric(hKey, pszValueName, REG_DWORD, &dwResult, sizeof(dwResult))) + // return FALSE; + // if (dwResult >= 0x100) + // return FALSE; + // *pbResult = (BYTE) dwResult; + // return TRUE; +// } + +static BOOL QueryBool(HKEY hKey, LPCTSTR pszValueName, BOOL *pbResult) +{ + DWORD dwResult; + if (!QueryDword(hKey, pszValueName, &dwResult)) + return FALSE; + *pbResult = dwResult ? TRUE : FALSE; + return TRUE; +} + +static BOOL QueryString(HKEY hKey, LPCTSTR pszValueName, LPTSTR pszResult, DWORD dwResultSize) +{ + return QueryGeneric(hKey, pszValueName, REG_SZ, pszResult, dwResultSize * sizeof(TCHAR)); +} + +void LoadSettings(void) +{ + HKEY hKey = NULL; + + if (RegOpenKey(HKEY_CURRENT_USER, s_szRegistryKey, &hKey) == ERROR_SUCCESS) + { + QueryString(hKey, _T("Font"), Globals.strFont, sizeof(Globals.strFont) / sizeof(Globals.strFont[0])); + QueryBool(hKey, _T("Advanced"), &Globals.bAdvanced); + + //TODO: make "Advanced view" checkbox checked + //if (Globals.bAdvanced = TRUE) + //Set "Font" in combobox + } + + RegCloseKey(hKey); +} \ No newline at end of file