⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btnime.cpp

📁 手机上的韩文输入法 saenaru20031212.zip
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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 + -