输入法状态总结


今天再次研究了一下CEikEdwin的输入法状态。总结了一下代码。

inputImage是输入法状态。shiftImage是Shift状态。

 

void CQGEditBox::DrawInputMethodIndicator(const TRect& aRect)
 {
 MAknEditingStateIndicator* editingState = CAknEnv::Static()->EditingStateIndicator();
 if (!editingState)
  return;

 CAknIndicatorContainer* indicator = editingState->IndicatorContainer();
 if (!indicator)
  return;

 TInt inputImage = -1;
 if(indicator->IndicatorState(S_uid(EAknNaviPaneEditorIndicatorPinyin)))
  {
  inputImage = iImage_input[0];
  }
 else if(indicator->IndicatorState(S_uid(EAknNaviPaneEditorIndicatorStroke)))
  {
  inputImage = iImage_input[1];
  }
 else if(indicator->IndicatorState(S_uid(EAknNaviPaneEditorIndicatorUpperCase)) || 
   indicator->IndicatorState(S_uid(EAknNaviPaneEditorIndicatorUpperCaseSelect)) || 
   indicator->IndicatorState(S_uid(EAknNaviPaneEditorIndicatorQwertyShift)))
  {
  inputImage = iImage_input[2];
  }
 else if(indicator->IndicatorState(S_uid(EAknNaviPaneEditorIndicatorTextCase)) || 
   indicator->IndicatorState(S_uid(EAknNaviPaneEditorIndicatorTextCaseSelect)))
  {
  inputImage = iImage_input[3];
  }
 else if(indicator->IndicatorState(S_uid(EAknNaviPaneEditorIndicatorLowerCase)) || 
   indicator->IndicatorState(S_uid(EAknNaviPaneEditorIndicatorLowerCaseSelect)))
  {
  inputImage = iImage_input[4];
  }
 else if(indicator->IndicatorState(S_uid(EAknNaviPaneEditorIndicatorNumberCase)) || 
   indicator->IndicatorState(S_uid(EAknNaviPaneEditorIndicatorNumberCaseSelect)))
  {
  inputImage = iImage_input[5];
  }

 TInt shiftImage = -1;
 if(indicator->IndicatorState(S_uid(111)))
  {
  shiftImage = iImage_shift[0];
  }
 else if(indicator->IndicatorState(S_uid(112)))
  {
  shiftImage = iImage_shift[1];
  }

 TSize size = Graphics()->SurfaceSize(inputImage);
 TPoint pos(aRect.iTl.iX, aRect.iTl.iY-size.iHeight);
 Graphics()->DrawSurface(pos, inputImage);

 pos.iX += size.iWidth;
 Graphics()->DrawSurface(pos, shiftImage);
 }

 

====================================================================================

Symbian设置CEikEdwin字体

先说第一种,它只适用于2nd

           TCharFormat charFormat; 
    Mem::FillZ(&charFormat, sizeof (TCharFormat)); 
    TCharFormatMask   charMask; 
    Mem::FillZ(&charMask, sizeof (TCharFormatMask));   
    TFontSpec sFontSpec = PocoUtils::NormalFont()->FontSpecInTwips(); 
    charFormat.iFontSpec.iTypeface =  sFontSpec.iTypeface; 
    charMask.SetAttrib(EAttFontTypeface); 
    charFormat.iFontSpec.iHeight = sFontSpec.iHeight; 
    charMask.SetAttrib(EAttFontHeight); 
    charFormat.iFontPresentation.iTextColor = KDarkGreenColour; 
    charMask.SetAttrib(EAttColor); 
    charFormat.iFontPresentation.iStrikethrough = (TFontStrikethrough)EFalse; 
    charMask.SetAttrib(EAttFontStrikethrough);   
    charFormat.iFontPresentation.iUnderline = (TFontUnderline)EFalse; 
    charMask.SetAttrib(EAttFontUnderline);

    CCharFormatLayer* FormatLayer1 = CCharFormatLayer::NewL(charFormat,charMask); 
    iTitle->SetCharFormatLayer(FormatLayer1); 
再来介绍第二种,它使用于2nd和3rd


CFont* font=NULL; 
#ifdef _UIQ3_SDK_ 
            TFontSpec fontSpec=CEikonEnv::Static()->NormalFont()->FontSpecInTwips(); 
            fontSpec.iHeight-=fontSpec.iHeight/4; 
            fontSpec.iFontStyle.SetPosture(EPostureUpright); 
            CEikonEnv::Static()->ScreenDevice()->GetNearestFontInTwips(font,fontSpec); 
#else 
            font=CEikonEnv::Static()->NormalFont(); 
#endif 
            CGlobalText* globalText = (CGlobalText*)edwin->Text(); 
            TCharFormat charFormat; 
            Mem::FillZ(&charFormat,  sizeof (TCharFormat)); 
            TCharFormatMask charMask; 
            Mem::FillZ(&charMask,  sizeof (TCharFormatMask)); 
            TFontSpec sFontSpec = font->FontSpecInTwips(); 
            charFormat.iFontSpec.iTypeface = sFontSpec.iTypeface; 
            charMask.SetAttrib(EAttFontTypeface); 
            charFormat.iFontSpec.iHeight = sFontSpec.iHeight; 
            charMask.SetAttrib(EAttFontHeight); 
            charFormat.iFontPresentation.iTextColor = KDarkGreenColour; 
            charMask.SetAttrib(EAttColor); 
            globalText->ApplyCharFormatL(charFormat,charMask,0,edwin->TextLength());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值