在第三版和第五版上分别响应CEikEdwin的HandlePointerEventL事件

Symbian UI 编辑框适配
本文介绍如何在Symbian平台使用 CEikEdwin 控件创建数字输入编辑框,并通过处理触控事件实现焦点切换。适用于5230、6730等设备。

1.定义两个CEikEdwin
CEikEdwin* iEdwin1;
CEikEdwin* iEdwin2;


    enum TControlIDS
        {
        EfirstEd, E2ndEd
        };

//创建:
    //动态创建名称编辑框
    iEdwin1 = new (ELeave) CEikEdwin;
    iEdwin1->SetContainerWindowL(*this);
    iEdwin1->ConstructL(EAknEditorFlagDefault, 11, 11, 1);
    iEdwin1->SetFocus(ETrue);
    iEdwin1->SetAknEditorAllowedInputModes(EAknEditorNumericInputMode);
    iEdwin1->SetAknEditorInputMode(EAknEditorNumericInputMode);
    iEdwin1->SetAknEditorCurrentInputMode(EAknEditorNumericInputMode);
    iEdwin1->SetAknEditorNumericKeymap(EAknEditorPlainNumberModeKeymap);
    iEdwin1->ActivateL();

    iEdwin2 = new (ELeave) CEikEdwin;
    iEdwin2->SetContainerWindowL(*this);
    iEdwin2->ConstructL(EAknEditorFlagDefault, 11, 11, 1);
    iEdwin2->SetFocus(EFalse);
    iEdwin2->ActivateL();




在Containers中设置实现:
void CloginContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent)
    {
    TBool penEnabled = EFalse;
    RLibrary avkonDll;
    if (avkonDll.Load(_L( "avkon.dll" )) == KErrNone)
        {
#ifdef __WINS__
        TLibraryFunction PenEnabled = avkonDll.Lookup( 3184 );
#else
        TLibraryFunction PenEnabled = avkonDll.Lookup(4251);
#endif
        if (PenEnabled != NULL)
            {
            penEnabled = PenEnabled();
            }
        avkonDll.Close();
        }

    if (!penEnabled)
        {
        return;
        }

    // Remove last focus
    CCoeControl* iFocusedControl;
    iFocusedControl = ComponentControl(iCurrentControl);

    if (aPointerEvent.iType == TPointerEvent::EButton1Up)
        {
        TPoint inewPointer = aPointerEvent.iPosition;
        if (iEdwin1->Rect().Contains(inewPointer))
            if (iCurrentControl != EfirstEd)
                {
                iCurrentControl = EfirstEd;
                iFocusedControl->SetFocus(EFalse);
                iEdwin1->SetFocus(ETrue, EDrawNow);
                }

        if (iEdwin2->Rect().Contains(inewPointer))
            if (iCurrentControl != E2ndEd)
                {
                iCurrentControl = E2ndEd;
                iFocusedControl->SetFocus(EFalse);
                iEdwin2->SetFocus(ETrue, EDrawNow);
                }
        }
    CCoeControl::HandlePointerEventL(aPointerEvent);
    }




经过这个,在v3和v5上都可以适用了。
测试机型:5230、6730

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值