4 * FILE: dll/win32/input/settings.c
6 * PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
16 static HWND MainDlgWnd
;
17 static HIMAGELIST hImgList
;
18 // for SaveInputLang()
19 static INT OldLayoutNum
;
24 TCHAR LangName
[MAX_PATH
];
25 TCHAR LayoutName
[MAX_PATH
];
26 TCHAR ValName
[CCH_ULONG_DEC
+ 1];
27 TCHAR IndName
[MAX_PATH
];
28 } LAYOUT_ITEM
, *LPLAYOUT_ITEM
;
34 INT iIndex
= (INT
) SendMessage(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
),
35 LVM_GETNEXTITEM
, -1, LVNI_FOCUSED
);
41 IsLayoutExists(LPTSTR szLayoutID
, LPTSTR szLangID
)
44 TCHAR szPreload
[CCH_LAYOUT_ID
+ 1], szLayoutNum
[3 + 1],
45 szTmp
[CCH_LAYOUT_ID
+ 1], szOldLangID
[CCH_LAYOUT_ID
+ 1];
46 DWORD dwIndex
= 0, dwType
, dwSize
;
47 BOOL IsLangExists
= FALSE
;
50 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"),
51 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
53 dwSize
= sizeof(szLayoutNum
);
55 while (RegEnumValue(hKey
, dwIndex
, szLayoutNum
, &dwSize
, NULL
, &dwType
, NULL
, NULL
) == ERROR_SUCCESS
)
57 dwSize
= sizeof(szPreload
);
58 if (RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
) != ERROR_SUCCESS
)
64 langid
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
65 GetLocaleInfo(langid
, LOCALE_ILANGUAGE
, szTmp
, sizeof(szTmp
) / sizeof(TCHAR
));
66 wsprintf(szOldLangID
, _T("0000%s"), szTmp
);
68 if (_tcscmp(szOldLangID
, szLangID
) == 0)
73 if (szPreload
[0] == 'd')
75 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"),
76 0, KEY_QUERY_VALUE
, &hSubKey
) == ERROR_SUCCESS
)
78 dwSize
= sizeof(szTmp
);
79 RegQueryValueEx(hSubKey
, szPreload
, NULL
, NULL
, (LPBYTE
)szTmp
, &dwSize
);
81 if ((_tcscmp(szTmp
, szLayoutID
) == 0)&&(IsLangExists
))
91 if ((_tcscmp(szPreload
, szLayoutID
) == 0) && (IsLangExists
))
99 dwSize
= sizeof(szLayoutNum
);
110 CreateLayoutIcon(LPTSTR szInd
)
113 HBITMAP hBitmap
, hBmpNew
, hBmpOld
;
115 DWORD bkColor
, bkText
;
120 hdcsrc
= GetDC(NULL
);
121 hdc
= CreateCompatibleDC(hdcsrc
);
122 hBitmap
= CreateCompatibleBitmap(hdcsrc
, 16, 16);
123 ReleaseDC(NULL
, hdcsrc
);
127 hBmpNew
= CreateBitmap(16, 16, 1, 1, NULL
);
130 hBmpOld
= SelectObject(hdc
, hBitmap
);
136 bkColor
= SetBkColor(hdc
, GetSysColor(COLOR_HIGHLIGHT
));
137 bkText
= SetTextColor(hdc
, GetSysColor(COLOR_HIGHLIGHTTEXT
));
139 ExtTextOut(hdc
, rect
.left
, rect
.top
, ETO_OPAQUE
, &rect
, _T(""), 0, NULL
);
141 hFont
= CreateFont(-11, 0, 0, 0, FW_NORMAL
, FALSE
, FALSE
, FALSE
, ANSI_CHARSET
,
142 OUT_DEFAULT_PRECIS
, CLIP_DEFAULT_PRECIS
,
143 DEFAULT_QUALITY
, FF_DONTCARE
, _T("Tahoma"));
145 SelectObject(hdc
, hFont
);
146 DrawText(hdc
, _tcsupr(szInd
), 2, &rect
, DT_SINGLELINE
|DT_CENTER
|DT_VCENTER
);
147 SelectObject(hdc
, hBmpNew
);
148 PatBlt(hdc
, 0, 0, 16, 16, BLACKNESS
);
149 SelectObject(hdc
, hBmpOld
);
151 IconInfo
.hbmColor
= hBitmap
;
152 IconInfo
.hbmMask
= hBmpNew
;
153 IconInfo
.fIcon
= TRUE
;
155 hIcon
= CreateIconIndirect(&IconInfo
);
157 DeleteObject(hBmpNew
);
158 DeleteObject(hBmpOld
);
164 DeleteObject(hBitmap
);
170 GetLayoutID(LPTSTR szLayoutNum
, LPTSTR szLCID
)
175 TCHAR szTempLCID
[CCH_LAYOUT_ID
+ 1];
178 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
180 dwBufLen
= sizeof(szTempLCID
);
181 dwRes
= RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szTempLCID
, &dwBufLen
);
183 if (dwRes
!= ERROR_SUCCESS
)
192 // Look for a substitude of this layout
193 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
195 dwBufLen
= sizeof(szTempLCID
);
197 if (RegQueryValueEx(hKey
, szTempLCID
, NULL
, NULL
, (LPBYTE
)szLCID
, &dwBufLen
) != ERROR_SUCCESS
)
199 // No substitute found, then use the old LCID
200 lstrcpy(szLCID
, szTempLCID
);
207 // Substitutes key couldn't be opened, so use the old LCID
208 lstrcpy(szLCID
, szTempLCID
);
215 GetLayoutName(LPCTSTR szLCID
, LPTSTR szName
)
219 TCHAR szBuf
[MAX_PATH
], szDispName
[MAX_PATH
], szIndex
[MAX_PATH
], szPath
[MAX_PATH
];
223 wsprintf(szBuf
, _T("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts\\%s"), szLCID
);
225 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE
, (LPCTSTR
)szBuf
, 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
227 dwBufLen
= sizeof(szBuf
);
229 if (RegQueryValueEx(hKey
, _T("Layout Display Name"), NULL
, NULL
, (LPBYTE
)szDispName
, &dwBufLen
) == ERROR_SUCCESS
)
231 if (szDispName
[0] == '@')
233 for (i
= 0; i
< _tcslen(szDispName
); i
++)
235 if ((szDispName
[i
] == ',') && (szDispName
[i
+ 1] == '-'))
237 for (j
= i
+ 2, k
= 0; j
< _tcslen(szDispName
)+1; j
++, k
++)
239 szIndex
[k
] = szDispName
[j
];
241 szDispName
[i
- 1] = '\0';
244 else szDispName
[i
] = szDispName
[i
+ 1];
247 if (ExpandEnvironmentStrings(szDispName
, szPath
, MAX_PATH
))
249 hLib
= LoadLibrary(szPath
);
252 if (LoadString(hLib
, _ttoi(szIndex
), szPath
, sizeof(szPath
) / sizeof(TCHAR
)) != 0)
254 _tcscpy(szName
, szPath
);
264 dwBufLen
= sizeof(szBuf
);
266 if (RegQueryValueEx(hKey
, _T("Layout Text"), NULL
, NULL
, (LPBYTE
)szName
, &dwBufLen
) == ERROR_SUCCESS
)
277 AddListColumn(HWND hWnd
)
280 TCHAR szBuf
[MAX_PATH
];
281 HWND hList
= GetDlgItem(hWnd
, IDC_KEYLAYOUT_LIST
);
283 ZeroMemory(&column
, sizeof(LV_COLUMN
));
284 column
.mask
= LVCF_FMT
| LVCF_TEXT
| LVCF_WIDTH
| LVCF_SUBITEM
;
286 column
.fmt
= LVCFMT_LEFT
;
288 LoadString(hApplet
, IDS_LANGUAGE
, szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
289 column
.pszText
= szBuf
;
291 (VOID
) ListView_InsertColumn(hList
, 0, &column
);
293 column
.fmt
= LVCFMT_RIGHT
;
296 LoadString(hApplet
, IDS_LAYOUT
, szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
297 column
.pszText
= szBuf
;
298 (VOID
) ListView_InsertColumn(hList
, 1, &column
);
302 InitLangList(HWND hWnd
)
305 TCHAR szBuf
[MAX_PATH
], szPreload
[CCH_LAYOUT_ID
+ 1], szSub
[CCH_LAYOUT_ID
+ 1];
307 DWORD dwIndex
= 0, dwType
, dwSize
;
309 HWND hList
= GetDlgItem(hWnd
, IDC_KEYLAYOUT_LIST
);
312 item
.mask
= LVIF_TEXT
| LVIF_PARAM
| LVIF_STATE
| LVIF_IMAGE
;
314 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"),
315 0, KEY_QUERY_VALUE
, &hKey
) == ERROR_SUCCESS
)
317 dwSize
= sizeof(lItem
.ValName
);
319 while (RegEnumValue(hKey
, dwIndex
, lItem
.ValName
, &dwSize
, NULL
, &dwType
, NULL
, NULL
) == ERROR_SUCCESS
)
321 dwSize
= sizeof(szPreload
);
322 RegQueryValueEx(hKey
, lItem
.ValName
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
324 lItem
.LangId
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
326 GetLocaleInfo(lItem
.LangId
, LOCALE_SISO639LANGNAME
, (LPTSTR
)szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
327 lstrcpy(lItem
.IndName
, _tcsupr(szBuf
));
328 imgIndex
= ImageList_AddIcon(hImgList
, CreateLayoutIcon(lItem
.IndName
));
330 GetLocaleInfo(lItem
.LangId
, LOCALE_SLANGUAGE
, (LPTSTR
)szBuf
, sizeof(szBuf
) / sizeof(TCHAR
));
331 lstrcpy(lItem
.LangName
, szBuf
);
333 // Does this keyboard layout have a substitute?
334 // Then add the substitute instead of the Layout ID
335 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"),
336 0, KEY_QUERY_VALUE
, &hSubKey
) == ERROR_SUCCESS
)
338 dwSize
= sizeof(szSub
);
340 if (RegQueryValueEx(hSubKey
, szPreload
, NULL
, NULL
, (LPBYTE
)szSub
, &dwSize
) == ERROR_SUCCESS
)
342 lstrcpy(szPreload
, szSub
);
345 RegCloseKey(hSubKey
);
348 GetLayoutName(szPreload
, lItem
.LayoutName
);
350 item
.pszText
= lItem
.LangName
;
351 item
.iItem
= (INT
) dwIndex
;
352 item
.lParam
= (LPARAM
)_ttoi(lItem
.ValName
);
353 item
.iImage
= imgIndex
;
354 i
= ListView_InsertItem(hList
, &item
);
356 ListView_SetItemText(hList
, i
, 1, lItem
.LayoutName
);
360 if (lstrcmp(lItem
.ValName
, _T("1")) == 0)
362 (VOID
) ListView_SetHotItem(hList
, i
);
371 UpdateLayoutsList(VOID
)
373 (VOID
) ImageList_Destroy(hImgList
);
374 (VOID
) ListView_DeleteAllItems(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
));
375 hImgList
= ImageList_Create(16, 16, ILC_COLOR8
| ILC_MASK
, 0, 1);
376 InitLangList(MainDlgWnd
);
377 (VOID
) ListView_SetImageList(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), hImgList
, LVSIL_SMALL
);
380 typedef struct _REG_KB_ENTRY_
384 TCHAR szData
[CCH_LAYOUT_ID
+ 1];
388 /* Layouts were deleted so we have to order the existing ones */
390 UpdateRegValueNames(HKEY hKey
)
392 DWORD dwIndex
= 0, dwGot
= 0, dwLayoutSize
;
394 REG_KB_ENTRY
* data
= HeapAlloc(GetProcessHeap(), 0, dwSets
* sizeof(REG_KB_ENTRY
));
396 /* Get all existing entries and delete them */
397 dwLayoutSize
= sizeof(data
[0].szLayoutID
);
398 while (RegEnumValue(hKey
,
400 data
[dwGot
].szLayoutID
,
404 (PBYTE
)data
[dwGot
].szData
,
405 &data
[dwGot
].dwDataSize
) != ERROR_NO_MORE_ITEMS
)
407 if (_tcslen(data
[dwGot
].szLayoutID
) <= 2 && _tcslen(data
[dwGot
].szData
) == CCH_LAYOUT_ID
)
409 RegDeleteValue(hKey
, data
[dwGot
].szLayoutID
);
414 data
= HeapReAlloc(GetProcessHeap(), 0, data
, dwSets
* sizeof(REG_KB_ENTRY
));
418 dwLayoutSize
= sizeof(data
[0].szLayoutID
);
421 /* Set all entries with an updated value name */
422 for (dwIndex
= 0; dwIndex
< dwGot
; dwIndex
++)
424 TCHAR szNewLayoutID
[3];
426 _stprintf(szNewLayoutID
, TEXT("%u"), dwIndex
+ 1);
427 RegSetValueEx(hKey
, szNewLayoutID
, 0, data
[dwIndex
].dwType
,
428 (PBYTE
)data
[dwIndex
].szData
, data
[dwIndex
].dwDataSize
);
430 HeapFree(GetProcessHeap(), 0, data
);
436 INT iIndex
, LayoutNum
;
439 HWND hLayoutList
= GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
);
440 TCHAR szLayoutNum
[3 + 1], szTitle
[MAX_PATH
],
441 szConf
[MAX_PATH
], szPreload
[CCH_LAYOUT_ID
+ 1];
444 iIndex
= (INT
) SendMessage(hLayoutList
, LVM_GETNEXTITEM
, -1, LVNI_FOCUSED
);
448 LoadString(hApplet
, IDS_REM_QUESTION
, szConf
, sizeof(szConf
) / sizeof(TCHAR
));
449 LoadString(hApplet
, IDS_CONFIRMATION
, szTitle
, sizeof(szTitle
) / sizeof(TCHAR
));
451 if (MessageBox(MainDlgWnd
, szConf
, szTitle
, MB_YESNO
| MB_ICONQUESTION
) == IDYES
)
453 ZeroMemory(&item
, sizeof(LVITEM
));
455 item
.mask
= LVIF_PARAM
;
458 (VOID
) ListView_GetItem(hLayoutList
, &item
);
459 LayoutNum
= (INT
) item
.lParam
;
461 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
462 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
464 _ultot(LayoutNum
, szLayoutNum
, 10);
466 dwSize
= sizeof(szPreload
);
467 RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
469 if (szPreload
[0] == 'd')
471 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
472 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
474 if (RegDeleteValue(hSubKey
, szPreload
) != ERROR_SUCCESS
)
476 RegCloseKey(hSubKey
);
480 RegCloseKey(hSubKey
);
484 if (RegDeleteValue(hKey
, szLayoutNum
) == ERROR_SUCCESS
)
487 UpdateRegValueNames(hKey
);
499 TCHAR szLCID
[CCH_LAYOUT_ID
+ 1], szLayoutNum
[CCH_ULONG_DEC
+ 1];
503 if (IsLayoutSelected() != -1)
505 ZeroMemory(&item
, sizeof(LVITEM
));
507 item
.mask
= LVIF_PARAM
;
508 item
.iItem
= IsLayoutSelected();
510 (VOID
) ListView_GetItem(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), &item
);
512 LayoutNum
= (INT
) item
.lParam
;
513 _ultot(LayoutNum
, szLayoutNum
, 10);
515 if (GetLayoutID(szLayoutNum
, szLCID
))
517 hKl
= LoadKeyboardLayout(szLCID
, KLF_ACTIVATE
);
518 SystemParametersInfo(SPI_SETDEFAULTINPUTLANG
, 0, &hKl
, SPIF_SENDWININICHANGE
);
524 SaveInputLang(HWND hDlg
)
527 TCHAR szLayoutID
[CCH_LAYOUT_ID
+ 1], szLayoutNum
[CCH_ULONG_DEC
+ 1],
528 szPreload
[CCH_LAYOUT_ID
+ 1], LangID
[CCH_LAYOUT_ID
+ 1], szMessage
[MAX_PATH
],
529 Lang
[MAX_PATH
], SubPath
[MAX_PATH
];
535 iLayout
= SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
), CB_GETCURSEL
, 0, 0);
536 if (iLayout
== CB_ERR
) return;
538 pts
= (PTSTR
) SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
), CB_GETITEMDATA
, iLayout
, 0);
540 _ultot(OldLayoutNum
, szLayoutNum
, 10);
541 if (!GetLayoutID(szLayoutNum
, szLayoutID
)) return;
543 // if old layout = selected layout
544 if (_tcscmp(szLayoutID
, pts
) == 0) return;
546 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
547 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
549 dwSize
= sizeof(szPreload
);
550 if (RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
) != ERROR_SUCCESS
)
556 langid
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
557 GetLocaleInfo(langid
, LOCALE_ILANGUAGE
, Lang
, sizeof(Lang
) / sizeof(TCHAR
));
558 wsprintf(LangID
, _T("0000%s"), Lang
);
560 if (IsLayoutExists(pts
, LangID
))
562 LoadString(hApplet
, IDS_LAYOUT_EXISTS
, szMessage
, sizeof(szMessage
) / sizeof(TCHAR
));
563 MessageBox(hDlg
, szMessage
, NULL
, MB_OK
| MB_ICONINFORMATION
);
569 if (szPreload
[0] == 'd')
571 if (_tcscmp(LangID
, pts
) == 0)
573 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
574 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
576 if (RegDeleteValue(hSubKey
, szPreload
) != ERROR_SUCCESS
)
578 RegCloseKey(hSubKey
);
582 RegCloseKey(hSubKey
);
584 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)pts
,
585 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
590 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
591 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
593 RegSetValueEx(hSubKey
, szPreload
, 0, REG_SZ
, (LPBYTE
)pts
,
594 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
596 RegCloseKey(hSubKey
);
602 if (_tcscmp(LangID
, pts
) == 0)
604 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)pts
,
605 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
609 if (RegCreateKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0, NULL
,
610 REG_OPTION_NON_VOLATILE
, KEY_ALL_ACCESS
,
611 NULL
, &hSubKey
, NULL
) == ERROR_SUCCESS
)
613 wsprintf(SubPath
, _T("d%03d%s"), GetLayoutCount(Lang
)-1, Lang
);
615 RegSetValueEx(hSubKey
, SubPath
, 0, REG_SZ
, (LPBYTE
)pts
,
616 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
618 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)SubPath
,
619 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
621 RegCloseKey(hSubKey
);
631 InitInputLangPropDlg(HWND hDlg
)
636 TCHAR szLayoutNum
[10 + 1], szPreload
[CCH_LAYOUT_ID
+ 1],
637 szTmp
[CCH_LAYOUT_ID
+ 1], szName
[MAX_PATH
];
641 ZeroMemory(&item
, sizeof(LVITEM
));
643 item
.mask
= LVIF_PARAM
;
644 item
.iItem
= IsLayoutSelected();
646 (VOID
) ListView_GetItem(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), &item
);
647 LayoutNum
= (INT
) item
.lParam
;
648 OldLayoutNum
= LayoutNum
;
650 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
651 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
653 _ultot(LayoutNum
, szLayoutNum
, 10);
655 dwSize
= sizeof(szPreload
);
656 RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
658 langid
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
659 GetLocaleInfo(langid
, LOCALE_SLANGUAGE
, (LPTSTR
)szName
, sizeof(szName
) / sizeof(TCHAR
));
660 SetWindowText(GetDlgItem(hDlg
, IDC_INPUT_LANG_STR
), szName
);
662 if (szPreload
[0] == 'd')
664 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
665 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
667 if (RegQueryValueEx(hSubKey
, szPreload
, NULL
, NULL
, (LPBYTE
)szTmp
, &dwSize
) != ERROR_SUCCESS
)
669 RegCloseKey(hSubKey
);
673 lstrcpy(szPreload
, szTmp
);
674 RegCloseKey(hSubKey
);
678 if (GetLayoutName(szPreload
, szName
))
680 SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
),
681 CB_SELECTSTRING
, (WPARAM
)-1, (LPARAM
)szName
);
688 InputLangPropDlgProc(HWND hDlg
,
693 UNREFERENCED_PARAMETER(lParam
);
698 CreateKeyboardLayoutList(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
));
699 InitInputLangPropDlg(hDlg
);
703 switch (LOWORD(wParam
))
708 EndDialog(hDlg
,LOWORD(wParam
));
712 EndDialog(hDlg
,LOWORD(wParam
));
721 /* Property page dialog callback */
723 SettingPageProc(HWND hwndDlg
,UINT uMsg
,WPARAM wParam
,LPARAM lParam
)
725 UNREFERENCED_PARAMETER(lParam
);
731 MainDlgWnd
= hwndDlg
;
732 AddListColumn(hwndDlg
);
733 (VOID
) ListView_SetExtendedListViewStyle(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
),
734 LVS_EX_FULLROWSELECT
);
735 hImgList
= ImageList_Create(16, 16, ILC_COLOR8
| ILC_MASK
, 0, 1);
736 InitLangList(hwndDlg
);
737 (VOID
) ListView_SetImageList(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), hImgList
, LVSIL_SMALL
);
742 switch (LOWORD(wParam
))
749 switch (LOWORD(wParam
))
751 case IDC_REMOVE_BUTTON
:
755 case IDC_KEY_SET_BTN
:
757 MAKEINTRESOURCE(IDD_KEYSETTINGS
),
764 MAKEINTRESOURCE(IDD_ADD
),
769 case IDC_PROP_BUTTON
:
770 if (IsLayoutSelected() != -1)
772 MAKEINTRESOURCE(IDD_INPUT_LANG_PROP
),
774 InputLangPropDlgProc
);
777 case IDC_SET_DEFAULT
:
784 (VOID
) ImageList_Destroy(hImgList
);