📄 imeui.cpp
字号:
HIMC hIMC;
LPINPUTCONTEXT lpIMC;
hIMC = (HIMC)GetWindowLong(hUIWnd, IMMGWL_IMC);
if (!hIMC)
break;
lpIMC = (LPINPUTCONTEXT)ImmLockIMC(hIMC);
if (!lpIMC)
break;
RETAILMSG(1,(TEXT("OnUINotify()::lpIMC->fdwConversion = 0x%x\n"), lpIMC->fdwConversion));
ImmUnlockIMC(hIMC);
InvalidateRect(lpUIPriv->hStatusWnd, NULL, NULL);
}
break;
case IMN_SETCOMPOSITIONFONT:
// we are not going to change font, but an IME can do this if it want
break;
case IMN_SETCOMPOSITIONWINDOW:
break;
case IMN_SETCANDIDATEPOS:
if (!lpUIPriv->hCandWnd) {
break;
}
PostMessage(lpUIPriv->hCandWnd, WM_IME_NOTIFY, wParam, lParam);
break;
case IMN_GUIDELINE:
ShowGuideLine(hUIWnd);
break;
case IMN_PRIVATE:
switch (lParam) {
case WM_IME_STARTCOMPOSITION:
StartComp(hUIWnd);
break;
case WM_IME_COMPOSITION:
OnComp(hUIWnd, lParam);
break;
case WM_IME_ENDCOMPOSITION:
EndComp(hUIWnd);
break;
case IMN_PRIVATE_NONIME_TOGGLE_OFF:
{
HIMC hIMC;
LPINPUTCONTEXT lpIMC;
hIMC = (HIMC)GetWindowLong(hUIWnd, IMMGWL_IMC);
if (!hIMC)
break;
lpIMC = (LPINPUTCONTEXT)ImmLockIMC(hIMC);
if (!lpIMC)
break;
lpUIPriv->bOpenStatus = FALSE;
ImmSetOpenStatus(hIMC, FALSE);
ShowUI(hUIWnd, SW_HIDE);
ImmUnlockIMC(hIMC);
}
break;
case IMN_PRIVATE_NONIME_TOGGLE_ON:
{
lpUIPriv->bOpenStatus = TRUE;
ShowUI(hUIWnd, SW_SHOWNOACTIVATE);
}
break;
case IMN_PRIVATE_SETACTIVECONTEXT:
{
HIMC hIMC;
hIMC = (HIMC)GetWindowLong(hUIWnd, IMMGWL_IMC);
if (!hIMC)
break;
if (ImmGetOpenStatus(hIMC) && !lpUIPriv->bOpenStatus)
PostMessage(hUIWnd, WM_IME_NOTIFY, IMN_PRIVATE, IMN_PRIVATE_NONIME_TOGGLE_OFF);
}
break;
default:
break;
}
break;
case IMN_SOFTKBDDESTROYED:
// WinCE implement soft keyboard in different way.
break;
default:
break;
}
return 0L;
}
/**********************************************************************/
/* UIChange() */
/**********************************************************************/
LRESULT UIChange(HWND hUIWnd)
{
LPUIPRIV lpUIPriv;
lpUIPriv = (LPUIPRIV)GetWindowLong(hUIWnd, IMMGWL_PRIVATE);
if (lpUIPriv->fdwSetContext & ISC_SHOWUIALL) {
ShowUI(hUIWnd, SW_SHOWNOACTIVATE);
} else {
ShowUI(hUIWnd, SW_HIDE);
}
return (0L);
}
/**********************************************************************/
/* OnUISetContext() */
/**********************************************************************/
static __inline
LRESULT OnUISetContext(HWND hUIWnd, BOOL fOn, LPARAM lShowUI)
{
LPUIPRIV lpUIPriv;
lpUIPriv = (LPUIPRIV)GetWindowLong(hUIWnd, IMMGWL_PRIVATE);
if (fOn) {
lpUIPriv->fdwSetContext |= ISC_SHOWUIALL;
SetTimer(hUIWnd, TIMER_UICHANGE, 200, NULL);
} else {
KillTimer(hUIWnd, TIMER_UICHANGE);
lpUIPriv->fdwSetContext &= ~ISC_SHOWUIALL;
UIChange(hUIWnd);
}
return 0L;
}
/**********************************************************************/
/* GetCandPos() */
/**********************************************************************/
LRESULT GetCandPos(HWND hUIWnd, LPCANDIDATEFORM lpCandForm)
{
LPUIPRIV lpUIPriv;
RECT rcCandWnd;
HIMC hIMC;
LPINPUTCONTEXT lpIMC;
if (lpCandForm->dwIndex != 0) {
return (1L);
}
lpUIPriv = (LPUIPRIV)GetWindowLong(hUIWnd, IMMGWL_PRIVATE);
if (!lpUIPriv->hCandWnd) {
return (1L);
}
if (!GetWindowRect(lpUIPriv->hCandWnd, &rcCandWnd)) {
return (1L);
}
lpCandForm->dwStyle = CFS_CANDIDATEPOS;
lpCandForm->ptCurrentPos = *(LPPOINT)&rcCandWnd;
lpCandForm->rcArea = rcCandWnd;
hIMC = (HIMC)GetWindowLong(hUIWnd, IMMGWL_IMC);
if (!hIMC) {
return (1L);
}
lpIMC = (LPINPUTCONTEXT)ImmLockIMC(hIMC);
if (!lpIMC) {
return (1L);
}
ScreenToClient(lpIMC->hWnd, &lpCandForm->ptCurrentPos);
lpCandForm->rcArea.right += lpCandForm->ptCurrentPos.x -
lpCandForm->rcArea.left;
lpCandForm->rcArea.bottom += lpCandForm->ptCurrentPos.y -
lpCandForm->rcArea.top;
*(LPPOINT)&lpCandForm->rcArea = lpCandForm->ptCurrentPos;
ImmUnlockIMC(hIMC);
return (0L);
}
/**********************************************************************/
/* OnUIControl() */
/**********************************************************************/
static __inline
LRESULT OnUIControl(HWND hUIWnd, WPARAM wParam, LPARAM lParam)
{
switch (wParam) {
case IMC_GETCANDIDATEPOS:
return GetCandPos(hUIWnd, (LPCANDIDATEFORM)lParam);
case IMC_GETCOMPOSITIONWINDOW:
case IMC_GETSOFTKBDPOS:
case IMC_SETSOFTKBDPOS:
return (0L);
case IMC_GETSTATUSWINDOWPOS:
{
HWND hStatusWnd;
RECT rcStatusWnd;
LPARAM lParam;
hStatusWnd = GetStatusWnd(hUIWnd);
if (!hStatusWnd) {
return (0L);
}
if (!GetWindowRect(hStatusWnd, &rcStatusWnd)) {
return (0L);
}
lParam = MAKELRESULT(rcStatusWnd.left, rcStatusWnd.top);
}
return (lParam);
case IMC_SETSTATUSWINDOWPOS:
{
HIMC hIMC;
POINT ptPos;
ptPos.x = ((LPPOINTS)&lParam)->x;
ptPos.y = ((LPPOINTS)&lParam)->y;
hIMC = (HIMC)GetWindowLong(hUIWnd, IMMGWL_IMC);
if (!hIMC) {
return (1L);
}
if(!ImmSetStatusWindowPos(hIMC, &ptPos)) {
return (1L);
}
}
return (0L);
default:
return (1L);
}
}
/**********************************************************************/
/* UIWndProc() */
/**********************************************************************/
LRESULT CALLBACK ImeUIWndProc(HWND hUIWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
#ifdef __SHOWIMEMSG_HPP_
ShowImeMessage(hUIWnd, uMsg, wParam, lParam);
#endif
switch (uMsg) {
case WM_CREATE:
return OnUICreate(hUIWnd, (LPCREATESTRUCT)lParam);
case WM_DESTROY:
return OnUIDestroy(hUIWnd);
case WM_IME_STARTCOMPOSITION:
StartComp(hUIWnd);
break;
case WM_IME_COMPOSITION:
OnComp(hUIWnd, lParam);
break;
case WM_IME_ENDCOMPOSITION:
EndComp(hUIWnd);
break;
case WM_IME_NOTIFY:
return OnUINotify(hUIWnd, wParam, lParam);
case WM_IME_SETCONTEXT:
return OnUISetContext(hUIWnd, (BOOL)wParam, lParam);
case WM_IME_CONTROL:
return OnUIControl(hUIWnd, wParam, lParam);
case WM_IME_COMPOSITIONFULL:
return (0L);
case WM_IME_SELECT:
return (0L);
case WM_TIMER:
switch(wParam) {
case TIMER_UICHANGE:
KillTimer(hUIWnd, wParam);
return UIChange(hUIWnd);
default:
break;
}
return (1L);
default:
return DefWindowProc(hUIWnd, uMsg, wParam, lParam);
}
return (0L);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -