📄 uistate.c
字号:
DWORD PASCAL GetUINextMode( DWORD fdwConversion, DWORD dwPushed)
{
DWORD dwTemp;
BOOL fFullShape = ((fdwConversion & IME_CMODE_FULLSHAPE) != 0);
//
// When the mode button is pushed,
// the convmode will be switched as following
//
// FULLSHAPE -> HALFSHAPE
// NATIVE -> ROMAN
//
if (dwPushed == PUSHED_STATUS_MODE)
{
dwTemp = fdwConversion & IME_CMODE_LANGUAGE;
if (fFullShape)
{
fdwConversion &= ~IME_CMODE_FULLSHAPE;
}
else
{
fdwConversion |= IME_CMODE_FULLSHAPE;
}
}
return fdwConversion;
}
/**********************************************************************/
/* */
/* ButtonStatus(hStatusWnd,message,wParam,lParam) */
/* */
/**********************************************************************/
void PASCAL ButtonStatus( HWND hStatusWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
POINT pt;
HDC hDC;
DWORD dwMouse;
DWORD dwPushedStatus;
DWORD dwTemp;
DWORD fdwConversion;
HIMC hIMC;
HWND hSvrWnd;
BOOL fOpen;
HMENU hMenu;
static POINT ptdif;
static RECT drc;
static RECT rc;
static DWORD dwCurrentPushedStatus;
hDC = GetDC(hStatusWnd);
switch (message)
{
case WM_SETCURSOR:
if ( HIWORD(lParam) == WM_LBUTTONDOWN
|| HIWORD(lParam) == WM_RBUTTONDOWN )
{
GetCursorPos( &pt );
SetCapture(hStatusWnd);
GetWindowRect(hStatusWnd,&drc);
ptdif.x = pt.x - drc.left;
ptdif.y = pt.y - drc.top;
rc = drc;
rc.right -= rc.left;
rc.bottom -= rc.top;
SetWindowLong(hStatusWnd,FIGWL_MOUSE,FIM_CAPUTURED);
SetWindowLong(hStatusWnd, FIGWL_PUSHSTATUS, dwPushedStatus = CheckPushedStatus(hStatusWnd,&pt));
PaintStatus(hStatusWnd,hDC,&pt, dwPushedStatus);
dwCurrentPushedStatus = dwPushedStatus;
}
break;
case WM_MOUSEMOVE:
dwMouse = GetWindowLong(hStatusWnd,FIGWL_MOUSE);
if (!(dwPushedStatus = GetWindowLong(hStatusWnd, FIGWL_PUSHSTATUS)))
{
if (dwMouse & FIM_MOVED)
{
DrawUIBorder(&drc);
GetCursorPos( &pt );
drc.left = pt.x - ptdif.x;
drc.top = pt.y - ptdif.y;
drc.right = drc.left + rc.right;
drc.bottom = drc.top + rc.bottom;
DrawUIBorder(&drc);
}
else if (dwMouse & FIM_CAPUTURED)
{
DrawUIBorder(&drc);
SetWindowLong(hStatusWnd,FIGWL_MOUSE,dwMouse | FIM_MOVED);
}
}
else
{
GetCursorPos(&pt);
dwTemp = CheckPushedStatus(hStatusWnd,&pt);
if ((dwTemp ^ dwCurrentPushedStatus) & dwPushedStatus)
PaintStatus(hStatusWnd,hDC,&pt, dwPushedStatus & dwTemp);
dwCurrentPushedStatus = dwTemp;
}
break;
case WM_RBUTTONUP:
dwMouse = GetWindowLong(hStatusWnd,FIGWL_MOUSE);
if (dwMouse & FIM_CAPUTURED)
{
ReleaseCapture();
if (dwMouse & FIM_MOVED)
{
DrawUIBorder(&drc);
GetCursorPos( &pt );
MoveWindow(hStatusWnd,pt.x - ptdif.x,
pt.y - ptdif.y,
rc.right,
rc.bottom,TRUE);
}
}
PaintStatus(hStatusWnd,hDC,NULL,0);
hSvrWnd = (HWND)GetWindowLongPtr(hStatusWnd,FIGWL_SVRWND);
hMenu = LoadMenu(hInst, TEXT("RIGHTCLKMENU"));
if (hMenu && (hIMC = (HIMC)GetWindowLongPtr(hSvrWnd,IMMGWLP_IMC)))
{
int cmd;
POINT pt;
LPINPUTCONTEXT lpIMC;
HMENU hSubMenu = GetSubMenu(hMenu, 0);
pt.x = (int)LOWORD(lParam),
pt.y = (int)HIWORD(lParam),
ClientToScreen(hStatusWnd, &pt);
cmd = TrackPopupMenu(hSubMenu,
TPM_RETURNCMD,
pt.x,
pt.y,
0,
hStatusWnd,
NULL);
switch (cmd)
{
case IDM_RECONVERT:
{
DWORD dwSize = (DWORD) MyImmRequestMessage(hIMC, IMR_RECONVERTSTRING, 0);
if (dwSize)
{
LPRECONVERTSTRING lpRS;
lpRS = (LPRECONVERTSTRING)GlobalAlloc(GPTR, dwSize);
lpRS->dwSize = dwSize;
if (dwSize = (DWORD) MyImmRequestMessage(hIMC, IMR_RECONVERTSTRING, (LPARAM)lpRS)) {
#ifdef DEBUG
{
TCHAR szDev[80];
LPMYSTR lpDump= (LPMYSTR)(((LPSTR)lpRS) + lpRS->dwStrOffset);
*(LPMYSTR)(lpDump + lpRS->dwStrLen) = MYTEXT('\0');
OutputDebugString(TEXT("IMR_RECONVERTSTRING\r\n"));
wsprintf(szDev, TEXT("dwSize %x\r\n"), lpRS->dwSize);
OutputDebugString(szDev);
wsprintf(szDev, TEXT("dwVersion %x\r\n"), lpRS->dwVersion);
OutputDebugString(szDev);
wsprintf(szDev, TEXT("dwStrLen %x\r\n"), lpRS->dwStrLen);
OutputDebugString(szDev);
wsprintf(szDev, TEXT("dwStrOffset %x\r\n"), lpRS->dwStrOffset);
OutputDebugString(szDev);
wsprintf(szDev, TEXT("dwCompStrLen %x\r\n"), lpRS->dwCompStrLen);
OutputDebugString(szDev);
wsprintf(szDev, TEXT("dwCompStrOffset %x\r\n"), lpRS->dwCompStrOffset);
OutputDebugString(szDev);
wsprintf(szDev, TEXT("dwTargetStrLen %x\r\n"), lpRS->dwTargetStrLen);
OutputDebugString(szDev);
wsprintf(szDev, TEXT("dwTargetStrOffset %x\r\n"), lpRS->dwTargetStrOffset);
OutputDebugString(szDev);
MyOutputDebugString(lpDump);
OutputDebugString(TEXT("\r\n"));
}
#endif
MyImmRequestMessage(hIMC, IMR_CONFIRMRECONVERTSTRING, (LPARAM)lpRS);
}
#ifdef DEBUG
else
OutputDebugString(TEXT("ImmRequestMessage returned 0\r\n"));
#endif
GlobalFree((HANDLE)lpRS);
}
break;
}
case IDM_ABOUT:
lpIMC = (LPINPUTCONTEXT)ImmLockIMC(hIMC);
(void) ImeConfigure (GetKeyboardLayout(0), lpIMC->hWnd, IME_CONFIG_GENERAL, NULL);
//ImmConfigureIME(GetKeyboardLayout(0), NULL, IME_CONFIG_GENERAL, 0);
ImmUnlockIMC(hIMC);
break;
default:
break;
}
}
if (hMenu)
DestroyMenu(hMenu);
break;
case WM_LBUTTONUP:
dwMouse = GetWindowLong(hStatusWnd,FIGWL_MOUSE);
if (dwMouse & FIM_CAPUTURED)
{
ReleaseCapture();
if (dwMouse & FIM_MOVED)
{
DrawUIBorder(&drc);
GetCursorPos( &pt );
MoveWindow(hStatusWnd,pt.x - ptdif.x,
pt.y - ptdif.y,
rc.right,
rc.bottom,TRUE);
}
}
hSvrWnd = (HWND)GetWindowLongPtr(hStatusWnd,FIGWL_SVRWND);
if (hIMC = (HIMC)GetWindowLongPtr(hSvrWnd,IMMGWLP_IMC))
{
GetCursorPos(&pt);
dwPushedStatus = GetWindowLong(hStatusWnd, FIGWL_PUSHSTATUS);
dwPushedStatus &= CheckPushedStatus(hStatusWnd,&pt);
if (!dwPushedStatus) {
} else if (dwPushedStatus == PUSHED_STATUS_CLOSE) {
} else if (dwPushedStatus == PUSHED_STATUS_HDR)
{
fOpen = ImmGetOpenStatus(hIMC);
fOpen = !fOpen;
ImmSetOpenStatus(hIMC,fOpen);
}
else
{
ImmGetConversionStatus(hIMC,&fdwConversion,&dwTemp);
fdwConversion = GetUINextMode(fdwConversion,dwPushedStatus);
ImmSetConversionStatus(hIMC,fdwConversion,dwTemp);
}
}
PaintStatus(hStatusWnd,hDC,NULL,0);
break;
}
ReleaseDC(hStatusWnd,hDC);
}
/**********************************************************************/
/* */
/* UpdateStatusWindow(lpUIExtra) */
/* */
/**********************************************************************/
void PASCAL UpdateStatusWindow(LPUIEXTRA lpUIExtra)
{
if (IsWindow(lpUIExtra->uiStatus.hWnd))
SendMessage(lpUIExtra->uiStatus.hWnd,WM_UI_UPDATE,0,0L);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -