这是输入法中,处理键盘消息的代码.我的目的是想让他在按空个是全角输出的.
BOOL WINAPI ImeProcessKey(HIMC hIMC,UINT vKey,LPARAM lKeyData,CONST LPBYTE lpbKeyState)
{
BOOL fRet = FALSE;
BOOL fOpen;
BOOL fCompStr = FALSE;
LPINPUTCONTEXT lpIMC;
LPCOMPOSITIONSTRING lpCompStr;
static BOOL fPressOther = FALSE;
// static BOOL fFirst = TRUE; DebugLog(1,(DebugLogFile,"ImeProcessKey\n"));
if ((lKeyData & 0x80000000) && vKey != VK_CONTROL)
return FALSE;
if (!(lKeyData & 0x80000000) && vKey == VK_CONTROL)
return FALSE;
if (lpbKeyState[VK_MENU] & 0x80 ) return FALSE; if(vKey != VK_CONTROL && lpbKeyState[VK_CONTROL] & 0x80 ) {
fPressOther = TRUE;
return FALSE;
} if (!(lpIMC = ImmLockIMC(hIMC)))
return FALSE;
fOpen = lpIMC->fOpen; if(vKey == VK_CONTROL && (lKeyData & 0x80000000) && !fPressOther){ // && !fFirst){
GENEMSG GnMsg; fPressOther = FALSE; if(fOpen) {
lpIMC->fOpen=FALSE;
MakeResultString(hIMC,FALSE);
}
else lpIMC->fOpen=TRUE; GnMsg.msg = WM_IME_NOTIFY;
GnMsg.wParam = IMN_SETOPENSTATUS;
GnMsg.lParam = 0;
GenerateMessage(hIMC, lpdwCurTransKey,(LPGENEMSG)&GnMsg);
return FALSE; } fPressOther = FALSE; if (fOpen)
{
if (lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr))
{
if ((lpCompStr->dwSize > sizeof(COMPOSITIONSTRING)) &&
(lpCompStr->dwCompStrLen))
fCompStr = TRUE;
ImmUnlockIMCC(lpIMC->hCompStr);
} //#########
if (wConversionMode & CONVERSION_SET_FULLSHAPE){
//if (lpbKeyState[VK_SHIFT] & 0x80)
//{
// if (fCompStr)
// fRet = (BOOL)bComp[vKey];
// else
// fRet = (BOOL)bNoComp[vKey];
// }
// else
// {
// if (fCompStr)
// fRet = (BOOL)bComp[vKey];
// else
// fRet = (BOOL)bNoComp[vKey];
// }
}
//########
if (fCompStr)
fRet = (BOOL)bComp[vKey];
else
fRet = (BOOL)bNoComp[vKey];
} ImmUnlockIMC(hIMC);
return fRet;}
BOOL WINAPI ImeProcessKey(HIMC hIMC,UINT vKey,LPARAM lKeyData,CONST LPBYTE lpbKeyState)
{
BOOL fRet = FALSE;
BOOL fOpen;
BOOL fCompStr = FALSE;
LPINPUTCONTEXT lpIMC;
LPCOMPOSITIONSTRING lpCompStr;
static BOOL fPressOther = FALSE;
// static BOOL fFirst = TRUE; DebugLog(1,(DebugLogFile,"ImeProcessKey\n"));
if ((lKeyData & 0x80000000) && vKey != VK_CONTROL)
return FALSE;
if (!(lKeyData & 0x80000000) && vKey == VK_CONTROL)
return FALSE;
if (lpbKeyState[VK_MENU] & 0x80 ) return FALSE; if(vKey != VK_CONTROL && lpbKeyState[VK_CONTROL] & 0x80 ) {
fPressOther = TRUE;
return FALSE;
} if (!(lpIMC = ImmLockIMC(hIMC)))
return FALSE;
fOpen = lpIMC->fOpen; if(vKey == VK_CONTROL && (lKeyData & 0x80000000) && !fPressOther){ // && !fFirst){
GENEMSG GnMsg; fPressOther = FALSE; if(fOpen) {
lpIMC->fOpen=FALSE;
MakeResultString(hIMC,FALSE);
}
else lpIMC->fOpen=TRUE; GnMsg.msg = WM_IME_NOTIFY;
GnMsg.wParam = IMN_SETOPENSTATUS;
GnMsg.lParam = 0;
GenerateMessage(hIMC, lpdwCurTransKey,(LPGENEMSG)&GnMsg);
return FALSE; } fPressOther = FALSE; if (fOpen)
{
if (lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr))
{
if ((lpCompStr->dwSize > sizeof(COMPOSITIONSTRING)) &&
(lpCompStr->dwCompStrLen))
fCompStr = TRUE;
ImmUnlockIMCC(lpIMC->hCompStr);
} //#########
if (wConversionMode & CONVERSION_SET_FULLSHAPE){
//if (lpbKeyState[VK_SHIFT] & 0x80)
//{
// if (fCompStr)
// fRet = (BOOL)bComp[vKey];
// else
// fRet = (BOOL)bNoComp[vKey];
// }
// else
// {
// if (fCompStr)
// fRet = (BOOL)bComp[vKey];
// else
// fRet = (BOOL)bNoComp[vKey];
// }
}
//########
if (fCompStr)
fRet = (BOOL)bComp[vKey];
else
fRet = (BOOL)bNoComp[vKey];
} ImmUnlockIMC(hIMC);
return fRet;}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货