亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ime.cpp

?? Windows CE 6.0 Word Application 源碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
			fInvertStyleUsed = TRUE;
		}
	}
	else // default styles when no IMEShare.dll exist.
#endif //MACPORT
	{
//#ifndef MACPORT
#ifdef JUPITER
defaultStyle:
#endif
		switch ( attribute )
		{										// Apply underline style.
			case ATTR_INPUT:
			case ATTR_CONVERTED:
				CF.dwEffects |= CFE_UNDERLINE;
				CF.bUnderlineType = CFU_UNDERLINEDOTTED;
				break;
			case ATTR_TARGET_NOTCONVERTED:
				CF.dwEffects |= CFE_UNDERLINE;
				CF.bUnderlineType = CFU_UNDERLINE;
				break;
			case ATTR_TARGET_CONVERTED:			// Target *is* selection.			
			{
				CF.dwEffects &= ~CFE_AUTOCOLOR;
				CF.crTextColor = ed.TxGetSysColor(COLOR_HIGHLIGHTTEXT);

				CF.dwEffects &= ~CFE_AUTOBACKCOLOR;
				CF.crBackColor = ed.TxGetSysColor(COLOR_HIGHLIGHT);

				fInvertStyleUsed = TRUE;
			}
			break;
		}
	}
	return fInvertStyleUsed;
#else
	return TRUE;
#endif
}

/*
 *	HRESULT CIme_Lev3::IMENotify( const WPARAM wparam, const LPARAM lparam,
 *					CTxtEdit &ed)
 *
 *	@mfunc
 *		Handle Level 3 WM_IME_NOTIFY messages.
 *
 *	@comm
 *		Currently we are only interested in knowing when to update
 *		the n window's position.
 *
 *	@rdesc
 *		HRESULT-S_FALSE for DefWindowProc processing, S_OK if not.
 */
HRESULT CIme_Lev3::IMENotify(
	const WPARAM wparam,		// @parm associated with message.
	const LPARAM lparam,		// @parm associated with message.
	CTxtEdit &ed)				// @parm the containing text edit.
{
	TRACEBEGIN(TRCSUBSYSFE, TRCSCOPEINTERN, "CIme_Lev3::IMENotify");

	if ( IMN_OPENCANDIDATE == wparam || IMN_CLOSECANDIDATE == wparam  )
	{
		Assert ( 0 != lparam );

#ifndef MACPORT

		HIMC			hIMC;							// Host's IME context.

		INT				index;							// Candidate window index.
		CANDIDATEFORM	cdCandForm;

 		CTxtSelection	*psel;
		POINT			caretPt;

		hIMC = ed.TxImmGetContext();				// Get host's IME context.

		if ( hIMC )
		{
													// Convert bitID to INDEX.
			for (index = 0; index < 32; index++ )	//  because of API.
			{
				if ( 0 != ((1 << index) & lparam) )
					break;
			}
			Assert ( ((1 << index) & lparam) == lparam);	// Only 1 set?
			Assert ( index < 32 );

			if ( IMN_OPENCANDIDATE == wparam)	    // Set candidate to caret.
			{
				GetCaretPos( &caretPt );			// Start at caret.
				psel = ed.GetSel();	
				cdCandForm.dwStyle = CFS_CANDIDATEPOS;
				// Move pt below descent.
				if ( psel && psel->GetCurrentDescent() >= 0 && psel->GetCaretHt() > 1 )
				{
					// change style to CFS_EXCLUDE, this is to
					// prevent the candidate window from covering
					// the current selection.
					cdCandForm.dwStyle = CFS_EXCLUDE;
					cdCandForm.rcArea.left = caretPt.x;

					// FUTURE: for verticle text, need to adjust
					// the rcArea to include the character width.
					cdCandForm.rcArea.right =
						cdCandForm.rcArea.left + 2;
					cdCandForm.rcArea.top = caretPt.y;
					caretPt.y += psel->GetCaretHt() + 2;
					cdCandForm.rcArea.bottom = caretPt.y;
				}

				// Most IMEs will have only 1, #0, candidate window. However, some IMEs
				//  may want to have a window organized alphabetically, by stroke, and
				//  by radical.
				cdCandForm.dwIndex = index;				
				cdCandForm.ptCurrentPos = caretPt;
				pImmSetCandidateWindow(hIMC, &cdCandForm);

				// GuyBark JupiterJ IME:
				// Make sure we know the index of the open candidate list.
				ed._ime->_dwIndex = index;
			}
			else									// Reset back to CFS_DEFAULT.
			{
				if ( pImmGetCandidateWindow( hIMC, index, &cdCandForm)
						&& CFS_DEFAULT != cdCandForm.dwStyle )
				{
					cdCandForm.dwStyle = CFS_DEFAULT;
					pImmSetCandidateWindow(hIMC, &cdCandForm);
				}

				// GuyBark JupiterJ IME:
				// The candidate list is about to close. Make sure we know that later.
				ed._ime->_dwIndex = 0xFFFF;
			}

			ed.TxImmReleaseContext( hIMC );			// Done with IME context.
		}
#endif
	}	

	return S_FALSE;									// Allow DefWindowProc
}													//  processing.

/*
 *  BOOL CIme_Lev3::IMESetCandidateWindowPos(CTxtEdit &ed)
 *	
 *  GUYBARK ADD THIS!
 *		
 *  Move the hwx candidate window to a stored cp.
 *
 *  Returns FALSE if no errors, else TRUE
 */
BOOL CIme_Lev3::IMESetCandidateWindowPos(CTxtEdit &ed)
{
    CTxtSelection   *psel;
    CANDIDATEFORM   cdCandForm;
    HIMC            hIMC;
    POINT           caretPt;

    BOOL bErr = TRUE;

    // Take exactly the same action here, as when the candidate window first appears.

    // Get host's IME context.
    hIMC = ed.TxImmGetContext();

    if(hIMC)
    {
        // Use the cp stored when the when the caret was last moved.
        caretPt = ed._ime->_pt;

        if(ed._ime->_dwIndex == 0xFFFF)
        {
            ed._ime->_dwIndex = 0;
        }

        cdCandForm.dwStyle = CFS_CANDIDATEPOS;

        psel = ed.GetSel();	

        // Move pt below descent.
        if ( psel && psel->GetCurrentDescent() >= 0 && psel->GetCaretHt() > 1 )
        {
            // Change style to CFS_EXCLUDE, this is to prevent the
            // candidate window from covering the current selection.

            cdCandForm.dwStyle     = CFS_EXCLUDE;
            cdCandForm.rcArea.left = caretPt.x;

            // FUTURE: for verticle text, need to adjust the rcArea
            // to include the character width.

            cdCandForm.rcArea.right  = cdCandForm.rcArea.left + 2;
            cdCandForm.rcArea.top    = caretPt.y;

            caretPt.y += psel->GetCaretHt() + 2;
            cdCandForm.rcArea.bottom = caretPt.y;
        }

        // Most IMEs will have only 1, #0, candidate window. However, some IMEs may
        // want to have a window organized alphabetically, by stroke, and by radical.

        // Use the index of the last list opened.
        cdCandForm.dwIndex      = ed._ime->_dwIndex;
        cdCandForm.ptCurrentPos = caretPt;

        // Now move the window!
        pImmSetCandidateWindow(hIMC, &cdCandForm);

        // Done with IME context.
        ed.TxImmReleaseContext(hIMC);

        // Assume that all worked ok.
        bErr = FALSE;
    }

    return bErr;
}

/*
 *	BOOL IMEHangeulToHanja ( CTxtEdit &ed, IUndoBuilder &undobldr )
 *	
 *	@func
 *		Initiates an IME composition string edit to convert Korean Hanguel to Hanja.
 *	@comm
 *		Called from the message loop to handle VK_KANJI_KEY.
 *
 *	@devnote
 *		We decide if we need to do a conversion by checking:
 *		- the Fonot is a Korean font,
 *		- the character is a valid SBC or DBC,
 *		- pImmEscape accepts the character and bring up a candidate window
 *
 *	@rdesc
 *		BOOL - FALSE for no conversion. TRUE if OK.
 */
BOOL IMEHangeulToHanja (
	CTxtEdit &ed ,				// @parm the containing text edit.
	IUndoBuilder &undobldr)		// @parm required to modify the text.
{
	TRACEBEGIN(TRCSUBSYSFE, TRCSCOPEINTERN, "IMEHangeulToHanja");

#ifndef MACPORT

 	CTxtSelection		* const psel	= ed.GetSel();
	long		CurrentChar;
	HDC			hdc;
	CCcs		*pccs;			// Font cache.
	int			result = FALSE;

	if ( ed.IsIMEComposition() || !fHaveIMMProcs || !psel )
		return FALSE;

	// Collapse to cpMin
	psel->Collapser(tomStart);		

	// get the current character		
	CurrentChar = psel->_rpTX.GetChar();

		// check if there is any Hanja conversion
	HKL		hKL = GetKeyboardLayout(0);
	HIMC	hIMC = ed.TxImmGetContext();
	LONG	xWidth = dxCaret;

	result = FALSE;

	if ( hIMC )
	{
		result = pImmEscape(hKL, hIMC, IME_ESC_HANJA_MODE, &CurrentChar);
		ed.TxImmReleaseContext( hIMC );
	}

	if (result)
	{
		// advance one char to get the correct format
		psel->SetExtend( FALSE );
		psel->Advance( 1 );

		// get the Hanguel character width
  		hdc = ed.TxGetDC();				// Get the font cache
		if ( hdc )
		{
			pccs = fc().GetCcs(hdc, psel->GetCF(), ed._pdp->GetZoomNumerator(),
				ed._pdp->GetZoomDenominator(), GetDeviceCaps(hdc, LOGPIXELSY));
			if( pccs )					// If font cache exist...
			{											
				pccs->Include( (TCHAR)CurrentChar, xWidth);
				pccs->Release();
			}
			ed.TxReleaseDC( hdc );
		}

		// start the CIme_HangeulToHanja composition mode
		ed._ime = new CIme_HangeulToHanja ( ed, xWidth );
		if ( ed.IsIMEComposition() )					
			ed._ime->StartComposition ( ed, undobldr );
	}
	else
	{
		ed.Sound();	
	}
	return result;

#else	// MACPORT
	return FALSE;
#endif
}

/*
 *	CIme_HangeulToHanja::CIme_HangeulToHanja()
 *
 *	@mfunc
 *		CIme_HangeulToHanja Constructor.
 *
 *	@comm
 *		Needed to save Hangeul character width for Block caret
 *
 */
 CIme_HangeulToHanja::CIme_HangeulToHanja( CTxtEdit &ed , LONG xWidth )	:
	CIme_Lev3( ed )
{
	_xWidth = xWidth;
}

/*
 *	HRESULT CIme_HangeulToHanja::StartComposition( CTxtEdit &ed, IUndoBuilder &undobldr )
 *
 *	@mfunc
 *		Begin CIme_HangeulToHanja composition string processing.		
 *
 *	@comm
 *		Call Level3::StartComposition.  Then setup the Korean block
 *		caret for the Hanguel character.
 *
 *	@rdesc
 *		Need to adjust _ichStart and _cchCompStr to make the Hanguel character
 *		"become" a composition character.
 *
 *	@rdesc
 *		HRESULT-S_FALSE for DefWindowProc processing, S_OK if not.
 */
HRESULT CIme_HangeulToHanja::StartComposition(
	CTxtEdit &ed ,				// @parm the containing text edit.
	IUndoBuilder &undobldr)		// @parm required to modify the text.
{
	TRACEBEGIN(TRCSUBSYSFE, TRCSCOPEINTERN, "CIme_HangeulToHanja::StartComposition");
	HRESULT				hr;
	CTxtSelection		* const psel	= ed.GetSel();
	

	hr = CIme_Lev3::StartComposition( ed, undobldr );

	// fix up starting point to select the current character
	if (_ichStart)
		_ichStart--;
	_cchCompStr = 1;
	
	// Set-up Korean Block cursor.
	if ( psel )
	{
		DWORD				cp = psel->GetCpMin();
		POINT				ptCurrentPos;		// caret position of previous character
		INT					CurrentCaretHt;		// caret height of current character
		INT					NewCaretHt;			// caret height of previous character
		INT					CurrentDescent;		// descent of current character
		INT					NewDescent;			// descent  of previous character


		psel->SetSelection(	cp, cp );
		CurrentDescent = psel->GetCurrentDescent();
		CurrentCaretHt = (INT)psel->GetCaretHt();

		// move the cp back since we moved it forward in IMEHangeulToHanja
		// to get the Hangeul character and format
		if (cp)
			cp--;

		psel->SetSelection(	cp, cp );
		NewDescent = psel->GetCurrentDescent();
		NewCaretHt = (INT)psel->GetCaretHt();

		psel->ShowCaret(FALSE);				// Because create turns off

		if ( ::GetCaretPos( &ptCurrentPos ) && CurrentCaretHt != NewCaretHt )
		{
			// current character font size is bigger, adjust the caret position
			// before using the new caret height
			ptCurrentPos.y -= (( CurrentCaretHt - NewCaretHt ) -
				( CurrentDescent - NewDescent ));
			ed.TxSetCaretPos ( ptCurrentPos.x, ptCurrentPos.y );
			NewCaretHt = CurrentCaretHt;
		}

		SetIMECaretWidth ( _xWidth );					// setup Korean block caret width
		ed.TxCreateCaret(0, (INT) _xWidth, NewCaretHt);
		ed.TxSetCaretPos ( ptCurrentPos.x, ptCurrentPos.y );
 		psel->ShowCaret(TRUE);

	}

	return hr;

}
/*
 *	HRESULT CIme_HangeulToHanja::CompositionString( const LPARAM lparam, CTxtEdit &ed,
 *				IUndoBuilder &undobldr )
 *
 *	@mfunc
 *		Handle CIme_HangeulToHanja WM_IME_COMPOSITION messages.
 *
 *	@comm
 *		call CIme_Lev3::CompositionString to get rid of the selected Hanguel character,
 *		then setup the format for the next Composition message.
 *
 *	@devnote
 *		When the next Composition message comes in and that we are no longer in IME,
 *		the new character will use the format as set here.
 *
 *
 */
HRESULT CIme_HangeulToHanja::CompositionString(
	const LPARAM lparam,		// @parm associated with message.
	CTxtEdit &ed,				// @parm the containing text edit.
	IUndoBuilder &undobldr)	// @parm required to modify the text.
{
	TRACEBEGIN(TRCSUBSYSFE, TRCSCOPEINTERN, "CIme_HangeulToHanja::CompositionString");
	
	CIme_Lev3::CompositionString( lparam, ed, undobldr);

	CTxtSelection * const	psel = ed.GetSel();

	if (psel)
		psel->Set_iCF(_iFormatSave);

	return S_OK;
}
/*
 *	HRESULT CIme_Protected::CompositionString( const LPARAM lparam, CTxtEdit &ed,
 *				IUndoBuilder &undobldr )
 *
 *	@mfunc
 *		Handle CIme_Protected WM_IME_COMPO

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本va欧美va瓶| 欧美日韩高清一区二区三区| 综合色天天鬼久久鬼色| 国产欧美一区二区三区在线看蜜臀| 精品久久久三级丝袜| 久久久久九九视频| 亚洲女人的天堂| 免费看日韩a级影片| 91毛片在线观看| 青青草成人在线观看| 亚洲精品欧美综合四区| 亚洲成人av中文| 成人免费福利片| 在线播放欧美女士性生活| 国产精品国产三级国产| 亚洲精品高清在线观看| 久久精品噜噜噜成人av农村| 欧美私模裸体表演在线观看| 亚洲精品一区二区三区蜜桃下载| 天天综合网天天综合色| 3d动漫精品啪啪1区2区免费| 爽好多水快深点欧美视频| 色域天天综合网| 国产精品乱码一区二区三区软件 | 9色porny自拍视频一区二区| 欧美精品九九99久久| 亚洲人123区| 欧美伦理电影网| 激情都市一区二区| 日韩精品中午字幕| 国产精品一区二区果冻传媒| 欧美电影影音先锋| 成人午夜免费电影| 日本成人超碰在线观看| 91视频在线观看| 国产精品久久久久久久午夜片| 91捆绑美女网站| 奇米在线7777在线精品| 亚洲桃色在线一区| 欧美一区二区视频免费观看| 国产成人精品网址| 日韩不卡一区二区| 国产精品欧美经典| 欧美videos中文字幕| 91在线观看地址| 国产精品99久久久久久久女警| 亚洲五月六月丁香激情| 91超碰这里只有精品国产| 国产成人综合在线播放| 日韩精品一级中文字幕精品视频免费观看 | 国产a精品视频| 日韩电影一区二区三区| 一二三区精品视频| 亚洲一区在线观看免费观看电影高清 | 欧美性猛片xxxx免费看久爱| 国产主播一区二区| 亚洲国产成人va在线观看天堂| 国产精品色哟哟| 中文在线免费一区三区高中清不卡| 欧美区在线观看| 欧美日韩国产在线观看| 91久久一区二区| 欧美精品日韩精品| 日韩小视频在线观看专区| 欧美精品高清视频| 精品国产一区a| 日本一区二区三区在线不卡| 国产精品无人区| 国产欧美精品一区| 国产亚洲欧洲997久久综合| 国产亚洲欧美激情| 国产精品伦一区| 免费一级片91| 欧美电影一区二区| 夜夜揉揉日日人人青青一国产精品| 综合在线观看色| 国产精品综合网| 日韩欧美亚洲另类制服综合在线| 国产精品女上位| 青椒成人免费视频| 麻豆成人免费电影| 狠狠久久亚洲欧美| 高清成人免费视频| 日韩不卡在线观看日韩不卡视频| 国产精品色噜噜| 成人美女视频在线看| 国产精品无圣光一区二区| 国产传媒一区在线| 欧美久久久久中文字幕| 欧美激情一区在线| 国产高清精品久久久久| 一本色道久久综合精品竹菊| 亚洲国产精品精华液2区45| 日韩一区中文字幕| 91丝袜美腿高跟国产极品老师 | 亚洲精品成a人| 91麻豆高清视频| 中文字幕第一区| 91免费视频观看| 亚洲午夜精品在线| 欧美在线观看一区二区| 国产欧美综合在线| 99久久久精品| 一区二区三区不卡在线观看 | 国产mv日韩mv欧美| 亚洲精品一区二区精华| 蜜桃av噜噜一区| 26uuu精品一区二区在线观看| 极品少妇xxxx精品少妇| 日韩欧美国产一区二区在线播放 | 日本aⅴ亚洲精品中文乱码| 欧美一区二区三区视频在线观看 | 一区二区三区在线影院| 久久久精品影视| 欧美日韩中文字幕一区| 成人a区在线观看| 日韩精品午夜视频| 亚洲激情第一区| 日本道在线观看一区二区| 日韩专区一卡二卡| 国产精品久久网站| 91精品国产综合久久香蕉的特点| 精品亚洲国产成人av制服丝袜| 久久久久久久久久久久久女国产乱 | 91久久香蕉国产日韩欧美9色| 久久精品国产亚洲a| 欧美激情艳妇裸体舞| 在线观看日韩av先锋影音电影院| 丝袜美腿亚洲综合| 一区二区在线免费观看| 国产欧美一区二区精品忘忧草 | 成人av电影免费在线播放| 性欧美疯狂xxxxbbbb| 国产精品不卡一区二区三区| 精品久久一区二区三区| 欧美午夜精品久久久| 成人教育av在线| 国产乱子伦视频一区二区三区| 亚洲不卡一区二区三区| 一区二区三区在线视频免费观看| 国产亚洲一本大道中文在线| 欧美三级韩国三级日本三斤| 色一情一伦一子一伦一区| 不卡区在线中文字幕| av在线播放不卡| 91免费精品国自产拍在线不卡| 国产成人超碰人人澡人人澡| 国产精品538一区二区在线| 久久精品国产精品青草| 全国精品久久少妇| 国产盗摄一区二区| 在线免费观看日本一区| 911精品国产一区二区在线| 日韩欧美中文一区| 日本一区二区不卡视频| 一区二区三区欧美在线观看| 捆绑调教美女网站视频一区| 国产69精品久久久久777| 色噜噜狠狠成人中文综合 | 久久成人羞羞网站| 波多野结衣欧美| 欧美另类久久久品| 国产精品色婷婷| 麻豆精品国产传媒mv男同| 国产精品1区2区| 欧美日韩国产成人在线免费| 久久久久久亚洲综合| 性久久久久久久久久久久| 成人在线综合网| 日韩精品一区二区三区在线观看 | 欧美色爱综合网| 亚洲欧美区自拍先锋| 国产乱色国产精品免费视频| 色哟哟在线观看一区二区三区| 国产夜色精品一区二区av| 日韩精品国产精品| 欧美日韩精品高清| 一区二区三区免费网站| 成人av电影观看| 中文字幕一区二区三区在线不卡| 久久精品二区亚洲w码| 欧美一区二区视频在线观看2022| 一区二区三区在线不卡| 一本高清dvd不卡在线观看| 《视频一区视频二区| 91免费国产在线观看| 亚洲人精品午夜| 欧美日韩午夜在线视频| 亚洲电影一级片| 色婷婷亚洲综合| 精品久久久久久最新网址| 国产三级精品三级在线专区| 天堂影院一区二区| 日韩久久精品一区| 懂色av中文一区二区三区| 国产精品传媒在线| 在线视频国内一区二区| 日本美女一区二区| 亚洲国产高清aⅴ视频| 欧美日韩一区二区电影|