2025-11-28 00:35:46 +09:00

203 lines
5.1 KiB
C

/**********************************************************************/
/* */
/* MODE.C */
/* */
/* Copyright (c) 1995 - 2000 Microsoft Corporation */
/* */
/**********************************************************************/
#include <windows.h>
#include <imm.h>
#include "resource.h"
#include "imeapps.h"
LRESULT HandleModeCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
HIMC hIMC = ImmGetContext(hWndCompStr);
DWORD dwConv, dwSent;
DWORD dwTemp;
ImmGetConversionStatus(hIMC,&dwConv,&dwSent);
switch(LOWORD(wParam))
{
case IDM_NATIVEMODE:
dwTemp = dwConv & ~IME_CMODE_LANGUAGE;
switch (dwConv & IME_CMODE_LANGUAGE)
{
case IME_CMODE_ALPHANUMERIC:
dwTemp |= IME_CMODE_NATIVE;
break;
case IME_CMODE_NATIVE:
dwTemp |= (IME_CMODE_NATIVE | IME_CMODE_KATAKANA);
break;
case (IME_CMODE_NATIVE | IME_CMODE_KATAKANA): /* fall-through */
default:
break;
}
dwConv = dwTemp;
break;
case IDM_FULLHALF:
if (dwConv & IME_CMODE_FULLSHAPE)
{
dwConv &= ~IME_CMODE_FULLSHAPE;
}
else
{
dwConv |= IME_CMODE_FULLSHAPE;
}
break;
case IDM_ROMAN:
if (dwConv & IME_CMODE_ROMAN)
{
dwConv &= ~IME_CMODE_ROMAN;
}
else
{
dwConv |= IME_CMODE_ROMAN;
}
break;
case IDM_CHARCODE:
if (dwConv & IME_CMODE_CHARCODE)
{
dwConv &= ~IME_CMODE_CHARCODE;
}
else
{
dwConv |= IME_CMODE_CHARCODE;
}
break;
case IDM_HANJA:
if (dwConv & IME_CMODE_HANJACONVERT)
{
dwConv &= ~IME_CMODE_HANJACONVERT;
}
else
{
dwConv |= IME_CMODE_HANJACONVERT;
}
break;
case IDM_SOFTKBD:
if (dwConv & IME_CMODE_SOFTKBD)
{
dwConv &= ~IME_CMODE_SOFTKBD;
}
else
{
dwConv |= IME_CMODE_SOFTKBD;
}
break;
case IDM_EUDC:
if (dwConv & IME_CMODE_EUDC)
{
dwConv &= ~IME_CMODE_EUDC;
}
else
{
dwConv |= IME_CMODE_EUDC;
}
break;
case IDM_SYMBOL:
if (dwConv & IME_CMODE_SYMBOL)
{
dwConv &= ~IME_CMODE_SYMBOL;
}
else
{
dwConv |= IME_CMODE_SYMBOL;
}
break;
}
ImmSetConversionStatus(hIMC,dwConv,dwSent);
ImmReleaseContext(hWndCompStr,hIMC);
return 1L;
}
LRESULT HandleConvertCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
HIMC hIMC = ImmGetContext(hWndCompStr);
DWORD dwSel;
DWORD dwSize;
LPCANDIDATELIST lpCL = NULL;
switch(wParam)
{
case IDM_CONVERT:
ImmNotifyIME(hIMC,NI_COMPOSITIONSTR,CPS_CONVERT,0);
break;
case IDM_CANCEL:
ImmNotifyIME(hIMC,NI_COMPOSITIONSTR,CPS_CANCEL,0);
break;
case IDM_REVERT:
ImmNotifyIME(hIMC,NI_COMPOSITIONSTR,CPS_REVERT,0);
break;
case IDM_COMPLETE:
ImmNotifyIME(hIMC,NI_COMPOSITIONSTR,CPS_COMPLETE,0);
break;
case IDM_OPENCAND:
ImmNotifyIME(hIMC,NI_OPENCANDIDATE,0,0);
break;
case IDM_CLOSECAND:
ImmNotifyIME(hIMC,NI_CLOSECANDIDATE,0,0);
break;
case IDM_NEXTCAND: /* fall-through */
case IDM_PREVCAND:
if (dwSize = ImmGetCandidateList(hIMC,0x0,NULL,0))
{
lpCL = (LPCANDIDATELIST)GlobalAlloc(GPTR,dwSize);
ImmGetCandidateList(hIMC,0x0,lpCL,dwSize);
dwSel = lpCL->dwSelection;
if (wParam == IDM_NEXTCAND)
{
if (++dwSel >= lpCL->dwCount)
{
dwSel = 0;
}
}
else
{
if (dwSel)
{
dwSel--;
}
else
{
dwSel = lpCL->dwCount - 1;
}
}
GlobalFree((HANDLE)lpCL);
ImmNotifyIME(hIMC,NI_SELECTCANDIDATESTR,0,dwSel);
}
break;
}
ImmReleaseContext(hWndCompStr,hIMC);
return 1;
}