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
;
117 hdcsrc
= GetDC(NULL
);
118 hdc
= CreateCompatibleDC(hdcsrc
);
119 hBitmap
= CreateCompatibleBitmap(hdcsrc
, 16, 16);
120 ReleaseDC(NULL
, hdcsrc
);
124 hBmpNew
= CreateBitmap(16, 16, 1, 1, NULL
);
127 hBmpOld
= SelectObject(hdc
, hBitmap
);
133 SetBkColor(hdc
, GetSysColor(COLOR_HIGHLIGHT
));
134 SetTextColor(hdc
, GetSysColor(COLOR_HIGHLIGHTTEXT
));
136 ExtTextOut(hdc
, rect
.left
, rect
.top
, ETO_OPAQUE
, &rect
, _T(""), 0, NULL
);
138 hFont
= CreateFont(-11, 0, 0, 0, FW_NORMAL
, FALSE
, FALSE
, FALSE
, ANSI_CHARSET
,
139 OUT_DEFAULT_PRECIS
, CLIP_DEFAULT_PRECIS
,
140 DEFAULT_QUALITY
, FF_DONTCARE
, _T("Tahoma"));
142 SelectObject(hdc
, hFont
);
143 DrawText(hdc
, _tcsupr(szInd
), 2, &rect
, DT_SINGLELINE
|DT_CENTER
|DT_VCENTER
);
144 SelectObject(hdc
, hBmpNew
);
145 PatBlt(hdc
, 0, 0, 16, 16, BLACKNESS
);
146 SelectObject(hdc
, hBmpOld
);
148 IconInfo
.hbmColor
= hBitmap
;
149 IconInfo
.hbmMask
= hBmpNew
;
150 IconInfo
.fIcon
= TRUE
;
152 hIcon
= CreateIconIndirect(&IconInfo
);
154 DeleteObject(hBmpNew
);
155 DeleteObject(hBmpOld
);
161 DeleteObject(hBitmap
);
167 GetLayoutID(LPTSTR szLayoutNum
, LPTSTR szLCID
)
172 TCHAR szTempLCID
[CCH_LAYOUT_ID
+ 1];
175 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
177 dwBufLen
= sizeof(szTempLCID
);
178 dwRes
= RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szTempLCID
, &dwBufLen
);
180 if (dwRes
!= ERROR_SUCCESS
)
189 // Look for a substitude of this layout
190 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
192 dwBufLen
= sizeof(szTempLCID
);
194 if (RegQueryValueEx(hKey
, szTempLCID
, NULL
, NULL
, (LPBYTE
)szLCID
, &dwBufLen
) != ERROR_SUCCESS
)
196 // No substitute found, then use the old LCID
197 lstrcpy(szLCID
, szTempLCID
);
204 // Substitutes key couldn't be opened, so use the old LCID
205 lstrcpy(szLCID
, szTempLCID
);
212 GetLayoutName(LPCTSTR szLCID
, LPTSTR szName
)
216 TCHAR szBuf
[MAX_PATH
], szDispName
[MAX_PATH
], szIndex
[MAX_PATH
], szPath
[MAX_PATH
];
220 wsprintf(szBuf
, _T("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szLCID
);
222 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE
, (LPCTSTR
)szBuf
, 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
224 dwBufLen
= sizeof(szBuf
);
226 if (RegQueryValueEx(hKey
, _T("Layout Display Name"), NULL
, NULL
, (LPBYTE
)szDispName
, &dwBufLen
) == ERROR_SUCCESS
)
228 if (szDispName
[0] == '@')
230 for (i
= 0; i
< _tcslen(szDispName
); i
++)
232 if ((szDispName
[i
] == ',') && (szDispName
[i
+ 1] == '-'))
234 for (j
= i
+ 2, k
= 0; j
< _tcslen(szDispName
)+1; j
++, k
++)
236 szIndex
[k
] = szDispName
[j
];
238 szDispName
[i
- 1] = '\0';
241 else szDispName
[i
] = szDispName
[i
+ 1];
244 if (ExpandEnvironmentStrings(szDispName
, szPath
, MAX_PATH
))
246 hLib
= LoadLibrary(szPath
);
249 if (LoadString(hLib
, _ttoi(szIndex
), szPath
, sizeof(szPath
) / sizeof(TCHAR
)) != 0)
251 _tcscpy(szName
, szPath
);
261 dwBufLen
= sizeof(szBuf
);
263 if (RegQueryValueEx(hKey
, _T("Layout Text"), NULL
, NULL
, (LPBYTE
)szName
, &dwBufLen
) == ERROR_SUCCESS
)
274 AddListColumn(HWND hWnd
)
277 TCHAR szBuf
[MAX_PATH
];
278 HWND hList
= GetDlgItem(hWnd
, IDC_KEYLAYOUT_LIST
);
280 ZeroMemory(&column
, sizeof(LV_COLUMN
));
281 column
.mask
= LVCF_FMT
| LVCF_TEXT
| LVCF_WIDTH
| LVCF_SUBITEM
;
283 column
.fmt
= LVCFMT_LEFT
;
285 LoadString(hApplet
, IDS_LANGUAGE
, szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
286 column
.pszText
= szBuf
;
288 (VOID
) ListView_InsertColumn(hList
, 0, &column
);
290 column
.fmt
= LVCFMT_RIGHT
;
293 LoadString(hApplet
, IDS_LAYOUT
, szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
294 column
.pszText
= szBuf
;
295 (VOID
) ListView_InsertColumn(hList
, 1, &column
);
299 InitLangList(HWND hWnd
, HIMAGELIST hImgList
)
302 TCHAR szBuf
[MAX_PATH
], szPreload
[CCH_LAYOUT_ID
+ 1], szSub
[CCH_LAYOUT_ID
+ 1];
304 DWORD dwIndex
= 0, dwType
, dwSize
;
306 HWND hList
= GetDlgItem(hWnd
, IDC_KEYLAYOUT_LIST
);
309 item
.mask
= LVIF_TEXT
| LVIF_PARAM
| LVIF_STATE
| LVIF_IMAGE
;
311 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"),
312 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
314 dwSize
= sizeof(lItem
.ValName
);
316 while (RegEnumValue(hKey
, dwIndex
, lItem
.ValName
, &dwSize
, NULL
, &dwType
, NULL
, NULL
) == ERROR_SUCCESS
)
318 dwSize
= sizeof(szPreload
);
319 RegQueryValueEx(hKey
, lItem
.ValName
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
321 lItem
.LangId
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
323 GetLocaleInfo(lItem
.LangId
, LOCALE_SISO639LANGNAME
, (LPTSTR
)szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
324 lstrcpy(lItem
.IndName
, _tcsupr(szBuf
));
325 imgIndex
= ImageList_AddIcon(hImgList
, CreateLayoutIcon(lItem
.IndName
));
327 GetLocaleInfo(lItem
.LangId
, LOCALE_SLANGUAGE
, (LPTSTR
)szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
328 lstrcpy(lItem
.LangName
, szBuf
);
330 // Does this keyboard layout have a substitute?
331 // Then add the substitute instead of the Layout ID
332 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"),
333 0, KEY_QUERY_VALUE
, &hSubKey
) == ERROR_SUCCESS
)
335 dwSize
= sizeof(szSub
);
337 if (RegQueryValueEx(hSubKey
, szPreload
, NULL
, NULL
, (LPBYTE
)szSub
, &dwSize
) == ERROR_SUCCESS
)
339 lstrcpy(szPreload
, szSub
);
342 RegCloseKey(hSubKey
);
345 GetLayoutName(szPreload
, lItem
.LayoutName
);
347 item
.pszText
= lItem
.LangName
;
348 item
.iItem
= (INT
) dwIndex
;
349 item
.lParam
= (LPARAM
)_ttoi(lItem
.ValName
);
350 item
.iImage
= imgIndex
;
351 i
= ListView_InsertItem(hList
, &item
);
353 ListView_SetItemText(hList
, i
, 1, lItem
.LayoutName
);
357 if (lstrcmp(lItem
.ValName
, _T("1")) == 0)
359 (VOID
) ListView_SetHotItem(hList
, i
);
368 UpdateLayoutsList(VOID
)
373 (VOID
) ListView_DeleteAllItems(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
));
376 hImgList
= ImageList_Create(16, 16, ILC_COLOR8
| ILC_MASK
, 0, 1);
377 InitLangList(MainDlgWnd
, hImgList
);
378 hImgList
= ListView_SetImageList(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), hImgList
, LVSIL_SMALL
);
380 /* Destroy old image list */
382 (VOID
) ImageList_Destroy(hImgList
);
385 typedef struct _REG_KB_ENTRY_
389 TCHAR szData
[CCH_LAYOUT_ID
+ 1];
393 /* Layouts were deleted so we have to order the existing ones */
395 UpdateRegValueNames(HKEY hKey
)
397 DWORD dwIndex
= 0, dwGot
= 0, dwLayoutSize
;
399 REG_KB_ENTRY
* data
= HeapAlloc(GetProcessHeap(), 0, dwSets
* sizeof(REG_KB_ENTRY
));
401 /* Get all existing entries and delete them */
402 dwLayoutSize
= sizeof(data
[0].szLayoutID
);
403 while (RegEnumValue(hKey
,
405 data
[dwGot
].szLayoutID
,
409 (PBYTE
)data
[dwGot
].szData
,
410 &data
[dwGot
].dwDataSize
) != ERROR_NO_MORE_ITEMS
)
412 if (_tcslen(data
[dwGot
].szLayoutID
) <= 2 && _tcslen(data
[dwGot
].szData
) == CCH_LAYOUT_ID
)
414 RegDeleteValue(hKey
, data
[dwGot
].szLayoutID
);
419 data
= HeapReAlloc(GetProcessHeap(), 0, data
, dwSets
* sizeof(REG_KB_ENTRY
));
423 dwLayoutSize
= sizeof(data
[0].szLayoutID
);
426 /* Set all entries with an updated value name */
427 for (dwIndex
= 0; dwIndex
< dwGot
; dwIndex
++)
429 TCHAR szNewLayoutID
[3];
431 _stprintf(szNewLayoutID
, TEXT("%u"), dwIndex
+ 1);
432 RegSetValueEx(hKey
, szNewLayoutID
, 0, data
[dwIndex
].dwType
,
433 (PBYTE
)data
[dwIndex
].szData
, data
[dwIndex
].dwDataSize
);
435 HeapFree(GetProcessHeap(), 0, data
);
441 INT iIndex
, LayoutNum
;
444 HWND hLayoutList
= GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
);
445 TCHAR szLayoutNum
[3 + 1], szTitle
[MAX_PATH
],
446 szConf
[MAX_PATH
], szPreload
[CCH_LAYOUT_ID
+ 1];
449 iIndex
= (INT
) SendMessage(hLayoutList
, LVM_GETNEXTITEM
, -1, LVNI_FOCUSED
);
453 LoadString(hApplet
, IDS_REM_QUESTION
, szConf
, sizeof(szConf
) / sizeof(TCHAR
));
454 LoadString(hApplet
, IDS_CONFIRMATION
, szTitle
, sizeof(szTitle
) / sizeof(TCHAR
));
456 if (MessageBox(MainDlgWnd
, szConf
, szTitle
, MB_YESNO
| MB_ICONQUESTION
) == IDYES
)
458 ZeroMemory(&item
, sizeof(LVITEM
));
460 item
.mask
= LVIF_PARAM
;
463 (VOID
) ListView_GetItem(hLayoutList
, &item
);
464 LayoutNum
= (INT
) item
.lParam
;
466 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
467 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
469 _ultot(LayoutNum
, szLayoutNum
, 10);
471 dwSize
= sizeof(szPreload
);
472 RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
474 if (szPreload
[0] == 'd')
476 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
477 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
479 if (RegDeleteValue(hSubKey
, szPreload
) != ERROR_SUCCESS
)
481 RegCloseKey(hSubKey
);
485 RegCloseKey(hSubKey
);
489 if (RegDeleteValue(hKey
, szLayoutNum
) == ERROR_SUCCESS
)
492 UpdateRegValueNames(hKey
);
504 TCHAR szLCID
[CCH_LAYOUT_ID
+ 1], szLayoutNum
[CCH_ULONG_DEC
+ 1];
508 if (IsLayoutSelected() != -1)
510 ZeroMemory(&item
, sizeof(LVITEM
));
512 item
.mask
= LVIF_PARAM
;
513 item
.iItem
= IsLayoutSelected();
515 (VOID
) ListView_GetItem(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), &item
);
517 LayoutNum
= (INT
) item
.lParam
;
518 _ultot(LayoutNum
, szLayoutNum
, 10);
520 if (GetLayoutID(szLayoutNum
, szLCID
))
522 hKl
= LoadKeyboardLayout(szLCID
, KLF_ACTIVATE
);
523 SystemParametersInfo(SPI_SETDEFAULTINPUTLANG
, 0, &hKl
, SPIF_SENDWININICHANGE
);
529 SaveInputLang(HWND hDlg
)
532 TCHAR szLayoutID
[CCH_LAYOUT_ID
+ 1], szLayoutNum
[CCH_ULONG_DEC
+ 1],
533 szPreload
[CCH_LAYOUT_ID
+ 1], LangID
[CCH_LAYOUT_ID
+ 1], szMessage
[MAX_PATH
],
534 Lang
[MAX_PATH
], SubPath
[MAX_PATH
];
540 iLayout
= SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
), CB_GETCURSEL
, 0, 0);
541 if (iLayout
== CB_ERR
) return;
543 pts
= (PTSTR
) SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
), CB_GETITEMDATA
, iLayout
, 0);
545 _ultot(OldLayoutNum
, szLayoutNum
, 10);
546 if (!GetLayoutID(szLayoutNum
, szLayoutID
)) return;
548 // If old layout = selected layout
549 if (_tcscmp(szLayoutID
, pts
) == 0) return;
551 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
552 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
554 dwSize
= sizeof(szPreload
);
555 if (RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
) != ERROR_SUCCESS
)
561 langid
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
562 GetLocaleInfo(langid
, LOCALE_ILANGUAGE
, Lang
, sizeof(Lang
) / sizeof(TCHAR
));
563 wsprintf(LangID
, _T("0000%s"), Lang
);
565 if (IsLayoutExists(pts
, LangID
))
567 LoadString(hApplet
, IDS_LAYOUT_EXISTS
, szMessage
, sizeof(szMessage
) / sizeof(TCHAR
));
568 MessageBox(hDlg
, szMessage
, NULL
, MB_OK
| MB_ICONINFORMATION
);
574 if (szPreload
[0] == 'd')
576 if (_tcscmp(LangID
, pts
) == 0)
578 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
579 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
581 if (RegDeleteValue(hSubKey
, szPreload
) != ERROR_SUCCESS
)
583 RegCloseKey(hSubKey
);
587 RegCloseKey(hSubKey
);
589 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)pts
,
590 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
595 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
596 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
598 RegSetValueEx(hSubKey
, szPreload
, 0, REG_SZ
, (LPBYTE
)pts
,
599 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
601 RegCloseKey(hSubKey
);
607 if (_tcscmp(LangID
, pts
) == 0)
609 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)pts
,
610 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
614 if (RegCreateKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0, NULL
,
615 REG_OPTION_NON_VOLATILE
, KEY_ALL_ACCESS
,
616 NULL
, &hSubKey
, NULL
) == ERROR_SUCCESS
)
618 wsprintf(SubPath
, _T("d%03d%s"), GetLayoutCount(Lang
)-1, Lang
);
620 RegSetValueEx(hSubKey
, SubPath
, 0, REG_SZ
, (LPBYTE
)pts
,
621 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
623 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)SubPath
,
624 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
626 RegCloseKey(hSubKey
);
636 InitInputLangPropDlg(HWND hDlg
)
641 TCHAR szLayoutNum
[10 + 1], szPreload
[CCH_LAYOUT_ID
+ 1],
642 szTmp
[CCH_LAYOUT_ID
+ 1], szName
[MAX_PATH
];
646 ZeroMemory(&item
, sizeof(LVITEM
));
648 item
.mask
= LVIF_PARAM
;
649 item
.iItem
= IsLayoutSelected();
651 (VOID
) ListView_GetItem(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), &item
);
652 LayoutNum
= (INT
) item
.lParam
;
653 OldLayoutNum
= LayoutNum
;
655 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
656 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
658 _ultot(LayoutNum
, szLayoutNum
, 10);
660 dwSize
= sizeof(szPreload
);
661 RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
663 langid
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
664 GetLocaleInfo(langid
, LOCALE_SLANGUAGE
, (LPTSTR
)szName
, sizeof(szName
) / sizeof(TCHAR
));
665 SetWindowText(GetDlgItem(hDlg
, IDC_INPUT_LANG_STR
), szName
);
667 if (szPreload
[0] == 'd')
669 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
670 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
672 if (RegQueryValueEx(hSubKey
, szPreload
, NULL
, NULL
, (LPBYTE
)szTmp
, &dwSize
) != ERROR_SUCCESS
)
674 RegCloseKey(hSubKey
);
678 lstrcpy(szPreload
, szTmp
);
679 RegCloseKey(hSubKey
);
683 if (GetLayoutName(szPreload
, szName
))
685 SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
),
686 CB_SELECTSTRING
, (WPARAM
)-1, (LPARAM
)szName
);
693 InputLangPropDlgProc(HWND hDlg
,
698 UNREFERENCED_PARAMETER(lParam
);
703 CreateKeyboardLayoutList(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
));
704 InitInputLangPropDlg(hDlg
);
708 switch (LOWORD(wParam
))
713 EndDialog(hDlg
,LOWORD(wParam
));
717 EndDialog(hDlg
,LOWORD(wParam
));
726 /* Property page dialog callback */
728 SettingPageProc(HWND hwndDlg
,UINT uMsg
,WPARAM wParam
,LPARAM lParam
)
730 UNREFERENCED_PARAMETER(lParam
);
738 MainDlgWnd
= hwndDlg
;
739 AddListColumn(hwndDlg
);
740 (VOID
) ListView_SetExtendedListViewStyle(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
),
741 LVS_EX_FULLROWSELECT
);
742 hImgList
= ImageList_Create(16, 16, ILC_COLOR8
| ILC_MASK
, 0, 1);
743 InitLangList(hwndDlg
, hImgList
);
744 (VOID
) ListView_SetImageList(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), hImgList
, LVSIL_SMALL
);
749 switch (LOWORD(wParam
))
756 switch (LOWORD(wParam
))
758 case IDC_REMOVE_BUTTON
:
762 case IDC_KEY_SET_BTN
:
764 MAKEINTRESOURCE(IDD_KEYSETTINGS
),
771 MAKEINTRESOURCE(IDD_ADD
),
776 case IDC_PROP_BUTTON
:
777 if (IsLayoutSelected() != -1)
779 MAKEINTRESOURCE(IDD_INPUT_LANG_PROP
),
781 InputLangPropDlgProc
);
784 case IDC_SET_DEFAULT
: