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

📄 ui.c

📁 手机上的韩文输入法 saenaru20031212.zip
💻 C
📖 第 1 页 / 共 4 页
字号:
            //    ShowUIWindows(hWnd, FALSE);
            break;


        case WM_IME_STARTCOMPOSITION:
            //
            // Start composition! Ready to display the composition string.
            //
            lpIMC = ImmLockIMC(hUICurIMC);
            hUIExtra = (HGLOBAL)GetWindowLongPtr(hWnd,IMMGWLP_PRIVATE);
            lpUIExtra = (LPUIEXTRA)GlobalLock(hUIExtra);
            CreateCompWindow(hWnd,lpUIExtra,lpIMC );

            GlobalUnlock(hUIExtra);
            ImmUnlockIMC(hUICurIMC);
            break;
            // Windows XP notepad bug ??
            // 茄臂 IME老 版快 STARTCOMPOSITION 皋矫瘤啊 力措肺 傈崔登瘤
            // 臼绰促.

        case WM_IME_COMPOSITION:
            //
            // Update to display the composition string.
            //
            lpIMC = ImmLockIMC(hUICurIMC);
            hUIExtra = (HGLOBAL)GetWindowLongPtr(hWnd,IMMGWLP_PRIVATE);
            lpUIExtra = (LPUIEXTRA)GlobalLock(hUIExtra);
            // STARTCOMPOSITION 皋矫瘤啊 傈崔登瘤 臼绰 版快
            if (lpIMC && !(dwImeFlag & SAENARU_ONTHESPOT))
            {
                LPCOMPOSITIONSTRING lpCompStr;
                lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
                if (lpCompStr->dwCompStrLen)
                {
                      CreateCompWindow(hWnd,lpUIExtra,lpIMC );
                }
            }
            //
            MoveCompWindow(lpUIExtra,lpIMC);
            MoveCandWindow(hWnd,lpIMC,lpUIExtra, TRUE);
            GlobalUnlock(hUIExtra);
            ImmUnlockIMC(hUICurIMC);

            break;

        case WM_IME_ENDCOMPOSITION:
            //
            // Finish to display the composition string.
            //
            hUIExtra = (HGLOBAL)GetWindowLongPtr(hWnd,IMMGWLP_PRIVATE);
            lpUIExtra = (LPUIEXTRA)GlobalLock(hUIExtra);

	    //hangul_ic_init(&ic);

            HideCompWindow(lpUIExtra);
            GlobalUnlock(hUIExtra);

            break;

        case WM_IME_COMPOSITIONFULL:
            break;

        case WM_IME_SELECT:
            if (wParam)
            {
                hUIExtra = (HGLOBAL)GetWindowLongPtr(hWnd,IMMGWLP_PRIVATE);
                lpUIExtra = (LPUIEXTRA)GlobalLock(hUIExtra);
                lpUIExtra->hIMC = hUICurIMC;
                GlobalUnlock(hUIExtra);
            }
            // XXX
            //
            break;

        case WM_IME_CONTROL:
            lRet = ControlCommand(hUICurIMC, hWnd,message,wParam,lParam);
            break;


        case WM_IME_NOTIFY:
            lRet = NotifyCommand(hUICurIMC, hWnd,message,wParam,lParam);
            break;

        case WM_DESTROY:
            hUIExtra = (HGLOBAL)GetWindowLongPtr(hWnd,IMMGWLP_PRIVATE);
            lpUIExtra = (LPUIEXTRA)GlobalLock(hUIExtra);

            if (IsWindow(lpUIExtra->uiStatus.hWnd))
                DestroyWindow(lpUIExtra->uiStatus.hWnd);

            if (IsWindow(lpUIExtra->uiCand.hWnd))
                DestroyWindow(lpUIExtra->uiCand.hWnd);

            if (IsWindow(lpUIExtra->uiDefComp.hWnd))
                DestroyWindow(lpUIExtra->uiDefComp.hWnd);
#if 1
            if (IsWindow(lpUIExtra->uiSoftKbd.hWnd))
                ImmDestroySoftKeyboard(lpUIExtra->uiSoftKbd.hWnd);
#endif
            for (i = 0; i < MAXCOMPWND; i++)
            {
                if (IsWindow(lpUIExtra->uiComp[i].hWnd))
                    DestroyWindow(lpUIExtra->uiComp[i].hWnd);
            }

            if (IsWindow(lpUIExtra->uiGuide.hWnd))
                DestroyWindow(lpUIExtra->uiGuide.hWnd);

            if (lpUIExtra->hFont)
                DeleteObject(lpUIExtra->hFont);

            GlobalUnlock(hUIExtra);
            GlobalFree(hUIExtra);

            MyDebugPrint((TEXT("WM_DELETE\n")));
            UnsetHookFunc();

            break;

        case WM_UI_STATEMOVE:
            //
            // Set the position of the status window to UIExtra.
            // This message is sent by the status window.
            //
            hUIExtra = (HGLOBAL)GetWindowLongPtr(hWnd,IMMGWLP_PRIVATE);
            lpUIExtra = (LPUIEXTRA)GlobalLock(hUIExtra);
            lpUIExtra->uiStatus.pt.x = (long)LOWORD(lParam);
            lpUIExtra->uiStatus.pt.y = (long)HIWORD(lParam);
            GlobalUnlock(hUIExtra);
            break;

        case WM_UI_DEFCOMPMOVE:
            //
            // Set the position of the composition window to UIExtra.
            // This message is sent by the composition window.
            //
            hUIExtra = (HGLOBAL)GetWindowLongPtr(hWnd,IMMGWLP_PRIVATE);
            lpUIExtra = (LPUIEXTRA)GlobalLock(hUIExtra);
            if (!lpUIExtra->dwCompStyle)
            {
                lpUIExtra->uiDefComp.pt.x = (long)LOWORD(lParam);
                lpUIExtra->uiDefComp.pt.y = (long)HIWORD(lParam);
            }
            GlobalUnlock(hUIExtra);
            break;

        case WM_UI_CANDMOVE:
            //
            // Set the position of the candidate window to UIExtra.
            // This message is sent by the candidate window.
            //
            lpIMC = ImmLockIMC(hUICurIMC);
            hUIExtra = (HGLOBAL)GetWindowLongPtr(hWnd,IMMGWLP_PRIVATE);
            lpUIExtra = (LPUIEXTRA)GlobalLock(hUIExtra);
            lpUIExtra->uiCand.pt.x = (long)LOWORD(lParam);
            lpUIExtra->uiCand.pt.y = (long)HIWORD(lParam);

	    MyDebugPrint((TEXT(" * CANDMOVE %dx%d\n"),LOWORD(lParam),HIWORD(lParam)));
            //MoveCandWindow(hWnd,lpIMC,lpUIExtra,FALSE);

            ImmUnlockIMC(hUICurIMC);
            GlobalUnlock(hUIExtra);
            break;

        case WM_UI_GUIDEMOVE:
            //
            // Set the position of the status window to UIExtra.
            // This message is sent by the status window.
            //
            hUIExtra = (HGLOBAL)GetWindowLongPtr(hWnd,IMMGWLP_PRIVATE);
            lpUIExtra = (LPUIEXTRA)GlobalLock(hUIExtra);
            lpUIExtra->uiGuide.pt.x = (long)LOWORD(lParam);
            lpUIExtra->uiGuide.pt.y = (long)HIWORD(lParam);
            GlobalUnlock(hUIExtra);
            break;

        default:
            if (HIWORD(lParam) == WM_LBUTTONDOWN)
            {
                 if (hUICurIMC && IsCompStr(hUICurIMC))
                 MakeResultString(hUICurIMC,TRUE);
            }

            return DefWindowProc(hWnd,message,wParam,lParam);
    }

    return lRet;
}


int PASCAL GetCompFontHeight(LPUIEXTRA lpUIExtra)
{
    HDC hIC;
    HFONT hOldFont = 0;
    SIZE sz;

    hIC = CreateIC(TEXT("DISPLAY"),NULL,NULL,NULL);

    if (lpUIExtra->hFont)
        hOldFont = SelectObject(hIC,lpUIExtra->hFont);
    GetTextExtentPoint(hIC,TEXT("A"),1,&sz);

    if (hOldFont)
        SelectObject(hIC,hOldFont);

    DeleteDC(hIC);

    return sz.cy;
}

/**********************************************************************/
/*                                                                    */
/* NotifyCommand()                                                    */
/*                                                                    */
/* Handle WM_IME_NOTIFY messages.                                     */
/*                                                                    */
/**********************************************************************/
LONG PASCAL NotifyCommand(HIMC hUICurIMC, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    LONG lRet = 0L;
    LPINPUTCONTEXT lpIMC;
    HGLOBAL hUIExtra;
    LPUIEXTRA lpUIExtra;
    RECT rc;
    LOGFONT lf;

    if (!(lpIMC = ImmLockIMC(hUICurIMC)))
        return 0L;

    hUIExtra = (HGLOBAL)GetWindowLongPtr(hWnd,IMMGWLP_PRIVATE);
    lpUIExtra = (LPUIEXTRA)GlobalLock(hUIExtra);

    switch (wParam)
    {
        case IMN_CLOSESTATUSWINDOW:
#ifndef NO_USE_SOFTKBD
            if (IsWindow(lpUIExtra->uiSoftKbd.hWnd))
            {
                GetWindowRect(lpUIExtra->uiSoftKbd.hWnd,(LPRECT)&rc);
                lpUIExtra->uiSoftKbd.pt.x = rc.left;
                lpUIExtra->uiSoftKbd.pt.y = rc.top;
                //ShowWindow(lpUIExtra->uiSoftKbd.hWnd,SW_HIDE);
                ImmShowSoftKeyboard(lpUIExtra->uiSoftKbd.hWnd,SW_HIDE);
                lpUIExtra->uiSoftKbd.bShow = FALSE;
            }
#endif
#ifdef USE_STATUS_WIN98_XXX
            if (IsWindow(lpUIExtra->uiStatus.hWnd))
            {
                GetWindowRect(lpUIExtra->uiStatus.hWnd,(LPRECT)&rc);
                lpUIExtra->uiStatus.pt.x = rc.left;
                lpUIExtra->uiStatus.pt.y = rc.top;
                ShowWindow(lpUIExtra->uiStatus.hWnd,SW_HIDE);
                lpUIExtra->uiStatus.bShow = FALSE;
            }
#endif
        break;
        case IMN_OPENSTATUSWINDOW:
#ifndef NO_USE_SOFTKBD
            if (lpUIExtra->uiSoftKbd.pt.x == -1)
            {
                GetWindowRect(lpIMC->hWnd,&rc);
                lpUIExtra->uiSoftKbd.pt.x = rc.right + 1;
                lpUIExtra->uiSoftKbd.pt.y = rc.top;
            }
            if (!IsWindow(lpUIExtra->uiSoftKbd.hWnd))
            {
                lpUIExtra->uiSoftKbd.hWnd = 
                ImmCreateSoftKeyboard(SOFTKEYBOARD_TYPE_C1, hWnd,
                0, 0);
            }

            //ShowWindow(lpUIExtra->uiSoftKbd.hWnd,SW_SHOWNOACTIVATE);
            ImmShowSoftKeyboard(lpUIExtra->uiSoftKbd.hWnd,SW_HIDE);

            //lpUIExtra->uiSoftKbd.bShow = TRUE;
            //SetWindowLongPtr(lpUIExtra->uiSoftKbd.hWnd,FIGWL_SVRWND,(LONG_PTR)hWnd);
#endif
#ifdef USE_STATUS_WIN98_XXX
            if (lpUIExtra->uiStatus.pt.x == -1)
            {
                GetWindowRect(lpIMC->hWnd,&rc);
                lpUIExtra->uiStatus.pt.x = rc.right + 1;
                lpUIExtra->uiStatus.pt.y = rc.top;
            }
            if (!IsWindow(lpUIExtra->uiStatus.hWnd))
            {
                lpUIExtra->uiStatus.hWnd = 
                      CreateWindowEx(WS_EX_WINDOWEDGE,
                            (LPTSTR)szStatusClassName,NULL,
                            WS_COMPDEFAULT | WS_DLGFRAME,
                            lpUIExtra->uiStatus.pt.x,
                            lpUIExtra->uiStatus.pt.y,
                            BTX * 2 + 2 * GetSystemMetrics(SM_CXBORDER)
                                    + 2 * GetSystemMetrics(SM_CXEDGE),
                            BTX // + GetSystemMetrics(SM_CYSMCAPTION)
                                + 2 * GetSystemMetrics(SM_CYBORDER)
                                + 2 * GetSystemMetrics(SM_CYEDGE),
                            hWnd,NULL,hInst,NULL);
            }

            ShowWindow(lpUIExtra->uiStatus.hWnd,SW_SHOWNOACTIVATE);
            lpUIExtra->uiStatus.bShow = TRUE;
            SetWindowLongPtr(lpUIExtra->uiStatus.hWnd,FIGWL_SVRWND,(LONG_PTR)hWnd);
#endif
            break;

        case IMN_SETCONVERSIONMODE:
            UpdateStatusWindow(lpUIExtra);

            UpdateSoftKeyboard(lpUIExtra,
            lpIMC->fdwConversion & IME_CMODE_SOFTKBD);
#if 0
        if (!lpIMC->fdwConversion & IME_CMODE_SOFTKBD )
                ImmShowSoftKeyboard(lpUIExtra->uiSoftKbd.hWnd,SW_HIDE);
        else 
                ImmShowSoftKeyboard(lpUIExtra->uiSoftKbd.hWnd,SW_SHOWNOACTIVATE);
#endif
            break;

        case IMN_SETSENTENCEMODE:
            break;

        case IMN_SETCOMPOSITIONFONT:
            lf = lpIMC->lfFont.W;
            if (lpUIExtra->hFont)
                DeleteObject(lpUIExtra->hFont);

            if (lf.lfEscapement == 2700)
                lpUIExtra->bVertical = TRUE;
            else
            {
                lf.lfEscapement = 0;
                lpUIExtra->bVertical = FALSE;
            }

            //
            // if current font can't display Korean characters, 
            // try to find Korean font
            //
            if (lf.lfCharSet != NATIVE_CHARSET) {
                lf.lfCharSet = NATIVE_CHARSET;
                lf.lfFaceName[0] = TEXT('\0');
            }

            lpUIExtra->hFont = CreateFontIndirect((LPLOGFONT)&lf);
            SetFontCompWindow(lpUIExtra);
            MoveCompWindow(lpUIExtra,lpIMC);

            break;

        case IMN_SETOPENSTATUS:
            UpdateStatusWindow(lpUIExtra);
            UpdateSoftKeyboard(lpUIExtra,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -