⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.cpp

📁 ElipseNC3.1开发环境培训范例代码BO-DMO简单使用入门阶段_范例1.rar
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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 + -