4 * FILE: dll/win32/input/settings.c
6 * PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
16 static HWND MainDlgWnd
;
17 // for SaveInputLang()
18 static INT OldLayoutNum
;
23 TCHAR LangName
[MAX_PATH
];
24 TCHAR LayoutName
[MAX_PATH
];
25 TCHAR ValName
[CCH_ULONG_DEC
+ 1];
26 TCHAR IndName
[MAX_PATH
];
27 } LAYOUT_ITEM
, *LPLAYOUT_ITEM
;
33 INT iIndex
= (INT
) SendMessage(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
),
34 LVM_GETNEXTITEM
, -1, LVNI_FOCUSED
);
40 IsLayoutExists(LPTSTR szLayoutID
, LPTSTR szLangID
)
43 TCHAR szPreload
[CCH_LAYOUT_ID
+ 1], szLayoutNum
[3 + 1],
44 szTmp
[CCH_LAYOUT_ID
+ 1], szOldLangID
[CCH_LAYOUT_ID
+ 1];
45 DWORD dwIndex
= 0, dwType
, dwSize
;
46 BOOL IsLangExists
= FALSE
;
49 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"),
50 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
52 dwSize
= sizeof(szLayoutNum
);
54 while (RegEnumValue(hKey
, dwIndex
, szLayoutNum
, &dwSize
, NULL
, &dwType
, NULL
, NULL
) == ERROR_SUCCESS
)
56 dwSize
= sizeof(szPreload
);
57 if (RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
) != ERROR_SUCCESS
)
63 langid
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
64 GetLocaleInfo(langid
, LOCALE_ILANGUAGE
, szTmp
, sizeof(szTmp
) / sizeof(TCHAR
));
65 wsprintf(szOldLangID
, _T("0000%s"), szTmp
);
67 if (_tcscmp(szOldLangID
, szLangID
) == 0)
72 if (szPreload
[0] == 'd')
74 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"),
75 0, KEY_QUERY_VALUE
, &hSubKey
) == ERROR_SUCCESS
)
77 dwSize
= sizeof(szTmp
);
78 RegQueryValueEx(hSubKey
, szPreload
, NULL
, NULL
, (LPBYTE
)szTmp
, &dwSize
);
80 if ((_tcscmp(szTmp
, szLayoutID
) == 0)&&(IsLangExists
))
90 if ((_tcscmp(szPreload
, szLayoutID
) == 0) && (IsLangExists
))
98 dwSize
= sizeof(szLayoutNum
);
109 CreateLayoutIcon(LPTSTR szInd
)
112 HBITMAP hBitmap
, hBmpNew
, hBmpOld
;
114 DWORD bkColor
, bkText
;
119 hdcsrc
= GetDC(NULL
);
120 hdc
= CreateCompatibleDC(hdcsrc
);
121 hBitmap
= CreateCompatibleBitmap(hdcsrc
, 16, 16);
122 ReleaseDC(NULL
, hdcsrc
);
126 hBmpNew
= CreateBitmap(16, 16, 1, 1, NULL
);
129 hBmpOld
= SelectObject(hdc
, hBitmap
);
135 bkColor
= SetBkColor(hdc
, GetSysColor(COLOR_HIGHLIGHT
));
136 bkText
= SetTextColor(hdc
, GetSysColor(COLOR_HIGHLIGHTTEXT
));
138 ExtTextOut(hdc
, rect
.left
, rect
.top
, ETO_OPAQUE
, &rect
, _T(""), 0, NULL
);
140 hFont
= CreateFont(-11, 0, 0, 0, FW_NORMAL
, FALSE
, FALSE
, FALSE
, ANSI_CHARSET
,
141 OUT_DEFAULT_PRECIS
, CLIP_DEFAULT_PRECIS
,
142 DEFAULT_QUALITY
, FF_DONTCARE
, _T("Tahoma"));
144 SelectObject(hdc
, hFont
);
145 DrawText(hdc
, _tcsupr(szInd
), 2, &rect
, DT_SINGLELINE
|DT_CENTER
|DT_VCENTER
);
146 SelectObject(hdc
, hBmpNew
);
147 PatBlt(hdc
, 0, 0, 16, 16, BLACKNESS
);
148 SelectObject(hdc
, hBmpOld
);
150 IconInfo
.hbmColor
= hBitmap
;
151 IconInfo
.hbmMask
= hBmpNew
;
152 IconInfo
.fIcon
= TRUE
;
154 hIcon
= CreateIconIndirect(&IconInfo
);
156 DeleteObject(hBmpNew
);
157 DeleteObject(hBmpOld
);
163 DeleteObject(hBitmap
);
169 GetLayoutID(LPTSTR szLayoutNum
, LPTSTR szLCID
)
174 TCHAR szTempLCID
[CCH_LAYOUT_ID
+ 1];
177 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
179 dwBufLen
= sizeof(szTempLCID
);
180 dwRes
= RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szTempLCID
, &dwBufLen
);
182 if (dwRes
!= ERROR_SUCCESS
)
191 // Look for a substitude of this layout
192 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
194 dwBufLen
= sizeof(szTempLCID
);
196 if (RegQueryValueEx(hKey
, szTempLCID
, NULL
, NULL
, (LPBYTE
)szLCID
, &dwBufLen
) != ERROR_SUCCESS
)
198 // No substitute found, then use the old LCID
199 lstrcpy(szLCID
, szTempLCID
);
206 // Substitutes key couldn't be opened, so use the old LCID
207 lstrcpy(szLCID
, szTempLCID
);
214 GetLayoutName(LPCTSTR szLCID
, LPTSTR szName
)
218 TCHAR szBuf
[MAX_PATH
], szDispName
[MAX_PATH
], szIndex
[MAX_PATH
], szPath
[MAX_PATH
];
222 wsprintf(szBuf
, _T("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szLCID
);
224 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE
, (LPCTSTR
)szBuf
, 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
226 dwBufLen
= sizeof(szBuf
);
228 if (RegQueryValueEx(hKey
, _T("Layout Display Name"), NULL
, NULL
, (LPBYTE
)szDispName
, &dwBufLen
) == ERROR_SUCCESS
)
230 if (szDispName
[0] == '@')
232 for (i
= 0; i
< _tcslen(szDispName
); i
++)
234 if ((szDispName
[i
] == ',') && (szDispName
[i
+ 1] == '-'))
236 for (j
= i
+ 2, k
= 0; j
< _tcslen(szDispName
)+1; j
++, k
++)
238 szIndex
[k
] = szDispName
[j
];
240 szDispName
[i
- 1] = '\0';
243 else szDispName
[i
] = szDispName
[i
+ 1];
246 if (ExpandEnvironmentStrings(szDispName
, szPath
, MAX_PATH
))
248 hLib
= LoadLibrary(szPath
);
251 if (LoadString(hLib
, _ttoi(szIndex
), szPath
, sizeof(szPath
) / sizeof(TCHAR
)) != 0)
253 _tcscpy(szName
, szPath
);
263 dwBufLen
= sizeof(szBuf
);
265 if (RegQueryValueEx(hKey
, _T("Layout Text"), NULL
, NULL
, (LPBYTE
)szName
, &dwBufLen
) == ERROR_SUCCESS
)
276 AddListColumn(HWND hWnd
)
279 TCHAR szBuf
[MAX_PATH
];
280 HWND hList
= GetDlgItem(hWnd
, IDC_KEYLAYOUT_LIST
);
282 ZeroMemory(&column
, sizeof(LV_COLUMN
));
283 column
.mask
= LVCF_FMT
| LVCF_TEXT
| LVCF_WIDTH
| LVCF_SUBITEM
;
285 column
.fmt
= LVCFMT_LEFT
;
287 LoadString(hApplet
, IDS_LANGUAGE
, szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
288 column
.pszText
= szBuf
;
290 (VOID
) ListView_InsertColumn(hList
, 0, &column
);
292 column
.fmt
= LVCFMT_RIGHT
;
295 LoadString(hApplet
, IDS_LAYOUT
, szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
296 column
.pszText
= szBuf
;
297 (VOID
) ListView_InsertColumn(hList
, 1, &column
);
301 InitLangList(HWND hWnd
, HIMAGELIST hImgList
)
304 TCHAR szBuf
[MAX_PATH
], szPreload
[CCH_LAYOUT_ID
+ 1], szSub
[CCH_LAYOUT_ID
+ 1];
306 DWORD dwIndex
= 0, dwType
, dwSize
;
308 HWND hList
= GetDlgItem(hWnd
, IDC_KEYLAYOUT_LIST
);
311 item
.mask
= LVIF_TEXT
| LVIF_PARAM
| LVIF_STATE
| LVIF_IMAGE
;
313 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"),
314 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
316 dwSize
= sizeof(lItem
.ValName
);
318 while (RegEnumValue(hKey
, dwIndex
, lItem
.ValName
, &dwSize
, NULL
, &dwType
, NULL
, NULL
) == ERROR_SUCCESS
)
320 dwSize
= sizeof(szPreload
);
321 RegQueryValueEx(hKey
, lItem
.ValName
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
323 lItem
.LangId
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
325 GetLocaleInfo(lItem
.LangId
, LOCALE_SISO639LANGNAME
, (LPTSTR
)szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
326 lstrcpy(lItem
.IndName
, _tcsupr(szBuf
));
327 imgIndex
= ImageList_AddIcon(hImgList
, CreateLayoutIcon(lItem
.IndName
));
329 GetLocaleInfo(lItem
.LangId
, LOCALE_SLANGUAGE
, (LPTSTR
)szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
330 lstrcpy(lItem
.LangName
, szBuf
);
332 // Does this keyboard layout have a substitute?
333 // Then add the substitute instead of the Layout ID
334 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"),
335 0, KEY_QUERY_VALUE
, &hSubKey
) == ERROR_SUCCESS
)
337 dwSize
= sizeof(szSub
);
339 if (RegQueryValueEx(hSubKey
, szPreload
, NULL
, NULL
, (LPBYTE
)szSub
, &dwSize
) == ERROR_SUCCESS
)
341 lstrcpy(szPreload
, szSub
);
344 RegCloseKey(hSubKey
);
347 GetLayoutName(szPreload
, lItem
.LayoutName
);
349 item
.pszText
= lItem
.LangName
;
350 item
.iItem
= (INT
) dwIndex
;
351 item
.lParam
= (LPARAM
)_ttoi(lItem
.ValName
);
352 item
.iImage
= imgIndex
;
353 i
= ListView_InsertItem(hList
, &item
);
355 ListView_SetItemText(hList
, i
, 1, lItem
.LayoutName
);
359 if (lstrcmp(lItem
.ValName
, _T("1")) == 0)
361 (VOID
) ListView_SetHotItem(hList
, i
);
370 UpdateLayoutsList(VOID
)
375 (VOID
) ListView_DeleteAllItems(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
));
378 hImgList
= ImageList_Create(16, 16, ILC_COLOR8
| ILC_MASK
, 0, 1);
379 InitLangList(MainDlgWnd
, hImgList
);
380 hImgList
= ListView_SetImageList(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), hImgList
, LVSIL_SMALL
);
382 /* Destroy old image list */
384 (VOID
) ImageList_Destroy(hImgList
);
387 typedef struct _REG_KB_ENTRY_
391 TCHAR szData
[CCH_LAYOUT_ID
+ 1];
395 /* Layouts were deleted so we have to order the existing ones */
397 UpdateRegValueNames(HKEY hKey
)
399 DWORD dwIndex
= 0, dwGot
= 0, dwLayoutSize
;
401 REG_KB_ENTRY
* data
= HeapAlloc(GetProcessHeap(), 0, dwSets
* sizeof(REG_KB_ENTRY
));
403 /* Get all existing entries and delete them */
404 dwLayoutSize
= sizeof(data
[0].szLayoutID
);
405 while (RegEnumValue(hKey
,
407 data
[dwGot
].szLayoutID
,
411 (PBYTE
)data
[dwGot
].szData
,
412 &data
[dwGot
].dwDataSize
) != ERROR_NO_MORE_ITEMS
)
414 if (_tcslen(data
[dwGot
].szLayoutID
) <= 2 && _tcslen(data
[dwGot
].szData
) == CCH_LAYOUT_ID
)
416 RegDeleteValue(hKey
, data
[dwGot
].szLayoutID
);
421 data
= HeapReAlloc(GetProcessHeap(), 0, data
, dwSets
* sizeof(REG_KB_ENTRY
));
425 dwLayoutSize
= sizeof(data
[0].szLayoutID
);
428 /* Set all entries with an updated value name */
429 for (dwIndex
= 0; dwIndex
< dwGot
; dwIndex
++)
431 TCHAR szNewLayoutID
[3];
433 _stprintf(szNewLayoutID
, TEXT("%u"), dwIndex
+ 1);
434 RegSetValueEx(hKey
, szNewLayoutID
, 0, data
[dwIndex
].dwType
,
435 (PBYTE
)data
[dwIndex
].szData
, data
[dwIndex
].dwDataSize
);
437 HeapFree(GetProcessHeap(), 0, data
);
443 INT iIndex
, LayoutNum
;
446 HWND hLayoutList
= GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
);
447 TCHAR szLayoutNum
[3 + 1], szTitle
[MAX_PATH
],
448 szConf
[MAX_PATH
], szPreload
[CCH_LAYOUT_ID
+ 1];
451 iIndex
= (INT
) SendMessage(hLayoutList
, LVM_GETNEXTITEM
, -1, LVNI_FOCUSED
);
455 LoadString(hApplet
, IDS_REM_QUESTION
, szConf
, sizeof(szConf
) / sizeof(TCHAR
));
456 LoadString(hApplet
, IDS_CONFIRMATION
, szTitle
, sizeof(szTitle
) / sizeof(TCHAR
));
458 if (MessageBox(MainDlgWnd
, szConf
, szTitle
, MB_YESNO
| MB_ICONQUESTION
) == IDYES
)
460 ZeroMemory(&item
, sizeof(LVITEM
));
462 item
.mask
= LVIF_PARAM
;
465 (VOID
) ListView_GetItem(hLayoutList
, &item
);
466 LayoutNum
= (INT
) item
.lParam
;
468 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
469 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
471 _ultot(LayoutNum
, szLayoutNum
, 10);
473 dwSize
= sizeof(szPreload
);
474 RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
476 if (szPreload
[0] == 'd')
478 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
479 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
481 if (RegDeleteValue(hSubKey
, szPreload
) != ERROR_SUCCESS
)
483 RegCloseKey(hSubKey
);
487 RegCloseKey(hSubKey
);
491 if (RegDeleteValue(hKey
, szLayoutNum
) == ERROR_SUCCESS
)
494 UpdateRegValueNames(hKey
);
506 TCHAR szLCID
[CCH_LAYOUT_ID
+ 1], szLayoutNum
[CCH_ULONG_DEC
+ 1];
510 if (IsLayoutSelected() != -1)
512 ZeroMemory(&item
, sizeof(LVITEM
));
514 item
.mask
= LVIF_PARAM
;
515 item
.iItem
= IsLayoutSelected();
517 (VOID
) ListView_GetItem(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), &item
);
519 LayoutNum
= (INT
) item
.lParam
;
520 _ultot(LayoutNum
, szLayoutNum
, 10);
522 if (GetLayoutID(szLayoutNum
, szLCID
))
524 hKl
= LoadKeyboardLayout(szLCID
, KLF_ACTIVATE
);
525 SystemParametersInfo(SPI_SETDEFAULTINPUTLANG
, 0, &hKl
, SPIF_SENDWININICHANGE
);
531 SaveInputLang(HWND hDlg
)
534 TCHAR szLayoutID
[CCH_LAYOUT_ID
+ 1], szLayoutNum
[CCH_ULONG_DEC
+ 1],
535 szPreload
[CCH_LAYOUT_ID
+ 1], LangID
[CCH_LAYOUT_ID
+ 1], szMessage
[MAX_PATH
],
536 Lang
[MAX_PATH
], SubPath
[MAX_PATH
];
542 iLayout
= SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
), CB_GETCURSEL
, 0, 0);
543 if (iLayout
== CB_ERR
) return;
545 pts
= (PTSTR
) SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
), CB_GETITEMDATA
, iLayout
, 0);
547 _ultot(OldLayoutNum
, szLayoutNum
, 10);
548 if (!GetLayoutID(szLayoutNum
, szLayoutID
)) return;
550 // if old layout = selected layout
551 if (_tcscmp(szLayoutID
, pts
) == 0) return;
553 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
554 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
556 dwSize
= sizeof(szPreload
);
557 if (RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
) != ERROR_SUCCESS
)
563 langid
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
564 GetLocaleInfo(langid
, LOCALE_ILANGUAGE
, Lang
, sizeof(Lang
) / sizeof(TCHAR
));
565 wsprintf(LangID
, _T("0000%s"), Lang
);
567 if (IsLayoutExists(pts
, LangID
))
569 LoadString(hApplet
, IDS_LAYOUT_EXISTS
, szMessage
, sizeof(szMessage
) / sizeof(TCHAR
));
570 MessageBox(hDlg
, szMessage
, NULL
, MB_OK
| MB_ICONINFORMATION
);
576 if (szPreload
[0] == 'd')
578 if (_tcscmp(LangID
, pts
) == 0)
580 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
581 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
583 if (RegDeleteValue(hSubKey
, szPreload
) != ERROR_SUCCESS
)
585 RegCloseKey(hSubKey
);
589 RegCloseKey(hSubKey
);
591 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)pts
,
592 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
597 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
598 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
600 RegSetValueEx(hSubKey
, szPreload
, 0, REG_SZ
, (LPBYTE
)pts
,
601 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
603 RegCloseKey(hSubKey
);
609 if (_tcscmp(LangID
, pts
) == 0)
611 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)pts
,
612 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
616 if (RegCreateKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0, NULL
,
617 REG_OPTION_NON_VOLATILE
, KEY_ALL_ACCESS
,
618 NULL
, &hSubKey
, NULL
) == ERROR_SUCCESS
)
620 wsprintf(SubPath
, _T("d%03d%s"), GetLayoutCount(Lang
)-1, Lang
);
622 RegSetValueEx(hSubKey
, SubPath
, 0, REG_SZ
, (LPBYTE
)pts
,
623 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
625 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)SubPath
,
626 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
628 RegCloseKey(hSubKey
);
638 InitInputLangPropDlg(HWND hDlg
)
643 TCHAR szLayoutNum
[10 + 1], szPreload
[CCH_LAYOUT_ID
+ 1],
644 szTmp
[CCH_LAYOUT_ID
+ 1], szName
[MAX_PATH
];
648 ZeroMemory(&item
, sizeof(LVITEM
));
650 item
.mask
= LVIF_PARAM
;
651 item
.iItem
= IsLayoutSelected();
653 (VOID
) ListView_GetItem(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), &item
);
654 LayoutNum
= (INT
) item
.lParam
;
655 OldLayoutNum
= LayoutNum
;
657 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
658 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
660 _ultot(LayoutNum
, szLayoutNum
, 10);
662 dwSize
= sizeof(szPreload
);
663 RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
665 langid
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
666 GetLocaleInfo(langid
, LOCALE_SLANGUAGE
, (LPTSTR
)szName
, sizeof(szName
) / sizeof(TCHAR
));
667 SetWindowText(GetDlgItem(hDlg
, IDC_INPUT_LANG_STR
), szName
);
669 if (szPreload
[0] == 'd')
671 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
672 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
674 if (RegQueryValueEx(hSubKey
, szPreload
, NULL
, NULL
, (LPBYTE
)szTmp
, &dwSize
) != ERROR_SUCCESS
)
676 RegCloseKey(hSubKey
);
680 lstrcpy(szPreload
, szTmp
);
681 RegCloseKey(hSubKey
);
685 if (GetLayoutName(szPreload
, szName
))
687 SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
),
688 CB_SELECTSTRING
, (WPARAM
)-1, (LPARAM
)szName
);
695 InputLangPropDlgProc(HWND hDlg
,
700 UNREFERENCED_PARAMETER(lParam
);
705 CreateKeyboardLayoutList(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
));
706 InitInputLangPropDlg(hDlg
);
710 switch (LOWORD(wParam
))
715 EndDialog(hDlg
,LOWORD(wParam
));
719 EndDialog(hDlg
,LOWORD(wParam
));
728 /* Property page dialog callback */
730 SettingPageProc(HWND hwndDlg
,UINT uMsg
,WPARAM wParam
,LPARAM lParam
)
732 UNREFERENCED_PARAMETER(lParam
);
740 MainDlgWnd
= hwndDlg
;
741 AddListColumn(hwndDlg
);
742 (VOID
) ListView_SetExtendedListViewStyle(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
),
743 LVS_EX_FULLROWSELECT
);
744 hImgList
= ImageList_Create(16, 16, ILC_COLOR8
| ILC_MASK
, 0, 1);
745 InitLangList(hwndDlg
, hImgList
);
746 (VOID
) ListView_SetImageList(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), hImgList
, LVSIL_SMALL
);
751 switch (LOWORD(wParam
))
758 switch (LOWORD(wParam
))
760 case IDC_REMOVE_BUTTON
:
764 case IDC_KEY_SET_BTN
:
766 MAKEINTRESOURCE(IDD_KEYSETTINGS
),
773 MAKEINTRESOURCE(IDD_ADD
),
778 case IDC_PROP_BUTTON
:
779 if (IsLayoutSelected() != -1)
781 MAKEINTRESOURCE(IDD_INPUT_LANG_PROP
),
783 InputLangPropDlgProc
);
786 case IDC_SET_DEFAULT
: