コード例 #1
0
ファイル: subs.c プロジェクト: zhiruiyan/inputMethod
void SelectForwardFromCand(HIMC hIMC,LPCANDIDATELIST lpCandList)
{
	HDC hDC;
	HFONT oldFont;
	TCHAR szTotal[200],szTemp[100];
	SIZE sz;
	WORD wPos;
	GENEMSG GnMsg;

	if(wConversionSet & CONVERSION_SET_SHAPE) {
		wPos = (WORD) lpCandList->dwSelection;
		if(wPos < lpCandList->dwCount) {
			hDC = GetDC(NULL);
			oldFont = SelectObject(hDC, hUIFont);
			lpCandList->dwPageStart = wPos + 2;
			_tcscpy(szTotal,"<>");
			lpCandList->dwPageSize = 0;
			while(wPos < lpCandList->dwCount && lpCandList->dwPageSize < CAND_PAGESIZE) {
				_stprintf(szTemp,"%d%s ",1,GETLPCANDSTR(lpCandList,wPos+2));
				_tcscat(szTotal,szTemp);
				GetTextExtentPoint(hDC,szTotal,_tcslen(szTotal),&sz);
				if(sz.cx > sizeCand[1].cx) {
					break;
				}
				(lpCandList->dwPageSize)++;
				wPos++;
			}
			SelectObject(hDC, oldFont);
			ReleaseDC(NULL,hDC);
			lpCandList->dwSelection = wPos;
			if(lpCandList->dwPageStart > 2)
				_tcscpy(GETLPCANDSTR(lpCandList,0),_T("<"));
			else
				_tcscpy(GETLPCANDSTR(lpCandList,0),_T(""));
			if(wPos < lpCandList->dwCount)
				_tcscpy(GETLPCANDSTR(lpCandList,1),_T(">"));
			else
				_tcscpy(GETLPCANDSTR(lpCandList,1),_T(""));

			GnMsg.msg = WM_IME_COMPOSITION;
			GnMsg.wParam = 0;
			GnMsg.lParam = GCS_COMPSTR;
			GenerateMessage(hIMC, lpdwCurTransKey,(LPGENEMSG)&GnMsg);
		}
		else MessageBeep(0xFFFFFFFF );
	}
	else{
		if( lpCandList->dwPageStart + lpCandList->dwPageSize -2 < 
			lpCandList->dwCount) {
			lpCandList->dwPageStart += lpCandList->dwPageSize;
			lpCandList->dwPageSize = CAND_PAGESIZE;
	
			GnMsg.msg = WM_IME_COMPOSITION;
			GnMsg.wParam = 0;
			GnMsg.lParam = GCS_COMPSTR;
			GenerateMessage(hIMC, lpdwCurTransKey,(LPGENEMSG)&GnMsg);
		}
		else MessageBeep(0xFFFFFFFF );
	}
}
コード例 #2
0
ファイル: subs.c プロジェクト: zhiruiyan/inputMethod
BOOL MakeResultString( HIMC hIMC,BOOL fFlag)
{
    GENEMSG GnMsg;
    LPCOMPOSITIONSTRING lpCompStr;
    LPINPUTCONTEXT lpIMC;
	LPTSTR lpConvStr,lpPreResultStr;
	LPCANDIDATEINFO lpCandInfo;
	LPCANDIDATELIST lpCandList;
/*
    if (!IsCompStr(hIMC))
        return FALSE;
*/	
	wConversionMode = 0;
	dwCurPhraseAttrib=0;

    lpIMC = ImmLockIMC(hIMC);
    lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
	lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo);
	lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo  + lpCandInfo->dwOffset[0]);

	if(fFlag) {
		lpConvStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szConvCompStr;
		lpPreResultStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPreResultStr;
		_tcscpy(lpPreResultStr,lpConvStr);

		if(wConversionSet & CONVERSION_SET_BIG5) gb2big(lpConvStr);

		_tcscpy(GETLPRESULTSTR(lpCompStr),lpConvStr);
		
		lpCompStr->dwResultStrLen = _tcslen(lpConvStr);
	}
	else{
		*GETLPRESULTSTR(lpCompStr) = _T('\0');
		lpCompStr->dwResultStrLen = 0;
	}

	lpCandList->dwCount = 0;
    lpCompStr->dwCompStrLen = 0;

	_tcscpy(GETLPCANDSTR(lpCandList,0),_T(""));
	_tcscpy(GETLPCANDSTR(lpCandList,1),_T(""));
	
	ImmUnlockIMCC(lpIMC->hCompStr);
	ImmUnlockIMCC(lpIMC->hCandInfo);
	
	GnMsg.msg = WM_IME_COMPOSITION;
	GnMsg.wParam = 0;
	GnMsg.lParam = GCS_RESULTSTR;
	GenerateMessage(hIMC, lpdwCurTransKey,(LPGENEMSG)&GnMsg);
	
	GnMsg.msg = WM_IME_ENDCOMPOSITION;
	GnMsg.wParam = 0;
	GnMsg.lParam = 0;
	GenerateMessage(hIMC, lpdwCurTransKey,(LPGENEMSG)&GnMsg);
	
    ImmUnlockIMC(hIMC);
    return TRUE;
}
コード例 #3
0
ファイル: subs.c プロジェクト: zhiruiyan/inputMethod
void SelectCandFromCandlist( HIMC hIMC, WORD wParam)
{
	if( wParam >= _T('0') && wParam <= _T('9') ){
		DWORD dwIdx;
		LPTSTR lpConvStr;
	    LPINPUTCONTEXT lpIMC;
		LPCANDIDATEINFO lpCandInfo;
		LPCANDIDATELIST lpCandList;
		LPCOMPOSITIONSTRING lpCompStr;

		lpIMC = ImmLockIMC(hIMC);
		lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo);
		lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo  + lpCandInfo->dwOffset[0]);
		lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);

	    if( wParam == (WORD)_T('0') ) dwIdx=9;
		else dwIdx = wParam - _T('1');
		if(dwIdx < lpCandList->dwPageSize ) {
			dwIdx += lpCandList->dwPageStart;
			if( dwIdx < (lpCandList->dwCount + 2) && lpCandList->dwCount){
				lpConvStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szConvCompStr;
				_tcscpy(lpConvStr,GETLPCANDSTR(lpCandList,dwIdx));
				MakeResultString(hIMC,TRUE);
			}
		}
		ImmUnlockIMCC(lpIMC->hCompStr);
		ImmUnlockIMCC(lpIMC->hCandInfo);
		ImmUnlockIMC(hIMC);
	}
	return;
}
コード例 #4
0
ファイル: uicand.c プロジェクト: zhiruiyan/inputMethod
void MoveCandWindow(HWND hUIWnd,LPUIEXTRA lpUIExtra, LPINPUTCONTEXT lpIMC)
{
	if (!IsWindow(lpUIExtra->uiCand.hWnd))
		CreateCandWindow( hUIWnd, lpUIExtra);

	if (IsWindow(lpUIExtra->uiCand.hWnd))
	{
	    LPCANDIDATEINFO lpCandInfo;
	    LPCANDIDATELIST lpCandList;
		HDC hDC;
		HFONT oldFont;
		SIZE sz;
		LPTSTR lpStr;

		sz.cx = 0;
		sz.cy = 0;

		if (lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo))
		{
			lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo  + lpCandInfo->dwOffset[0]);
			if( lpCandList->dwCount <= 0) {
				ShowWindow(lpUIExtra->uiCand.hWnd, SW_HIDE);
				ImmUnlockIMCC(lpIMC->hCandInfo);
				return;
			}
			lpStr = GETLPCANDSTR(lpCandList,1);
			hDC = GetDC(lpUIExtra->uiCand.hWnd);
			oldFont = SelectObject(hDC, hUIFont);
			GetTextExtentPoint(hDC,lpStr,_tcslen(lpStr),&sz);
			SelectObject(hDC, oldFont);
			ReleaseDC(lpUIExtra->uiCand.hWnd,hDC);
			if(_tcslen(lpStr))	sz.cx += 3*sz.cx/_tcslen(lpStr);
			ImmUnlockIMCC(lpIMC->hCandInfo);
		}
		if(wConversionSet & CONVERSION_SET_SHAPE) {	
			sz.cx = sizeCand[1].cx;
			sz.cy = sizeCand[1].cy;
		}
		else{
			if(sz.cx < lpUIExtra->uiCand.sz.cx)
					sz.cx = lpUIExtra->uiCand.sz.cx;
			sz.cy = lpUIExtra->uiCand.sz.cy;
		}

		GetCandPosFromCompWnd(lpUIExtra,&sz);

		MoveWindow(lpUIExtra->uiCand.hWnd,
			lpUIExtra->uiCand.pt.x,
			lpUIExtra->uiCand.pt.y,
			sz.cx,
			sz.cy,
			TRUE);
		ShowWindow(lpUIExtra->uiCand.hWnd,SW_SHOWNOACTIVATE);
		InvalidateRect(lpUIExtra->uiCand.hWnd,NULL,FALSE);
	}
}
コード例 #5
0
ファイル: HZmodeu.c プロジェクト: Archer-sys/freepy
BOOL CharHandleU( HIMC hIMC,WORD wParam,LONG lParam)
{
    LPINPUTCONTEXT lpIMC;
	LPCANDIDATEINFO lpCandInfo;
	LPCANDIDATELIST lpCandList;
	LPCOMPOSITIONSTRING lpCompStr;
	WORD wHead;

    lpIMC = ImmLockIMC(hIMC);
	lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo);
	lpCandList = (LPCANDIDATELIST)((LPSTR)lpCandInfo  + lpCandInfo->dwOffset[0]);
	lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC(lpIMC->hCompStr);
	

	if( !lpCandList->dwCount ){
		int i;
		
		
		wHead = wParam - _T('!');

		for( i=0;_tcslen(aPunct[wHead][i]);i++){
			_tcscpy(GETLPCANDSTR(lpCandList,i+2),aPunct[wHead][i]);
		}

		if( i == 0)  MessageBeep(0xFFFFFFFF );
		else if( i == 1 ){
			LPTSTR lpConvStr;
			lpConvStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szConvCompStr;
			_tcscpy(lpConvStr,aPunct[wHead][0]);
			MakeResultString(hIMC,TRUE);
		}
		else {
			LPTSTR lpStr;
			WORD wStrLen;

			lpStr = GETLPCOMPSTR(lpCompStr);
			wStrLen = _tcslen(lpStr);
			*(lpStr + wStrLen) = (TCHAR)wParam;
			*(lpStr + wStrLen +1) = _T('\0');

			lpStr = ((LPMYCOMPSTR)lpCompStr)->FreePYComp.szPaintCompStr;
			wStrLen = _tcslen(lpStr);
			*(lpStr + wStrLen) = (TCHAR)wParam;
			*(lpStr + wStrLen +1) = _T('\0');

			lpCandList->dwSelection = 0;
			lpCandList->dwCount = i;
			lpCandList->dwPageStart = 2;
			lpCandList->dwPageSize = 0;
			SelectForwardFromCand(hIMC,lpCandList);
		}
	}
	else{
		if( wParam == _T('=') || wParam == _T('.') || wParam == _T('>')) {
			SelectForwardFromCand(hIMC,lpCandList);
		}
		else if( wParam == _T('-') || wParam == _T(',') || wParam == _T('<')) {
			SelectBackwardFromCand(hIMC,lpCandList);
		}
		else if( wParam >= _T('0') && wParam <= _T('9') ){
			SelectCandFromCandlist(hIMC, wParam);
		}
	}

	ImmUnlockIMCC(lpIMC->hCompStr);
	ImmUnlockIMCC(lpIMC->hCandInfo);
	ImmUnlockIMC(hIMC);
	return TRUE;
}
コード例 #6
0
ファイル: uicand.cpp プロジェクト: wermanhme1990/xcommon
void PaintCandWindow( HWND hCandWnd)
{
	PAINTSTRUCT ps;
	HIMC hIMC = NULL;
	LPINPUTCONTEXT lpIMC = NULL;
	LPCANDIDATEINFO lpCandInfo = NULL;
	LPCANDIDATELIST lpCandList = NULL;
	HDC hDC = NULL;
	HFONT oldFont = NULL;
	RECT rc;
	LPTSTR lpstr = NULL;
	TCHAR szStr[100];
	int height,width;
	DWORD i;
	SIZE sz;
	HWND hSvrWnd = NULL;
	HBRUSH hBrush = NULL, hOldBrush = NULL;	
	HPEN hPen = NULL, hOldPen = NULL;	 

	hDC = BeginPaint(hCandWnd,&ps);
	oldFont = (HFONT)SelectObject(hDC, hUIFont);

	GetClientRect(hCandWnd,&rc);
	hBrush = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
	hOldBrush = (HBRUSH)SelectObject(hDC,hBrush);
	PatBlt(hDC,	rc.left, rc.top ,	rc.right, rc.bottom, PATCOPY);
	if(hBrush && hOldBrush)
	{
		SelectObject(hDC,hOldBrush);
	}

	hPen = (HPEN)GetStockObject(WHITE_PEN);
	hOldPen = (HPEN)SelectObject(hDC,hPen);
	MoveToEx(hDC,0,rc.bottom - GetSystemMetrics(SM_CXEDGE)/2,NULL);
	LineTo(hDC,rc.right-GetSystemMetrics(SM_CXEDGE)/2,rc.bottom - GetSystemMetrics(SM_CXEDGE)/2);
	LineTo(hDC,rc.right-GetSystemMetrics(SM_CXEDGE)/2,0);

	hPen = CreatePen(PS_SOLID ,0,RGB(128,128,128));
	SelectObject(hDC,hPen);
	MoveToEx(hDC,rc.right-GetSystemMetrics(SM_CXEDGE)/2,0,NULL);
	LineTo(hDC,0,0);
	LineTo(hDC,0,rc.bottom-GetSystemMetrics(SM_CYEDGE)/2);

	SelectObject(hDC,hOldPen);
	DeleteObject(hPen);

	hSvrWnd = (HWND)GetWindowLong(hCandWnd,FIGWL_SVRWND);

	if (hIMC = (HIMC)GetWindowLong(hSvrWnd,IMMGWL_IMC))
	{
		lpIMC = ImmLockIMC(hIMC);
		if (lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo))
		{
			DWORD dwMaxPaintPos;
			WORD  wCount;

			height = 3;
			width = 1;
			lpCandList = (LPCANDIDATELIST)((LPTSTR)lpCandInfo  + lpCandInfo->dwOffset[0]);
			SetBkMode(hDC, TRANSPARENT);
			SetPaintColor(hDC, wConversionMode);

			if(wConversionSet & CONVERSION_SET_SHAPE) 
			{
				lpstr = GETLPCANDSTR(lpCandList, 0);
				TextOut(hDC, width, height, lpstr, _tcslen(lpstr));
				GetTextExtentPoint(hDC, lpstr, _tcslen(lpstr), &sz);
				width += sz.cx * 3 / 2;
			}

			dwMaxPaintPos = lpCandList->dwPageStart +lpCandList->dwPageSize ;
			if(dwMaxPaintPos > lpCandList->dwCount + 2)  
				dwMaxPaintPos = lpCandList->dwCount + 2;

			wCount = 0;
			for (i = lpCandList->dwPageStart; i < dwMaxPaintPos; i++)
			{
				wCount++;
				lpstr = GETLPCANDSTR(lpCandList,i);
				GetTextExtentPoint(hDC,lpstr, _tcslen(lpstr), &sz);
				if(wConversionSet & CONVERSION_SET_SHAPE) 
				{
					_stprintf(szStr, TEXT("%d%s "), wCount % 10, lpstr);
					TextOut(hDC,width,height,szStr,_tcslen(szStr));
					GetTextExtentPoint(hDC,szStr,_tcslen(szStr),&sz);
					width += sz.cx;
				}
				else 
				{
					_stprintf(szStr,TEXT("%d %s "), wCount%10,lpstr);
					TextOut(hDC,width,height,szStr,_tcslen(szStr));
					GetTextExtentPoint(hDC,szStr,_tcslen(szStr),&sz);
					height += sz.cy;
				}
			}
			if(wConversionSet & CONVERSION_SET_SHAPE) 
			{
				lpstr = GETLPCANDSTR(lpCandList, 1);
				if(_tcslen(lpstr)) 
				{
					GetTextExtentPoint(hDC, TEXT("A"), 1, &sz);
					width = sizeCand[1].cx - sz.cx * 3 / 2;
					TextOut(hDC, width, height, lpstr, _tcslen(lpstr));
				}
			}

			ImmUnlockIMCC(lpIMC->hCandInfo);
		}
		ImmUnlockIMC(hIMC);
	}
	SelectObject(hDC, oldFont);
	EndPaint(hCandWnd, &ps);
}
コード例 #7
0
void ChangeCand(HWND hUIWnd)
{
    LPUIPRIV        lpUIPriv;
    HIMC            hIMC;
    CONST INPUTCONTEXT * lpIMC;
    LPCANDIDATEINFO lpCandInfo;
    LPCANDIDATELIST lpCandList;
    int             nCandWi, nCandHi;

    lpUIPriv = (LPUIPRIV)GetWindowLong(hUIWnd, IMMGWL_PRIVATE);
    if (!lpUIPriv) {
        return;
    }

    if (!(lpUIPriv->fdwUIFlags & UI_CAND_ALREADY_OPEN)) {
        return;
    }

    hIMC = (HIMC)GetWindowLong(hUIWnd, IMMGWL_IMC);
    if (!hIMC) {
        return;
    }

    lpIMC = (CONST INPUTCONTEXT *)ImmLockIMC(hIMC);
    if (!lpIMC) {
        return;
    }

    if (!lpIMC->hCandInfo) {
        ImmUnlockIMC(hIMC);
        ImmUnlockIMCC(lpIMC->hCandInfo);
	    return;
    }

    lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC(lpIMC->hCandInfo);
    if (!lpCandInfo) {
        ImmUnlockIMCC(lpIMC->hCandInfo);
		ImmUnlockIMC(hIMC);
	    return;
    }

    lpCandList = (LPCANDIDATELIST)((LPBYTE)lpCandInfo + lpCandInfo->dwOffset[0]);

    lpUIPriv->lpCandList = lpCandList;

    nCandWi = lpUIPriv->nCandWi;
    nCandHi = lpUIPriv->nCandHi;

	GetWorkArea(&g_sImeUIG.rcWorkArea);
       
    if (nCandWi != lpUIPriv->nCandWi ||
        nCandHi != lpUIPriv->nCandHi) {
			lpUIPriv->nCandWi = g_sImeUIG.rcWorkArea.right;
			lpUIPriv->nCandHi = g_sImeUIG.nCandLineHi;
        SetWindowPos(lpUIPriv->hCandWnd, NULL, 0, 0,
                     g_sImeUIG.rcWorkArea.right, g_sImeUIG.nCandLineHi,
                     SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOZORDER);
    }

	// Processeing page/line up/down
	if(lpCandList->dwStyle == 1) {//line down
		if(lpCandList->dwSelection < lpCandList->dwCount-1 ) 
			lpCandList->dwSelection++;
		if(lpCandList->dwSelection > (lpCandList->dwPageStart + lpCandList->dwPageSize-1))
			lpCandList->dwStyle = 3; // do page down later
		
			
	}else if(lpCandList->dwStyle == 2) { // line up
		if (lpCandList->dwSelection > 0) 
			lpCandList->dwSelection--;
		if (lpCandList->dwSelection < lpCandList->dwPageStart) 
			lpCandList->dwStyle = 4; // do page up later
	
	}
	if(lpCandList->dwStyle == 3) {//page down
		if (lpCandList->dwPageStart < (lpCandList->dwCount - lpCandList->dwPageSize)) {
			lpCandList->dwPageStart += lpCandList->dwPageSize;
			lpCandList->dwSelection = lpCandList->dwPageStart;
			
		}
	}else if(lpCandList->dwStyle == 4) {//page up
		int i,nCharCnt=0;
		nCandWi = g_sImeUIG.rcWorkArea.right - g_sImeUIG.nCandCharWi *2;
		for( i=0;i<32; i++){
			
			if(lpCandList->dwPageStart > 0) 
				lpCandList->dwPageStart--;
			else
				break;
			nCharCnt += wcslen(GETLPCANDSTR(lpCandList, lpCandList->dwPageStart) )+ 1;
			if(nCandWi - nCharCnt * g_sImeUIG.nCandCharWi < g_sImeUIG.nCandCharWi*2){
				lpCandList->dwPageStart++;
				break;
			}
			
			
		}
		
		if(lpCandList->dwSelection > lpCandList->dwPageStart +i-1 )
			lpCandList->dwSelection = lpCandList->dwPageStart;
		
	}

	lpCandList->dwStyle = 0; // reset lpCandList->dwStyle
    InvalidateRect(lpUIPriv->hCandWnd, NULL, TRUE);
    ShowCand(hUIWnd, SW_SHOWNOACTIVATE);

    ImmUnlockIMCC(lpIMC->hCandInfo);
    ImmUnlockIMC(hIMC);

    return;
}
コード例 #8
0
void DrawCandText(HDC hDC, LPCUIPRIV lpUIPriv)
{
    LPCANDIDATELIST lpCandList = lpUIPriv->lpCandList;
    DWORD           dwStart, dwEnd, dwSelect;
    int             i;
    RECT            rcCandLine;
	LPCWSTR         szCandStr;
	LPCWSTR			szRScroll=_T(">>"), szLScroll=_T("<<");
	   

    dwStart = lpCandList->dwPageStart;

    dwEnd = dwStart +  32; //MAX_PAGE =32//lpCandList->dwPageSize;
    dwEnd = dwEnd > lpCandList->dwCount ? lpCandList->dwCount : dwEnd;

    dwSelect = lpCandList->dwSelection;


    SetBkColor(hDC, g_sImeUIG.crWindow);
    SetTextColor(hDC, g_sImeUIG.crWindowText);

	
	rcCandLine.top = 0;
	rcCandLine.bottom = g_sImeUIG.nCandLineHi;
	rcCandLine.left = 0;
	rcCandLine.right = g_sImeUIG.rcWorkArea.right;
	g_sImeUIG.nCandDx[0] = lpUIPriv->rcCandText.left; // Reserved space for left arrow
    
    
	
	if(lpCandList->dwPageStart !=0)
		ExtTextOut(hDC, 0, 0, ETO_OPAQUE, &rcCandLine, szLScroll, 2, NULL);  // Draw left scroll symbol and fill background
	else 
		ExtTextOut(hDC, 0, 0, ETO_OPAQUE, &rcCandLine, NULL, 0, NULL);  // Fill background color of candtext area.

  
    for (i = 0; dwStart < dwEnd; dwStart++, i++) {

		szCandStr =  GETLPCANDSTR(lpCandList, dwStart);// *(LPCTSTR)((LPBYTE)lpCandList + lpCandList->dwOffset[dwStart]);
		int rlen = wcslen(szCandStr);
		g_sImeUIG.nCandDx[i+1] = g_sImeUIG.nCandDx[i] + (rlen + 1)  * g_sImeUIG.nCandCharWi;

		if(g_sImeUIG.nCandDx[i+1] > g_sImeUIG.rcWorkArea.right - g_sImeUIG.nCandCharWi*2) 
			break;
		
	
        if (dwSelect == dwStart) {
			rcCandLine.left = g_sImeUIG.nCandDx[i];
            rcCandLine.right =  g_sImeUIG.nCandDx[i] + rlen  * g_sImeUIG.nCandCharWi;
            SetBkColor(hDC, g_sImeUIG.crHighlight);
            SetTextColor(hDC, g_sImeUIG.crHighlightText);
        } else {
			rcCandLine.left = g_sImeUIG.nCandDx[i]; 
			rcCandLine.right =  g_sImeUIG.nCandDx[i] + rlen  * g_sImeUIG.nCandCharWi;
        }
		
        ExtTextOut(hDC, g_sImeUIG.nCandDx[i],  0,
                  ETO_OPAQUE, &rcCandLine, szCandStr, rlen, NULL);
 
        if (dwSelect == dwStart) {
            SetBkColor(hDC, g_sImeUIG.crWindow);
            SetTextColor(hDC, g_sImeUIG.crWindowText);
        }
    }
	
	lpCandList->dwPageSize = i;

	if(lpCandList->dwPageStart + lpCandList->dwPageSize != lpCandList->dwCount) {
		rcCandLine.left =  g_sImeUIG.rcWorkArea.right -  g_sImeUIG.nCandCharWi*2;
		rcCandLine.right =  g_sImeUIG.rcWorkArea.right;
		ExtTextOut(hDC, rcCandLine.left, 0, ETO_OPAQUE, &rcCandLine, szRScroll, 2, NULL);  // Fill background color of candtext area.
	}


    return;
}