4 * FILE: dll/win32/input/settings.c
6 * PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
15 static HWND MainDlgWnd
;
16 static HIMAGELIST hImgList
;
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
)
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
)
372 (VOID
) ImageList_Destroy(hImgList
);
373 (VOID
) ListView_DeleteAllItems(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
));
374 hImgList
= ImageList_Create(16, 16, ILC_COLOR8
| ILC_MASK
, 0, 1);
375 InitLangList(MainDlgWnd
);
376 (VOID
) ListView_SetImageList(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), hImgList
, LVSIL_SMALL
);
382 INT iIndex
, LayoutNum
;
385 HWND hLayoutList
= GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
);
386 TCHAR szLayoutNum
[3 + 1], szTitle
[MAX_PATH
],
387 szConf
[MAX_PATH
], szPreload
[CCH_LAYOUT_ID
+ 1];
390 iIndex
= (INT
) SendMessage(hLayoutList
, LVM_GETNEXTITEM
, -1, LVNI_FOCUSED
);
394 LoadString(hApplet
, IDS_REM_QUESTION
, szConf
, sizeof(szConf
) / sizeof(TCHAR
));
395 LoadString(hApplet
, IDS_CONFIRMATION
, szTitle
, sizeof(szTitle
) / sizeof(TCHAR
));
397 if (MessageBox(MainDlgWnd
, szConf
, szTitle
, MB_YESNO
| MB_ICONQUESTION
) == IDYES
)
399 ZeroMemory(&item
, sizeof(LVITEM
));
401 item
.mask
= LVIF_PARAM
;
404 (VOID
) ListView_GetItem(hLayoutList
, &item
);
405 LayoutNum
= (INT
) item
.lParam
;
407 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
408 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
410 _ultot(LayoutNum
, szLayoutNum
, 10);
412 dwSize
= sizeof(szPreload
);
413 RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
415 if (szPreload
[0] == 'd')
417 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
418 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
420 if (RegDeleteValue(hSubKey
, szPreload
) != ERROR_SUCCESS
)
422 RegCloseKey(hSubKey
);
426 RegCloseKey(hSubKey
);
430 if (RegDeleteValue(hKey
, szLayoutNum
) == ERROR_SUCCESS
)
444 TCHAR szLCID
[CCH_LAYOUT_ID
+ 1], szLayoutNum
[CCH_ULONG_DEC
+ 1];
448 if (IsLayoutSelected() != -1)
450 ZeroMemory(&item
, sizeof(LVITEM
));
452 item
.mask
= LVIF_PARAM
;
453 item
.iItem
= IsLayoutSelected();
455 (VOID
) ListView_GetItem(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), &item
);
457 LayoutNum
= (INT
) item
.lParam
;
458 _ultot(LayoutNum
, szLayoutNum
, 10);
460 if (GetLayoutID(szLayoutNum
, szLCID
))
462 hKl
= LoadKeyboardLayout(szLCID
, KLF_ACTIVATE
);
463 SystemParametersInfo(SPI_SETDEFAULTINPUTLANG
, 0, &hKl
, SPIF_SENDWININICHANGE
);
469 SaveInputLang(HWND hDlg
)
472 TCHAR szLayoutID
[CCH_LAYOUT_ID
+ 1], szLayoutNum
[CCH_ULONG_DEC
+ 1],
473 szPreload
[CCH_LAYOUT_ID
+ 1], LangID
[CCH_LAYOUT_ID
+ 1], szMessage
[MAX_PATH
],
474 Lang
[MAX_PATH
], SubPath
[MAX_PATH
];
480 iLayout
= SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
), CB_GETCURSEL
, 0, 0);
481 if (iLayout
== CB_ERR
) return;
483 pts
= (PTSTR
) SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
), CB_GETITEMDATA
, iLayout
, 0);
485 _ultot(OldLayoutNum
, szLayoutNum
, 10);
486 if (!GetLayoutID(szLayoutNum
, szLayoutID
)) return;
488 // if old layout = selected layout
489 if (_tcscmp(szLayoutID
, pts
) == 0) return;
491 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
492 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
494 dwSize
= sizeof(szPreload
);
495 if (RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
) != ERROR_SUCCESS
)
501 langid
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
502 GetLocaleInfo(langid
, LOCALE_ILANGUAGE
, Lang
, sizeof(Lang
) / sizeof(TCHAR
));
503 wsprintf(LangID
, _T("0000%s"), Lang
);
505 if (IsLayoutExists(pts
, LangID
))
507 LoadString(hApplet
, IDS_LAYOUT_EXISTS
, szMessage
, sizeof(szMessage
) / sizeof(TCHAR
));
508 MessageBox(hDlg
, szMessage
, NULL
, MB_OK
| MB_ICONINFORMATION
);
514 if (szPreload
[0] == 'd')
516 if (_tcscmp(LangID
, pts
) == 0)
518 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
519 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
521 if (RegDeleteValue(hSubKey
, szPreload
) != ERROR_SUCCESS
)
523 RegCloseKey(hSubKey
);
527 RegCloseKey(hSubKey
);
529 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)pts
,
530 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
535 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
536 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
538 RegSetValueEx(hSubKey
, szPreload
, 0, REG_SZ
, (LPBYTE
)pts
,
539 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
541 RegCloseKey(hSubKey
);
547 if (_tcscmp(LangID
, pts
) == 0)
549 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)pts
,
550 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
554 if (RegCreateKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0, NULL
,
555 REG_OPTION_NON_VOLATILE
, KEY_ALL_ACCESS
,
556 NULL
, &hSubKey
, NULL
) == ERROR_SUCCESS
)
558 wsprintf(SubPath
, _T("d%03d%s"), GetLayoutCount(Lang
)-1, Lang
);
560 RegSetValueEx(hSubKey
, SubPath
, 0, REG_SZ
, (LPBYTE
)pts
,
561 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
563 RegSetValueEx(hKey
, szLayoutNum
, 0, REG_SZ
, (LPBYTE
)SubPath
,
564 (DWORD
)((CCH_LAYOUT_ID
+ 1) * sizeof(TCHAR
)));
566 RegCloseKey(hSubKey
);
576 InitInputLangPropDlg(HWND hDlg
)
581 TCHAR szLayoutNum
[10 + 1], szPreload
[CCH_LAYOUT_ID
+ 1],
582 szTmp
[CCH_LAYOUT_ID
+ 1], szName
[MAX_PATH
];
586 ZeroMemory(&item
, sizeof(LVITEM
));
588 item
.mask
= LVIF_PARAM
;
589 item
.iItem
= IsLayoutSelected();
591 (VOID
) ListView_GetItem(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), &item
);
592 LayoutNum
= (INT
) item
.lParam
;
593 OldLayoutNum
= LayoutNum
;
595 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Preload"), 0,
596 KEY_ALL_ACCESS
, &hKey
) == ERROR_SUCCESS
)
598 _ultot(LayoutNum
, szLayoutNum
, 10);
600 dwSize
= sizeof(szPreload
);
601 RegQueryValueEx(hKey
, szLayoutNum
, NULL
, NULL
, (LPBYTE
)szPreload
, &dwSize
);
603 langid
= (LANGID
)_tcstoul(szPreload
, NULL
, 16);
604 GetLocaleInfo(langid
, LOCALE_SLANGUAGE
, (LPTSTR
)szName
, sizeof(szName
) / sizeof(TCHAR
));
605 SetWindowText(GetDlgItem(hDlg
, IDC_INPUT_LANG_STR
), szName
);
607 if (szPreload
[0] == 'd')
609 if (RegOpenKeyEx(HKEY_CURRENT_USER
, _T("Keyboard Layout\\Substitutes"), 0,
610 KEY_ALL_ACCESS
, &hSubKey
) == ERROR_SUCCESS
)
612 if (RegQueryValueEx(hSubKey
, szPreload
, NULL
, NULL
, (LPBYTE
)szTmp
, &dwSize
) != ERROR_SUCCESS
)
614 RegCloseKey(hSubKey
);
618 lstrcpy(szPreload
, szTmp
);
619 RegCloseKey(hSubKey
);
623 if (GetLayoutName(szPreload
, szName
))
625 SendMessage(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
),
626 CB_SELECTSTRING
, (WPARAM
)-1, (LPARAM
)szName
);
633 InputLangPropDlgProc(HWND hDlg
,
638 UNREFERENCED_PARAMETER(lParam
);
643 CreateKeyboardLayoutList(GetDlgItem(hDlg
, IDC_KB_LAYOUT_IME_COMBO
));
644 InitInputLangPropDlg(hDlg
);
648 switch (LOWORD(wParam
))
653 EndDialog(hDlg
,LOWORD(wParam
));
657 EndDialog(hDlg
,LOWORD(wParam
));
666 /* Property page dialog callback */
668 SettingPageProc(HWND hwndDlg
,UINT uMsg
,WPARAM wParam
,LPARAM lParam
)
670 UNREFERENCED_PARAMETER(lParam
);
676 MainDlgWnd
= hwndDlg
;
677 AddListColumn(hwndDlg
);
678 (VOID
) ListView_SetExtendedListViewStyle(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
),
679 LVS_EX_FULLROWSELECT
);
680 hImgList
= ImageList_Create(16, 16, ILC_COLOR8
| ILC_MASK
, 0, 1);
681 InitLangList(hwndDlg
);
682 (VOID
) ListView_SetImageList(GetDlgItem(MainDlgWnd
, IDC_KEYLAYOUT_LIST
), hImgList
, LVSIL_SMALL
);
687 switch (LOWORD(wParam
))
694 switch (LOWORD(wParam
))
696 case IDC_REMOVE_BUTTON
:
700 case IDC_KEY_SET_BTN
:
702 MAKEINTRESOURCE(IDD_KEYSETTINGS
),
709 MAKEINTRESOURCE(IDD_ADD
),
714 case IDC_PROP_BUTTON
:
715 if (IsLayoutSelected() != -1)
717 MAKEINTRESOURCE(IDD_INPUT_LANG_PROP
),
719 InputLangPropDlgProc
);
722 case IDC_SET_DEFAULT
:
729 (VOID
) ImageList_Destroy(hImgList
);