zoukankan      html  css  js  c++  java
  • S60 C++编程 初学笔记(1)标签控件

          刚开始接触S60,感觉很多东西和MFC都很相似,但也有点摸不着头脑,不知如何下手。

          看了老半天,还是从最直观的界面出着手。

          CLabelAppUi:这个是UI组件类,暂时想到它的功能就是放置控件。

    其成员变量 CLabelContainer* iAppContainer;  //容器指针

    void CLabelAppUi::ConstructL()
        {
        BaseConstructL();

        iAppContainer = new (ELeave) CLabelContainer;
        iAppContainer->SetMopParent( this );
        iAppContainer->ConstructL( ClientRect() );
        AddToStackL( iAppContainer );
        }

        第二步看 CLabelContainer:

    其成员变量我定义了2个:

           private: //data
             CEikLabel* iLabel;          // example label
             CEikLabel * iMyLabel;    //colin

    相关的创建并初始化操作,在ConstructL函数中完成:

    void CLabelContainer::ConstructL(const TRect& aRect)
        {
        CreateWindowL();

        iLabel = new (ELeave) CEikLabel;
        iLabel->SetContainerWindowL( *this );
        iLabel->SetTextL( _L("Simple Label") );//设置文本内容
        iLabel->SetExtent( TPoint(10, 10), TSize (150, 30)); //设置位置
        SetLabelStyle(1); //这个是自定义的函数,可设置Label的各种格式,可copy回去重用

        iMyLabel = new (ELeave)CEikLabel;
        iMyLabel->SetContainerWindowL(*this);
        iMyLabel->SetTextL(_L("colin Come"));
        iMyLabel->SetExtent(TPoint(15,15),TSize(150,30));
        SetLabelStyle(2);

        SetRect(aRect);
        ActivateL();
        }

    关于大小改变的有个框架函数:

    void CLabelContainer::SizeChanged()
        {
        // TODO: Add here control resize code etc.
        //iLabel->SetExtent( TPoint(10,10), iLabel->MinimumSize() );
        iLabel->SetExtent( TPoint(10, 10), TSize (150, 30));
        iMyLabel->SetExtent( TPoint(15,15), TSize(150,30));
        }

    iLabel->MinimumSize(),通过这个函数可以灵活的选择适应窗口大小。

    当自己加入了新的控件后,下面这个函数中的返回参数必须修改:

    TInt CLabelContainer::CountComponentControls() const
        {
        return 2; // return nbr of controls inside this container
        }

    以下函数用于标识本容器中所拥有的控件(框架函数,可以调换一下各个返回指针的位置,发现不同点):

    CCoeControl* CLabelContainer::ComponentControl(TInt aIndex) const
        {
        switch ( aIndex )
            {
            case 0:
                return iLabel;//;
            case 1:
                return iMyLabel;
            default:
                return NULL;
            }
        }

    最后,给出自定义的设置标签样式的函数:

    void CLabelContainer::SetLabelStyle (TInt aStyle)
        {
        switch (aStyle)
            {
            case 1:
                {
                iLabel ->SetAlignment (EHLeftVTop) ;
                iLabel->SetFont( LatinBold12() );
                iLabel->SetStrikethrough(EFalse);
                iLabel->SetUnderlining(EFalse);
                break;
                }
            case 2:
                {
                iLabel ->SetAlignment( EHCenterVCenter );
                iLabel->SetFont( LatinBold19() );
                iLabel->SetStrikethrough(EFalse);
                iLabel->SetUnderlining(ETrue);
                break;
                }
            case 3:
                {
                iLabel ->SetAlignment( EHRightVBottom );
                iLabel->SetFont( LatinBold17() );
                iLabel->SetStrikethrough(ETrue);
                iLabel->SetUnderlining(EFalse);
                break;
                }
            }
        }

  • 相关阅读:
    day22 面向对象
    springMVC中 POST 请求数据变乱码问题
    Handler dispatch failed; nested exception is java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyResultSet.isClosed()Z is abstract
    java.sql.SQLException: Unknown system variable 'tx_isolation'
    Mysql命令
    paas相关,添加ing
    Angular2中实现基于TypeScript的对象合并方法:extend()
    NgStyle和NgIf控制HTML标签显示的区别
    执行ng build --prod --aot命令报错
    JavaScript中的小陷阱(不定期更新。。)
  • 原文地址:https://www.cnblogs.com/me115/p/1658679.html
Copyright © 2011-2022 走看看