📄 imm.c
字号:
{
if (fSelect)
{
LPCOMPOSITIONSTRING lpCompStr;
LPCANDIDATEINFO lpCandInfo;
// Init the general member of IMC.
if (!(lpIMC->fdwInit & INIT_LOGFONT))
{
lpIMC->lfFont.A.lfCharSet = NATIVE_CHARSET;
lpIMC->fdwInit |= INIT_LOGFONT;
}
if (!(lpIMC->fdwInit & INIT_CONVERSION))
{
lpIMC->fdwConversion = IME_CMODE_ROMAN | IME_CMODE_FULLSHAPE | IME_CMODE_NATIVE;
lpIMC->fdwInit |= INIT_CONVERSION;
}
lpIMC->hCompStr = ImmReSizeIMCC(lpIMC->hCompStr,sizeof(MYCOMPSTR));
if (lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr))
{
lpCompStr->dwSize = sizeof(MYCOMPSTR);
ImmUnlockIMCC(lpIMC->hCompStr);
}
lpIMC->hCandInfo = ImmReSizeIMCC(lpIMC->hCandInfo,sizeof(MYCAND));
if (lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo))
{
lpCandInfo->dwSize = sizeof(MYCAND);
ImmUnlockIMCC(lpIMC->hCandInfo);
}
}
ImmUnlockIMC(hIMC);
#if !defined (NO_TSF)
if (fSelect) {
if (InitLanguageBar ()) {
ActivateLanguageBar (TRUE) ;
}
} else {
ActivateLanguageBar (FALSE) ;
}
#endif
}
return TRUE;
}
#ifdef DEBUG
void DumpRS(LPRECONVERTSTRING lpRS)
{
TCHAR szDev[80];
LPMYSTR lpDump= ((LPMYSTR)lpRS) + lpRS->dwStrOffset;
*(LPMYSTR)(lpDump + lpRS->dwStrLen) = MYTEXT('\0');
OutputDebugString(TEXT("DumpRS\r\n"));
wsprintf(szDev, TEXT("dwSize %x\r\n"), lpRS->dwSize);
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
/**********************************************************************/
/* ImeSetCompositionString() */
/* */
/**********************************************************************/
BOOL WINAPI ImeSetCompositionString(HIMC hIMC, DWORD dwIndex, LPVOID lpComp, DWORD dwComp, LPVOID lpRead, DWORD dwRead)
{
LPCOMPOSITIONSTRING lpCompStr;
LPINPUTCONTEXT lpIMC;
ImeLog(LOGF_API, TEXT("ImeSetCompositionString"));
MyDebugPrint((TEXT("ImeSetCompoitionString\n")));
switch (dwIndex)
{
case SCS_QUERYRECONVERTSTRING:
#ifdef DEBUG
OutputDebugString(TEXT("SCS_QUERYRECONVERTSTRING\r\n"));
if (lpComp)
DumpRS((LPRECONVERTSTRING)lpComp);
if (lpRead)
DumpRS((LPRECONVERTSTRING)lpRead);
#endif
break;
case SCS_SETRECONVERTSTRING:
#ifdef DEBUG
OutputDebugString(TEXT("SCS_SETRECONVERTSTRING\r\n"));
if (lpComp)
DumpRS((LPRECONVERTSTRING)lpComp);
if (lpRead)
DumpRS((LPRECONVERTSTRING)lpRead);
#endif
break;
case SCS_CHANGEATTR:
MyDebugPrint((TEXT("SCS_CHANGEATTR\n")));
break;
case SCS_SETSTR:
MyDebugPrint((TEXT("*** SCS_SETSTR start\n")));
lpIMC = ImmLockIMC (hIMC) ;
if (!lpIMC)
break ;
lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC (lpIMC->hCompStr) ;
if (lpCompStr != NULL) {
if (lpComp != NULL && dwComp > 0) {
//InitCompStr (lpCompStr, CLR_RESULT_AND_UNDET);
MyDebugPrint((TEXT(" * LPCOMP %s:%d\n"),lpComp,dwComp / sizeof(TCHAR)));
Mylstrcpyn(GETLPCOMPSTR(lpCompStr),lpComp,dwComp);
} else if (lpRead != NULL && dwRead >0) {
MyDebugPrint((TEXT(" * LPREAD %s:%d\n"),lpRead,dwRead));
Mylstrcpyn(GETLPCOMPREADSTR(lpCompStr),lpRead,dwRead / sizeof(TCHAR));
if (!Mylstrlen(lpRead)) {
// 绊绊鸥磊狼 青悼阑 盒籍秦辑 掘篮 搬沸:
// lpRead啊 瘤况瘤搁 促矫 炼钦俊 甸绢皑.
// ImeSetCompostionString()阑 静绰 绢敲捞 腹瘤 臼酒辑
// 捞 青悼捞 棵官弗 青悼牢瘤 舅 荐啊 绝促 ;p
hangul_ic_init(&ic);
InitCompStr (lpCompStr, CLR_RESULT_AND_UNDET);
}
}
ImmUnlockIMCC (lpIMC->hCompStr);
}
ImmUnlockIMC (hIMC) ;
MyDebugPrint((TEXT("*** SCS_SETSTR end\n")));
return TRUE ;
break;
case SCS_CHANGECLAUSE:
MyDebugPrint((TEXT("SCS_CHANGECLAUSE\n")));
break;
}
return FALSE;
}
/**********************************************************************/
/* ImeGetImeMenuItemInfo() */
/* */
/**********************************************************************/
DWORD WINAPI ImeGetImeMenuItems(HIMC hIMC, DWORD dwFlags, DWORD dwType, LPMYIMEMENUITEMINFO lpImeParentMenu, LPMYIMEMENUITEMINFO lpImeMenu, DWORD dwSize)
{
ImeLog(LOGF_API, TEXT("ImeGetImeMenuItems"));
if (!lpImeMenu)
{
if (!lpImeParentMenu)
{
if (dwFlags & IGIMIF_RIGHTMENU)
return NUM_ROOT_MENU_R;
else
return NUM_ROOT_MENU_L;
}
else
{
if (dwFlags & IGIMIF_RIGHTMENU)
return NUM_SUB_MENU_R;
else
return NUM_SUB_MENU_L;
}
return 0;
}
if (!lpImeParentMenu)
{
if (dwFlags & IGIMIF_RIGHTMENU)
{
lpImeMenu->cbSize = sizeof(IMEMENUITEMINFO);
lpImeMenu->fType = 0;
lpImeMenu->fState = 0;
lpImeMenu->wID = IDIM_ROOT_MR_1;
lpImeMenu->hbmpChecked = 0;
lpImeMenu->hbmpUnchecked = 0;
Mylstrcpy(lpImeMenu->szString, MYTEXT("RootRightMenu1"));
lpImeMenu->hbmpItem = 0;
lpImeMenu++;
lpImeMenu->cbSize = sizeof(IMEMENUITEMINFO);
lpImeMenu->fType = IMFT_SUBMENU;
lpImeMenu->fState = 0;
lpImeMenu->wID = IDIM_ROOT_MR_2;
lpImeMenu->hbmpChecked = 0;
lpImeMenu->hbmpUnchecked = 0;
Mylstrcpy(lpImeMenu->szString, MYTEXT("RootRightMenu2"));
lpImeMenu->hbmpItem = 0;
lpImeMenu++;
lpImeMenu->cbSize = sizeof(IMEMENUITEMINFO);
lpImeMenu->fType = 0;
lpImeMenu->fState = 0;
lpImeMenu->wID = IDIM_ROOT_MR_3;
lpImeMenu->hbmpChecked = 0;
lpImeMenu->hbmpUnchecked = 0;
Mylstrcpy(lpImeMenu->szString, MYTEXT("RootRightMenu3"));
lpImeMenu->hbmpItem = 0;
return NUM_ROOT_MENU_R;
}
else
{
lpImeMenu->cbSize = sizeof(IMEMENUITEMINFO);
lpImeMenu->fType = 0;
lpImeMenu->fState = 0;
lpImeMenu->wID = IDIM_ROOT_ML_1;
lpImeMenu->hbmpChecked = 0;
lpImeMenu->hbmpUnchecked = 0;
Mylstrcpy(lpImeMenu->szString, MYTEXT("RootLeftMenu1"));
lpImeMenu->hbmpItem = 0;
lpImeMenu++;
lpImeMenu->cbSize = sizeof(IMEMENUITEMINFO);
lpImeMenu->fType = IMFT_SUBMENU;
lpImeMenu->fState = 0;
lpImeMenu->wID = IDIM_ROOT_ML_2;
lpImeMenu->hbmpChecked = 0;
lpImeMenu->hbmpUnchecked = 0;
Mylstrcpy(lpImeMenu->szString, MYTEXT("RootLeftMenu2"));
lpImeMenu->hbmpItem = 0;
lpImeMenu++;
lpImeMenu->cbSize = sizeof(IMEMENUITEMINFO);
lpImeMenu->fType = 0;
lpImeMenu->fState = 0;
lpImeMenu->wID = IDIM_ROOT_ML_3;
lpImeMenu->hbmpChecked = 0;
lpImeMenu->hbmpUnchecked = 0;
Mylstrcpy(lpImeMenu->szString, MYTEXT("RootLeftMenu3"));
lpImeMenu->hbmpItem = LoadBitmap(hInst,TEXT("FACEBMP"));
return NUM_ROOT_MENU_L;
}
}
else
{
if (dwFlags & IGIMIF_RIGHTMENU)
{
lpImeMenu->cbSize = sizeof(IMEMENUITEMINFO);
lpImeMenu->fType = 0;
lpImeMenu->fState = 0;
lpImeMenu->wID = IDIM_SUB_MR_1;
lpImeMenu->hbmpChecked = 0;
lpImeMenu->hbmpUnchecked = 0;
Mylstrcpy(lpImeMenu->szString, MYTEXT("SubRightMenu1"));
lpImeMenu->hbmpItem = 0;
lpImeMenu++;
lpImeMenu->cbSize = sizeof(IMEMENUITEMINFO);
lpImeMenu->fType = 0;
lpImeMenu->fState = 0;
lpImeMenu->wID = IDIM_SUB_MR_2;
lpImeMenu->hbmpChecked = 0;
lpImeMenu->hbmpUnchecked = 0;
Mylstrcpy(lpImeMenu->szString, MYTEXT("SubRightMenu2"));
lpImeMenu->hbmpItem = 0;
return NUM_SUB_MENU_R;
}
else
{
lpImeMenu->cbSize = sizeof(IMEMENUITEMINFO);
lpImeMenu->fType = 0;
lpImeMenu->fState = IMFS_CHECKED;
lpImeMenu->wID = IDIM_SUB_ML_1;
lpImeMenu->hbmpChecked = 0;
lpImeMenu->hbmpUnchecked = 0;
Mylstrcpy(lpImeMenu->szString, MYTEXT("SubLeftMenu1"));
lpImeMenu->hbmpItem = 0;
lpImeMenu++;
lpImeMenu->cbSize = sizeof(IMEMENUITEMINFO);
lpImeMenu->fType = 0;
lpImeMenu->fState = IMFS_CHECKED;
lpImeMenu->wID = IDIM_SUB_ML_2;
lpImeMenu->hbmpChecked = LoadBitmap(hInst,TEXT("CHECKBMP"));
lpImeMenu->hbmpUnchecked = LoadBitmap(hInst,TEXT("UNCHECKBMP"));
Mylstrcpy(lpImeMenu->szString, MYTEXT("SubLeftMenu2"));
lpImeMenu->hbmpItem = 0;
return NUM_SUB_MENU_L;
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -