📄 btnime.cpp
字号:
if (idUserKeyboardMenu) {
HKEY hKey;
id = idUserKeyboardMenu;
if (!GetRegKeyHandle(TEXT("\\Keyboard"), &hKey))
return S_OK;
for (i=0;i<10;i++)
{
WCHAR achValue[256];
DWORD cchValue = 256;
DWORD retCode;
achValue[0] = '\0';
retCode = RegEnumValue(hKey, i,
achValue,
&cchValue,
NULL,
NULL,
NULL,
NULL);
if (retCode != ERROR_SUCCESS )
{
break;
MyDebugPrint((TEXT("(%d) %s\n"), i+1, achValue));
}
wstrDesc = achValue;
nstrDesc = wcslen (wstrDesc);
dwFlag = _MenuItem_GetKeyboardFlag(id);
pUserKeyboardMenu->AddMenuItem (id++,
//pUserKeyboardMenu->AddMenuItem (idUserKeyboardMenu,
dwFlag, NULL, NULL, wstrDesc, nstrDesc, NULL);
}
pUserKeyboardMenu->Release();
}
return S_OK;
}
STDAPI
CLangBarItemImeButton::OnMenuSelect (
UINT wID)
{
// if (wID >= ARRAYSIZE (c_rgMenuItems))
// return E_FAIL;
MyDebugPrint((TEXT("MenuSelect:%x\n"), wID));
if (wID == 0 || wID >= 20 ){
if (wID >= 20) wID-= 18;
if (c_rgMenuItems [wID].pfnHandler != NULL) {
c_rgMenuItems [wID].pfnHandler (wID);
//UpdateLanguageBar ();
}
} else {
_Menu_SelectKeyboard (wID);
}
return S_OK;
}
STDAPI
CLangBarItemImeButton::GetIcon (
HICON* phIcon)
{
DEBUGPRINTFEX (100, (TEXT ("CLangBarItemImeButton::GetIcon(%p)\n"), phIcon));
if (phIcon == NULL)
return E_INVALIDARG;
*phIcon = (HICON)LoadImage (hInst, TEXT ("INDIC_KEY"), IMAGE_ICON, 16, 16, 0);
return (*phIcon != NULL) ? S_OK : E_FAIL;
}
STDAPI
CLangBarItemImeButton::GetText (
BSTR* pbstrText)
{
DEBUGPRINTFEX (100, (TEXT ("CLangBarItemImeButton::GetText ()\n")));
if (pbstrText == NULL)
return E_INVALIDARG;
*pbstrText = SysAllocString (LANGBAR_ITEM_DESC);
return (*pbstrText == NULL)? E_OUTOFMEMORY : S_OK;
}
STDAPI
CLangBarItemImeButton::AdviseSink (
REFIID riid,
IUnknown* punk,
DWORD* pdwCookie)
{
DEBUGPRINTFEX (100, (TEXT ("CLangBarItemImeButton::AdviseSink (this:%p)\n"), this));
if (!IsEqualIID (IID_ITfLangBarItemSink, riid)) {
DEBUGPRINTFEX (100, (TEXT ("CONNECT_E_CANNOTCONNECT\n")));
return CONNECT_E_CANNOTCONNECT;
}
if (_pLangBarItemSink != NULL) {
DEBUGPRINTFEX (100, (TEXT ("CONNECT_E_ADVISELIMIT\n")));
return CONNECT_E_ADVISELIMIT;
}
if (punk->QueryInterface (IID_ITfLangBarItemSink, (void **)&_pLangBarItemSink) != S_OK) {
DEBUGPRINTFEX (100, (TEXT ("E_NOINTERFACE\n")));
_pLangBarItemSink = NULL;
return E_NOINTERFACE;
}
*pdwCookie = SAENARU_LANGBARITEMSINK_COOKIE;
return S_OK;
}
STDAPI
CLangBarItemImeButton::UnadviseSink (
DWORD dwCookie)
{
DEBUGPRINTFEX (100, (TEXT ("CLangBarItemImeButton::UnadviseSink ()\n")));
if (dwCookie != SAENARU_LANGBARITEMSINK_COOKIE)
return CONNECT_E_NOCONNECTION;
if (_pLangBarItemSink == NULL)
return CONNECT_E_NOCONNECTION;
_pLangBarItemSink->Release ();
_pLangBarItemSink = NULL;
return S_OK;
}
/*========================================================================*
* public function interface
*/
BOOL PASCAL
CreateItemButtonIME (
register ITfLangBarItem** ppLangBarItem)
{
if (ppLangBarItem == NULL)
return FALSE;
*ppLangBarItem = new CLangBarItemImeButton ();
return (*ppLangBarItem != NULL);
}
/*========================================================================*
* private functions
*/
void
_Menu_Help (UINT wID)
{
/* 偆?傫丄HELP 偼嶌偭偰側偄乧丅*/
return;
}
void
_Menu_Property (UINT wID)
{
register HKL hKL = GetMyHKL ();
register HWND hWnd = GetFocus ();
if (hKL == NULL)
return;
(void) ImeConfigure (hKL, hWnd, IME_CONFIG_GENERAL, NULL);
return;
}
void
_Menu_Reconversion (UINT wID)
{
register HIMC hIMC;
register DWORD dwSize;
register LPRECONVERTSTRING lpRS;
hIMC = _GetCurrentHIMC ();
if (hIMC == NULL)
return;
dwSize = (DWORD) MyImmRequestMessage (hIMC, IMR_RECONVERTSTRING, 0);
if (! dwSize)
return;
lpRS = (LPRECONVERTSTRING) GlobalAlloc (GPTR, dwSize);
lpRS->dwSize = dwSize;
if (dwSize = (DWORD) MyImmRequestMessage (hIMC, IMR_RECONVERTSTRING, (LPARAM) lpRS)) {
register LPINPUTCONTEXT lpIMC;
lpIMC = ImmLockIMC (hIMC);
if (lpIMC != NULL) {
register LPCOMPOSITIONSTRING lpCompStr;
if (ImmGetIMCCSize (lpIMC->hCompStr) < sizeof (MYCOMPSTR))
goto pass_1;
/* 曄姺儌?僪傪嫮惂揑偵壖柤擖椡儌?僪偵愝掕偡傞丅*/
lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC (lpIMC->hCompStr);
if (lpCompStr != NULL) {
//SKKSetReconvertStr (hIMC, lpIMC, lpCompStr, lpRS, TRUE); // ?
ImmUnlockIMCC (lpIMC->hCompStr);
}
pass_1:
ImmUnlockIMC (hIMC);
}
MyImmRequestMessage(hIMC, IMR_CONFIRMRECONVERTSTRING, (LPARAM)lpRS);
} else {
GlobalFree((HANDLE)lpRS);
}
return;
}
void
_Menu_SelectKeyboard (UINT wID)
{
wID--;
//dwLayoutFlag &= 0xffff0000;
//dwLayoutFlag |= wID;
dwLayoutFlag = wID;
set_keyboard(wID);
return;
}
DWORD
_MenuItem_GetKeyboardFlag (UINT wID)
{
wID--;
DEBUGPRINTFEX (100, (TEXT ("GetKeyboardFlag:%d)\n"), wID));
//if ( flag & dwLayoutFlag)
if ( wID == dwLayoutFlag)
return 1;
return 0;
}
void
_Menu_ToggleShowKeyboard (UINT wID)
{
HIMC hIMC;
DWORD dwConversion, dwSentence;
hIMC = _GetCurrentHIMC ();
if (hIMC == NULL)
return;
if (ImmGetOpenStatus (hIMC) && ImmGetConversionStatus (hIMC, &dwConversion, &dwSentence))
{
if (dwConversion & IME_CMODE_SOFTKBD)
dwConversion &= ~IME_CMODE_SOFTKBD;
else
dwConversion |= IME_CMODE_SOFTKBD;
}
ImmSetConversionStatus (hIMC, dwConversion, 0);
#if 0
register BOOL fShowKeyboardIcon = TRUE;
DWORD dwValue;
if (GetRegDwordValue (TEXT ("\\CICERO"), TEXT(REGKEY_SHOWKEYBRDICON), &dwValue))
fShowKeyboardIcon = (BOOL) dwValue;
SetRegDwordValue (TEXT ("\\CICERO"), TEXT(REGKEY_SHOWKEYBRDICON), !fShowKeyboardIcon);
#endif
return;
}
void
_Menu_ToggleDvorak (UINT wID)
{
//static HKL hkl=NULL;
if (dwImeFlag & SAENARU_DVORAK)
{
dwImeFlag &= ~SAENARU_DVORAK;
//if (hkl)
// UnloadKeyboardLayout(hkl);
//hkl=NULL;
}
else
{
dwImeFlag |= SAENARU_DVORAK;
//hkl=LoadKeyboardLayout(TEXT("00010409"),KLF_ACTIVATE);
}
return;
}
void
_Menu_ToggleOnTheSpot (UINT wID)
{
if (dwImeFlag & SAENARU_ONTHESPOT)
dwImeFlag &= ~SAENARU_ONTHESPOT;
else
dwImeFlag |= SAENARU_ONTHESPOT;
return;
}
DWORD
_MenuItem_GetNormalFlag (UINT wID)
{
return 0;
}
DWORD
_MenuItem_GetToggleDvorakFlag (UINT wID)
{
return (dwImeFlag & SAENARU_DVORAK) ? 1 : 0;
}
DWORD
_MenuItem_GetToggleOnTheSpotFlag (UINT wID)
{
return (dwImeFlag & SAENARU_ONTHESPOT) ? 0 : 1;
}
DWORD
_MenuItem_GetToggleKeyboardFlag (UINT wID)
{
HIMC hIMC;
DWORD dwConversion, dwSentence;
hIMC = _GetCurrentHIMC ();
if (hIMC == NULL)
return TF_LBI_STATUS_DISABLED;
if (ImmGetOpenStatus (hIMC) && ImmGetConversionStatus (hIMC, &dwConversion, &dwSentence))
return (dwConversion & IME_CMODE_SOFTKBD) ? TF_LBMENUF_CHECKED: 0;
else
//return TF_LBI_STATUS_DISABLED;
return 0;
#if 0
register BOOL fShowKeyboardIcon = TRUE;
DWORD dwValue;
if (GetRegDwordValue (TEXT ("\\CICERO"), TEXT(REGKEY_SHOWKEYBRDICON), &dwValue))
fShowKeyboardIcon = (BOOL) dwValue;
return (fShowKeyboardIcon)? TF_LBMENUF_CHECKED : 0;
#endif
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -