849d70cd62a96e5378d0b9b584a631ce06d1da7b
4 * FILE: dll/win32/input/settings.c
6 * PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
15 static HWND MainDlgWnd
;
16 // for SaveInputLang()
17 static INT OldLayoutNum
;
22 TCHAR LangName
[MAX_PATH
];
23 TCHAR LayoutName
[MAX_PATH
];
24 TCHAR ValName
[CCH_ULONG_DEC
+ 1];
25 TCHAR IndName
[MAX_PATH
];
26 } LAYOUT_ITEM
, *LPLAYOUT_ITEM
;
32 INT iIndex
= (INT
) SendMessage(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
),
33 LVM_GETNEXTITEM
, -1, LVNI_FOCUSED
);
39 IsLayoutExists(LPTSTR szLayoutID
, LPTSTR szLangID
)
42 TCHAR szPreload
[CCH_LAYOUT_ID
+ 1], szLayoutNum
[3 + 1],
43 szTmp
[CCH_LAYOUT_ID
+ 1], szOldLangID
[CCH_LAYOUT_ID
+ 1];
44 DWORD dwIndex
= 0, dwType
, dwSize
;
45 BOOL IsLangExists
= FALSE
;
48 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"),
49 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
51 dwSize
= sizeof(szLayoutNum
);
53 while (RegEnumValue(hKey
, dwIndex
, szLayoutNum
, &dwSize
, NULL
, &dwType
, NULL
, NULL
) == ERROR_SUCCESS
)
55 dwSize
= sizeof(szPreload
);
56 if (RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
) != ERROR_SUCCESS
)
62 langid
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
63 GetLocaleInfo(langid
, LOCALE_ILANGUAGE
, szTmp
, sizeof(szTmp
) / sizeof(TCHAR
));
64 wsprintf(szOldLangID
, _T("0000%s"), szTmp
);
66 if (_tcscmp(szOldLangID
, szLangID
) == 0)
71 if (szPreload
[0] == 'd')
73 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"),
74 0, KEY_QUERY_VALUE
, &hSubKey
) == ERROR_SUCCESS
)
76 dwSize
= sizeof(szTmp
);
77 RegQueryValueEx(hSubKey
, szPreload
, NULL
, NULL
, (LPBYTE
)szTmp
, &dwSize
);
79 if ((_tcscmp(szTmp
, szLayoutID
) == 0)&&(IsLangExists
))
89 if ((_tcscmp(szPreload
, szLayoutID
) == 0) && (IsLangExists
))
97 dwSize
= sizeof(szLayoutNum
);
108 CreateLayoutIcon(LPTSTR szInd
)
111 HBITMAP hBitmap
, hBmpNew
, hBmpOld
;
113 DWORD bkColor
, bkText
;
118 hdcsrc
= GetDC(NULL
);
119 hdc
= CreateCompatibleDC(hdcsrc
);
120 hBitmap
= CreateCompatibleBitmap(hdcsrc
, 16, 16);
121 ReleaseDC(NULL
, hdcsrc
);
125 hBmpNew
= CreateBitmap(16, 16, 1, 1, NULL
);
128 hBmpOld
= SelectObject(hdc
, hBitmap
);
134 bkColor
= SetBkColor(hdc
, GetSysColor(COLOR_HIGHLIGHT
));
135 bkText
= SetTextColor(hdc
, GetSysColor(COLOR_HIGHLIGHTTEXT
));
137 ExtTextOut(hdc
, rect
.left
, rect
.top
, ETO_OPAQUE
, &rect
, _T(""), 0, NULL
);
139 hFont
= CreateFont(-11, 0, 0, 0, FW_NORMAL
, FALSE
, FALSE
, FALSE
, ANSI_CHARSET
,
140 OUT_DEFAULT_PRECIS
, CLIP_DEFAULT_PRECIS
,
141 DEFAULT_QUALITY
, FF_DONTCARE
, _T("Tahoma"));
143 SelectObject(hdc
, hFont
);
144 DrawText(hdc
, _tcsupr(szInd
), 2, &rect
, DT_SINGLELINE
|DT_CENTER
|DT_VCENTER
);
145 SelectObject(hdc
, hBmpNew
);
146 PatBlt(hdc
, 0, 0, 16, 16, BLACKNESS
);
147 SelectObject(hdc
, hBmpOld
);
149 IconInfo
.hbmColor
= hBitmap
;
150 IconInfo
.hbmMask
= hBmpNew
;
151 IconInfo
.fIcon
= TRUE
;
153 hIcon
= CreateIconIndirect(&IconInfo
);
155 DeleteObject(hBmpNew
);
156 DeleteObject(hBmpOld
);
162 DeleteObject(hBitmap
);
168 GetLayoutID(LPTSTR szLayoutNum
, LPTSTR szLCID
)
173 TCHAR szTempLCID
[CCH_LAYOUT_ID
+ 1];
176 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
178 dwBufLen
= sizeof(szTempLCID
);
179 dwRes
= RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szTempLCID
, &dwBufLen
);
181 if (dwRes
!= ERROR_SUCCESS
)
190 // Look for a substitude of this layout
191 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
193 dwBufLen
= sizeof(szTempLCID
);
195 if (RegQueryValueEx(hKey
, szTempLCID
, NULL
, NULL
, (LPBYTE
)szLCID
, &dwBufLen
) != ERROR_SUCCESS
)
197 // No substitute found, then use the old LCID
198 lstrcpy(szLCID
, szTempLCID
);
205 // Substitutes key couldn't be opened, so use the old LCID
206 lstrcpy(szLCID
, szTempLCID
);
213 GetLayoutName(LPCTSTR szLCID
, LPTSTR szName
)
217 TCHAR szBuf
[MAX_PATH
], szDispName
[MAX_PATH
], szIndex
[MAX_PATH
], szPath
[MAX_PATH
];
221 wsprintf(szBuf
, _T("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szLCID
);
223 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE
, (LPCTSTR
)szBuf
, 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
225 dwBufLen
= sizeof(szBuf
);
227 if (RegQueryValueEx(hKey
, _T("Layout Display Name"), NULL
, NULL
, (LPBYTE
)szDispName
, &dwBufLen
) == ERROR_SUCCESS
)
229 if (szDispName
[0] == '@')
231 for (i
= 0; i
< _tcslen(szDispName
); i
++)
233 if ((szDispName
[i
] == ',') && (szDispName
[i
+ 1] == '-'))
235 for (j
= i
+ 2, k
= 0; j
< _tcslen(szDispName
)+1; j
++, k
++)
237 szIndex
[k
] = szDispName
[j
];
239 szDispName
[i
- 1] = '\0';
242 else szDispName
[i
] = szDispName
[i
+ 1];
245 if (ExpandEnvironmentStrings(szDispName
, szPath
, MAX_PATH
))
247 hLib
= LoadLibrary(szPath
);
250 if (LoadString(hLib
, _ttoi(szIndex
), szPath
, sizeof(szPath
) / sizeof(TCHAR
)) != 0)
252 _tcscpy(szName
, szPath
);
262 dwBufLen
= sizeof(szBuf
);
264 if (RegQueryValueEx(hKey
, _T("Layout Text"), NULL
, NULL
, (LPBYTE
)szName
, &dwBufLen
) == ERROR_SUCCESS
)
275 AddListColumn(HWND hWnd
)
278 TCHAR szBuf
[MAX_PATH
];
279 HWND hList
= GetDlgItem(hWnd
, IDC_KEYLAYOUT_LIST
);
281 ZeroMemory(&column
, sizeof(LV_COLUMN
));
282 column
.mask
= LVCF_FMT
| LVCF_TEXT
| LVCF_WIDTH
| LVCF_SUBITEM
;
284 column
.fmt
= LVCFMT_LEFT
;
286 LoadString(hApplet
, IDS_LANGUAGE
, szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
287 column
.pszText
= szBuf
;
289 (VOID
) ListView_InsertColumn(hList
, 0, &column
);
291 column
.fmt
= LVCFMT_RIGHT
;
294 LoadString(hApplet
, IDS_LAYOUT
, szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
295 column
.pszText
= szBuf
;
296 (VOID
) ListView_InsertColumn(hList
, 1, &column
);
300 InitLangList(HWND hWnd
, HIMAGELIST hImgList
)
303 TCHAR szBuf
[MAX_PATH
], szPreload
[CCH_LAYOUT_ID
+ 1], szSub
[CCH_LAYOUT_ID
+ 1];
305 DWORD dwIndex
= 0, dwType
, dwSize
;
307 HWND hList
= GetDlgItem(hWnd
, IDC_KEYLAYOUT_LIST
);
310 item
.mask
= LVIF_TEXT
| LVIF_PARAM
| LVIF_STATE
| LVIF_IMAGE
;
312 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"),
313 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
315 dwSize
= sizeof(lItem
.ValName
);
317 while (RegEnumValue(hKey
, dwIndex
, lItem
.ValName
, &dwSize
, NULL
, &dwType
, NULL
, NULL
) == ERROR_SUCCESS
)
319 dwSize
= sizeof(szPreload
);
320 RegQueryValueEx(hKey
, lItem
.ValName
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
322 lItem
.LangId
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
324 GetLocaleInfo(lItem
.LangId
, LOCALE_SISO639LANGNAME
, (LPTSTR
)szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
325 lstrcpy(lItem
.IndName
, _tcsupr(szBuf
));
326 imgIndex
= ImageList_AddIcon(hImgList
, CreateLayoutIcon(lItem
.IndName
));
328 GetLocaleInfo(lItem
.LangId
, LOCALE_SLANGUAGE
, (LPTSTR
)szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
329 lstrcpy(lItem
.LangName
, szBuf
);
331 // Does this keyboard layout have a substitute?
332 // Then add the substitute instead of the Layout ID
333 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"),
334 0, KEY_QUERY_VALUE
, &hSubKey
) == ERROR_SUCCESS
)
336 dwSize
= sizeof(szSub
);
338 if (RegQueryValueEx(hSubKey
, szPreload
, NULL
, NULL
, (LPBYTE
)szSub
, &dwSize
) == ERROR_SUCCESS
)
340 lstrcpy(szPreload
, szSub
);
343 RegCloseKey(hSubKey
);
346 GetLayoutName(szPreload
, lItem
.LayoutName
);
348 item
.pszText
= lItem
.LangName
;
349 item
.iItem
= (INT
) dwIndex
;
350 item
.lParam
= (LPARAM
)_ttoi(lItem
.ValName
);
351 item
.iImage
= imgIndex
;
352 i
= ListView_InsertItem(hList
, &item
);
354 ListView_SetItemText(hList
, i
, 1, lItem
.LayoutName
);
358 if (lstrcmp(lItem
.ValName
, _T("1")) == 0)
360 (VOID
) ListView_SetHotItem(hList
, i
);
369 UpdateLayoutsList(VOID
)
374 (VOID
) ListView_DeleteAllItems(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
));
377 hImgList
= ImageList_Create(16, 16, ILC_COLOR8
| ILC_MASK
, 0, 1);
378 InitLangList(MainDlgWnd
, hImgList
);
379 hImgList
= ListView_SetImageList(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), hImgList
, LVSIL_SMALL
);
381 /* Destroy old image list */
383 (VOID
) ImageList_Destroy(hImgList
);
386 typedef struct _REG_KB_ENTRY_
390 TCHAR szData
[CCH_LAYOUT_ID
+ 1];
394 /* Layouts were deleted so we have to order the existing ones */
396 UpdateRegValueNames(HKEY hKey
)
398 DWORD dwIndex
= 0, dwGot
= 0, dwLayoutSize
;
400 REG_KB_ENTRY
* data
= HeapAlloc(GetProcessHeap(), 0, dwSets
* sizeof(REG_KB_ENTRY
));
402 /* Get all existing entries and delete them */
403 dwLayoutSize
= sizeof(data
[0].szLayoutID
);
404 while (RegEnumValue(hKey
,
406 data
[dwGot
].szLayoutID
,
410 (PBYTE
)data
[dwGot
].szData
,
411 &data
[dwGot
].dwDataSize
) != ERROR_NO_MORE_ITEMS
)
413 if (_tcslen(data
[dwGot
].szLayoutID
) <= 2 && _tcslen(data
[dwGot
].szData
) == CCH_LAYOUT_ID
)
415 RegDeleteValue(hKey
, data
[dwGot
].szLayoutID
);
420 data
= HeapReAlloc(GetProcessHeap(), 0, data
, dwSets
* sizeof(REG_KB_ENTRY
));
424 dwLayoutSize
= sizeof(data
[0].szLayoutID
);
427 /* Set all entries with an updated value name */
428 for (dwIndex
= 0; dwIndex
< dwGot
; dwIndex
++)
430 TCHAR szNewLayoutID
[3];
432 _stprintf(szNewLayoutID
, TEXT("%u"), dwIndex
+ 1);
433 RegSetValueEx(hKey
, szNewLayoutID
, 0, data
[dwIndex
].dwType
,
434 (PBYTE
)data
[dwIndex
].szData
, data
[dwIndex
].dwDataSize
);
436 HeapFree(GetProcessHeap(), 0, data
);
442 INT iIndex
, LayoutNum
;
445 HWND hLayoutList
= GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
);
446 TCHAR szLayoutNum
[3 + 1], szTitle
[MAX_PATH
],
447 szConf
[MAX_PATH
], szPreload
[CCH_LAYOUT_ID
+ 1];
450 iIndex
= (INT
) SendMessage(hLayoutList
, LVM_GETNEXTITEM
, -1, LVNI_FOCUSED
);
454 LoadString(hApplet
, IDS_REM_QUESTION
, szConf
, sizeof(szConf
) / sizeof(TCHAR
));
455 LoadString(hApplet
, IDS_CONFIRMATION
, szTitle
, sizeof(szTitle
) / sizeof(TCHAR
));
457 if (MessageBox(MainDlgWnd
, szConf
, szTitle
, MB_YESNO
| MB_ICONQUESTION
) == IDYES
)
459 ZeroMemory(&item
, sizeof(LVITEM
));
461 item
.mask
= LVIF_PARAM
;
464 (VOID
) ListView_GetItem(hLayoutList
, &item
);
465 LayoutNum
= (INT
) item
.lParam
;
467 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
468 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
470 _ultot(LayoutNum
, szLayoutNum
, 10);
472 dwSize
= sizeof(szPreload
);
473 RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
475 if (szPreload
[0] == 'd')
477 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
478 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
480 if (RegDeleteValue(hSubKey
, szPreload
) != ERROR_SUCCESS
)
482 RegCloseKey(hSubKey
);
486 RegCloseKey(hSubKey
);
490 if (RegDeleteValue(hKey
, szLayoutNum
) == ERROR_SUCCESS
)
493 UpdateRegValueNames(hKey
);
505 TCHAR szLCID
[CCH_LAYOUT_ID
+ 1], szLayoutNum
[CCH_ULONG_DEC
+ 1];
509 if (IsLayoutSelected() != -1)
511 ZeroMemory(&item
, sizeof(LVITEM
));
513 item
.mask
= LVIF_PARAM
;
514 item
.iItem
= IsLayoutSelected();
516 (VOID
) ListView_GetItem(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), &item
);
518 LayoutNum
= (INT
) item
.lParam
;
519 _ultot(LayoutNum
, szLayoutNum
, 10);
521 if (GetLayoutID(szLayoutNum
, szLCID
))
523 hKl
= LoadKeyboardLayout(szLCID
, KLF_ACTIVATE
);
524 SystemParametersInfo(SPI_SETDEFAULTINPUTLANG
, 0, &hKl
, SPIF_SENDWININICHANGE
);
530 SaveInputLang(HWND hDlg
)
533 TCHAR szLayoutID
[CCH_LAYOUT_ID
+ 1], szLayoutNum
[CCH_ULONG_DEC
+ 1],
534 szPreload
[CCH_LAYOUT_ID
+ 1], LangID
[CCH_LAYOUT_ID
+ 1], szMessage
[MAX_PATH
],
535 Lang
[MAX_PATH
], SubPath
[MAX_PATH
];
541 iLayout
= SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
), CB_GETCURSEL
, 0, 0);
542 if (iLayout
== CB_ERR
) return;
544 pts
= (PTSTR
) SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
), CB_GETITEMDATA
, iLayout
, 0);
546 _ultot(OldLayoutNum
, szLayoutNum
, 10);
547 if (!GetLayoutID(szLayoutNum
, szLayoutID
)) return;
549 // if old layout = selected layout
550 if (_tcscmp(szLayoutID
, pts
) == 0) return;
552 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
553 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
555 dwSize
= sizeof(szPreload
);
556 if (RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
) != ERROR_SUCCESS
)
562 langid
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
563 GetLocaleInfo(langid
, LOCALE_ILANGUAGE
, Lang
, sizeof(Lang
) / sizeof(TCHAR
));
564 wsprintf(LangID
, _T("0000%s"), Lang
);
566 if (IsLayoutExists(pts
, LangID
))
568 LoadString(hApplet
, IDS_LAYOUT_EXISTS
, szMessage
, sizeof(szMessage
) / sizeof(TCHAR
));
569 MessageBox(hDlg
, szMessage
, NULL
, MB_OK
| MB_ICONINFORMATION
);
575 if (szPreload
[0] == 'd')
577 if (_tcscmp(LangID
, pts
) == 0)
579 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
580 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
582 if (RegDeleteValue(hSubKey
, szPreload
) != ERROR_SUCCESS
)
584 RegCloseKey(hSubKey
);
588 RegCloseKey(hSubKey
);
590 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)pts
,
591 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
596 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
597 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
599 RegSetValueEx(hSubKey
, szPreload
, 0, REG_SZ
, (LPBYTE
)pts
,
600 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
602 RegCloseKey(hSubKey
);
608 if (_tcscmp(LangID
, pts
) == 0)
610 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)pts
,
611 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
615 if (RegCreateKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0, NULL
,
616 REG_OPTION_NON_VOLATILE
, KEY_ALL_ACCESS
,
617 NULL
, &hSubKey
, NULL
) == ERROR_SUCCESS
)
619 wsprintf(SubPath
, _T("d%03d%s"), GetLayoutCount(Lang
)-1, Lang
);
621 RegSetValueEx(hSubKey
, SubPath
, 0, REG_SZ
, (LPBYTE
)pts
,
622 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
624 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)SubPath
,
625 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
627 RegCloseKey(hSubKey
);
637 InitInputLangPropDlg(HWND hDlg
)
642 TCHAR szLayoutNum
[10 + 1], szPreload
[CCH_LAYOUT_ID
+ 1],
643 szTmp
[CCH_LAYOUT_ID
+ 1], szName
[MAX_PATH
];
647 ZeroMemory(&item
, sizeof(LVITEM
));
649 item
.mask
= LVIF_PARAM
;
650 item
.iItem
= IsLayoutSelected();
652 (VOID
) ListView_GetItem(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), &item
);
653 LayoutNum
= (INT
) item
.lParam
;
654 OldLayoutNum
= LayoutNum
;
656 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
657 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
659 _ultot(LayoutNum
, szLayoutNum
, 10);
661 dwSize
= sizeof(szPreload
);
662 RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
664 langid
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
665 GetLocaleInfo(langid
, LOCALE_SLANGUAGE
, (LPTSTR
)szName
, sizeof(szName
) / sizeof(TCHAR
));
666 SetWindowText(GetDlgItem(hDlg
, IDC_INPUT_LANG_STR
), szName
);
668 if (szPreload
[0] == 'd')
670 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
671 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
673 if (RegQueryValueEx(hSubKey
, szPreload
, NULL
, NULL
, (LPBYTE
)szTmp
, &dwSize
) != ERROR_SUCCESS
)
675 RegCloseKey(hSubKey
);
679 lstrcpy(szPreload
, szTmp
);
680 RegCloseKey(hSubKey
);
684 if (GetLayoutName(szPreload
, szName
))
686 SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
),
687 CB_SELECTSTRING
, (WPARAM
)-1, (LPARAM
)szName
);
694 InputLangPropDlgProc(HWND hDlg
,
699 UNREFERENCED_PARAMETER(lParam
);
704 CreateKeyboardLayoutList(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
));
705 InitInputLangPropDlg(hDlg
);
709 switch (LOWORD(wParam
))
714 EndDialog(hDlg
,LOWORD(wParam
));
718 EndDialog(hDlg
,LOWORD(wParam
));
727 /* Property page dialog callback */
729 SettingPageProc(HWND hwndDlg
,UINT uMsg
,WPARAM wParam
,LPARAM lParam
)
731 UNREFERENCED_PARAMETER(lParam
);
739 MainDlgWnd
= hwndDlg
;
740 AddListColumn(hwndDlg
);
741 (VOID
) ListView_SetExtendedListViewStyle(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
),
742 LVS_EX_FULLROWSELECT
);
743 hImgList
= ImageList_Create(16, 16, ILC_COLOR8
| ILC_MASK
, 0, 1);
744 InitLangList(hwndDlg
, hImgList
);
745 (VOID
) ListView_SetImageList(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), hImgList
, LVSIL_SMALL
);
750 switch (LOWORD(wParam
))
757 switch (LOWORD(wParam
))
759 case IDC_REMOVE_BUTTON
:
763 case IDC_KEY_SET_BTN
:
765 MAKEINTRESOURCE(IDD_KEYSETTINGS
),
772 MAKEINTRESOURCE(IDD_ADD
),
777 case IDC_PROP_BUTTON
:
778 if (IsLayoutSelected() != -1)
780 MAKEINTRESOURCE(IDD_INPUT_LANG_PROP
),
782 InputLangPropDlgProc
);
785 case IDC_SET_DEFAULT
: