📄 init.cpp
字号:
UI_MODE = LIN_UI;
InitCandUIData(cxBorder, cyBorder, UI_MODE);
InitStatusUIData(cxBorder, cyBorder);
//init t9 ime
PinyinToDigit();
sImeG.iCandStart = CAND_START;
// sImeG.iPara = 0;
// sImeG.iPerp = sImeG.yChiCharHi;
// sImeG.iParaTol = sImeG.xChiCharWi * 4;
// sImeG.iPerpTol = lTextSize.cy;
return;
}
/**********************************************************************/
/* InitImeLocalData() */
/**********************************************************************/
BOOL PASCAL InitImeLocalData(
HINSTANCE hInstL)
{
int cxBorder, cyBorder;
int iContentHi;
// iContentHi is to get the maximum value of predefined COMP_TEXT_Y and
// a real Chinese character's height in the current HDC.
iContentHi = COMP_TEXT_Y;
if ( iContentHi < sImeG.yChiCharHi )
iContentHi = sImeG.yChiCharHi ;
lpImeL->hInst = hInstL;
lpImeL->nMaxKey = COMP_MAX_PYLEN;
// border + raising edge + sunken edge
cxBorder = GetSystemMetrics(SM_CXBORDER);
cyBorder = GetSystemMetrics(SM_CYBORDER);
// text position relative to the composition window
lpImeL->cxCompBorder = cxBorder * 2;
lpImeL->cyCompBorder = cyBorder * 2;
lpImeL->xComSelWi = sImeG.xChiCharWi *3;
lpImeL->rcCompText.left = cxBorder+ lpImeL->xComSelWi;
lpImeL->rcCompText.top = cyBorder;
lpImeL->rcCompText.right = lpImeL->rcCompText.left + sImeG.xChiCharWi * ((6 + 2) / 2);
lpImeL->rcCompText.bottom = lpImeL->rcCompText.top + iContentHi;
// set the width & height for composition window
lpImeL->xCompWi= lpImeL->rcCompText.right+lpImeL->cxCompBorder*2+cxBorder*4 + lpImeL->xComSelWi;
lpImeL->yCompHi=lpImeL->rcCompText.bottom+lpImeL->cyCompBorder*2+cyBorder*4;
//set composition windows
memset(lpImeL->tComCurItem,0,COMP_MAX_PYLEN); //currentShowItem
memset(lpImeL->tComSelItem,0,COMP_MAX_PYLEN); //currentShowItem
lpImeL->iStartItem = 0;
// lpImeL->bComItemEnd = FALSE;
// default position of composition window
lpImeL->ptDefComp.x = sImeG.rcWorkArea.right -
lpImeL->xCompWi - cxBorder * 2;
lpImeL->ptDefComp.y = sImeG.rcWorkArea.bottom -
lpImeL->yCompHi - cyBorder * 2;
lpImeL->fModeConfig = MODE_CONFIG_QUICK_KEY|MODE_CONFIG_PREDICT;
return (TRUE);
}
/**********************************************************************/
/* RegisterImeClass() */
/**********************************************************************/
void PASCAL RegisterImeClass(
HINSTANCE hInstance,
HINSTANCE hInstL)
{
WNDCLASS wcWndCls;
// IME UI class
// Register IME UI class
wcWndCls.cbClsExtra = 0;
wcWndCls.cbWndExtra = sizeof(INT_PTR) * 2;
wcWndCls.hIcon = NULL;
wcWndCls.hInstance = hInstance;
wcWndCls.hCursor = (HCURSOR)LoadCursor(NULL, IDC_ARROW);
wcWndCls.hbrBackground = (HBRUSH)GetStockObject(NULL_BRUSH);
wcWndCls.lpszMenuName = (LPTSTR)NULL;
// IME UI class
if (!GetClassInfo(hInstance, szUIClassName, &wcWndCls)) {
wcWndCls.style = CS_IME;
wcWndCls.lpfnWndProc = UIWndProc;
wcWndCls.lpszClassName = (LPTSTR)szUIClassName;
RegisterClass(&wcWndCls);
}
wcWndCls.style = CS_IME|CS_HREDRAW|CS_VREDRAW;
wcWndCls.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
// IME composition class
// register IME composition class
if (!GetClassInfo(hInstance, szCompClassName, &wcWndCls)) {
wcWndCls.lpfnWndProc = CompWndProc;
wcWndCls.lpszClassName = (LPTSTR)szCompClassName;
RegisterClass(&wcWndCls);
}
// IME candidate class
// register IME candidate class
if (!GetClassInfo(hInstance, szCandClassName, &wcWndCls)) {
wcWndCls.lpfnWndProc = CandWndProc;
wcWndCls.lpszClassName = (LPTSTR)szCandClassName;
RegisterClass(&wcWndCls);
}
// IME status class
// register IME status class
if (!GetClassInfo(hInstance, szStatusClassName, &wcWndCls)) {
wcWndCls.lpfnWndProc = StatusWndProc;
wcWndCls.lpszClassName = (LPTSTR)szStatusClassName;
RegisterClass(&wcWndCls);
}
return;
}
/**********************************************************************/
/* ImeDllInit() */
/* Return Value: */
/* TRUE - successful */
/* FALSE - failure */
/**********************************************************************/
BOOL CALLBACK ImeDllInit(
HINSTANCE hInstance, // instance handle of this library
DWORD fdwReason, // reason called
LPVOID lpvReserve) // reserve pointer
{
static HANDLE hMapFile1 = NULL;
switch (fdwReason) {
case DLL_PROCESS_ATTACH:
{
//DisableThreadLibraryCalls((HMODULE)hInstance);
// init globaldata & load globaldata from resource
//readout current ImeName
szImeName = pszImeName;
if (!hInst) {
InitImeGlobalData(hInstance);
}
if (!lpImeL) {
lpImeL = &sImeL;
InitImeLocalData(hInstance);
}
RegisterImeClass(hInstance, hInstance);
}
InitializeCriticalSection( &csStatusPos);
EnterCriticalSection(&csStatusPos);
hMapFile1 = CreateFileMapping((HANDLE)-1, (LPSECURITY_ATTRIBUTES) NULL, PAGE_READWRITE, (DWORD) 0, (DWORD) sizeof(POINT), TEXT("ImeStatusPos") );
if(hMapFile1)
pptStatusPos = (PPOINT)MapViewOfFile( hMapFile1, FILE_MAP_ALL_ACCESS, (DWORD) 0, (DWORD) 0, (DWORD) sizeof(POINT));
if (GetLastError() != ERROR_ALREADY_EXISTS)
pptStatusPos->x = pptStatusPos->y = -1;
LeaveCriticalSection(&csStatusPos);
break;
case DLL_PROCESS_DETACH:
{
WNDCLASS wcWndCls;
EnterCriticalSection(&csStatusPos);
UnmapViewOfFile( (LPCVOID) pptStatusPos);
CloseHandle(hMapFile1);
LeaveCriticalSection(&csStatusPos);
if (GetClassInfo(hInstance, szCMenuClassName, &wcWndCls)) {
UnregisterClass(szCMenuClassName, hInstance);
}
if (GetClassInfo(hInstance, szStatusClassName, &wcWndCls)) {
UnregisterClass(szStatusClassName, hInstance);
}
if (GetClassInfo(hInstance, szCandClassName, &wcWndCls)) {
UnregisterClass(szCandClassName, hInstance);
}
if (GetClassInfo(hInstance, szCompClassName, &wcWndCls)) {
UnregisterClass(szCompClassName, hInstance);
}
if (!GetClassInfo(hInstance, szUIClassName, &wcWndCls)) {
} else if (!UnregisterClass(szUIClassName, hInstance)) {
} else {
DestroyIcon(wcWndCls.hIcon);
}
}
break;
default:
break;
}
return (TRUE);
}
int strbytelen (LPTSTR lpStr)
{
int i, len, iRet;
len = lstrlen(lpStr);
for (i = 0, iRet = 0; i < len; i++, iRet++) {
if (lpStr[i] > 0x100)
iRet++;
}
return iRet;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -