系统名片夹的操作

本文档详细介绍了Symbian系统中名片夹(通讯录)的各项操作方法,包括打开名片夹窗口、创建和编辑名片、查找及修改名片信息等,并提供了监听名片夹变动的实现方式。

//是把名片夹以窗口的方式打开。

//#include <cpbkviewstate.h>
//ReadDeviceData WriteDeviceData
//PbkView.lib

void CLEDPointAppUi::OpenInfraredL()
    {
    
    CPbkViewState* pbkViewParam = CPbkViewState::NewLC();
    pbkViewParam->SetFocusedContactId(0);
    // Package and return object in a buffer.
    HBufC8* paramBuf = pbkViewParam->PackLC();
    //名片夹的UID
    const TUid appUid =
        {
        0x101f4cce
        };
    //打开页面
    CCoeAppUi::ActivateViewL(TVwsViewId(appUid, TUid::Uid(1)),
            CPbkViewState::Uid(), *paramBuf);
    // Cleanup
    CleanupStack::PopAndDestroy(2); // paramBuf, pbkViewParam
    }








名片中字段对应的枚举值

EPbkFieldIdLastName 姓

EPbkFieldIdFirstName 名

EPbkFieldIdPhoneNumberMobile 手机号

EPbkFieldIdPhoneNumberStandard 电话号码

EPbkFieldIdEmailAddress 电子邮件

EPbkFieldIdCompanyName 公司

EPbkFieldIdJobTitle 职位

EPbkFieldIdFaxNumber 传真



//----------------------------------------打开名片夹窗口----------------------------------------

    CPbkViewState* pbkViewParam = CPbkViewState::NewLC();
    pbkViewParam->SetFocusedContactId(0);    //这个是在本窗口设置选中的ID
    // Package and return object in a buffer.
    HBufC8* paramBuf = pbkViewParam->PackLC();
    //名片夹的UID
    const TUid appUid =
        {
        0x101f4cce
        };

    //打开页面
    CCoeEnv::Static()->AppUi()->ActivateViewL(TVwsViewId(appUid, TUid::Uid(1)),
            CPbkViewState::Uid(), *paramBuf);

    CleanupStack::PopAndDestroy(2); // paramBuf, pbkViewParam


//----------------------------------------创建一条新名片----------------------------------------

    //其中iPbkContactEngine是类的成员变量
    //通讯录
    //iPbkContactEngine = CPbkContactEngine::NewL();
   

    RPbkViewResourceFile phonebookResource(*(CEikonEnv::Static()));

    if (!phonebookResource.IsOpen())
        {
        phonebookResource.OpenL();
        }

    CPbkContactItem* contactItem = iPbkContactEngine->CreateEmptyContactL();
    CleanupStack::PushL(contactItem);

    CPbkContactEditorDlg* editor = CPbkContactEditorDlg::NewL(
            *iPbkContactEngine, *contactItem, ETrue);
    TContactItemId id = editor->ExecuteLD();

    CleanupStack::PopAndDestroy(contactItem);

    phonebookResource.Close();




//----------------------------------------创建一条新的名片,设置默认的字段----------------------------------------

    //其中iPbkContactEngine是类的成员变量
    //通讯录
    //iPbkContactEngine = CPbkContactEngine::NewL();


    RPbkViewResourceFile phonebookResource(*(CEikonEnv::Static()));

    if (!phonebookResource.IsOpen())
        {
        phonebookResource.OpenL();
        }

    CPbkContactItem* contactItem = iPbkContactEngine->CreateEmptyContactL();
    CleanupStack::PushL(contactItem);
   
    //设置字段的内容
    TPbkContactItemField* fieldFirstName = contactItem->FindField(EPbkFieldIdFirstName);
    fieldFirstName->TextStorage()->SetTextL(_L("Costya"));

    CPbkContactEditorDlg* editor = CPbkContactEditorDlg::NewL(
            *iPbkContactEngine, *contactItem, ETrue);
    TContactItemId id = editor->ExecuteLD();

    CleanupStack::PopAndDestroy(contactItem);

    phonebookResource.Close(); // Close the phonebook view


//----------------------------------------修改一个名片----------------------------------------


    //获取记录的TContactItem Id
    TContactItemId tId = iAllRecord[aId]->iRecordID;

    RPbkViewResourceFile phonebookResource(*(CEikonEnv::Static()));

    if (!phonebookResource.IsOpen())
        {
        phonebookResource.OpenL();
        }

    CPbkContactItem* contactItem = iPbkContactEngine->OpenContactL(tId);
    CleanupStack::PushL(contactItem);

    CPbkContactEditorDlg* editor = CPbkContactEditorDlg::NewL(
            *iPbkContactEngine, *contactItem, EFalse);
    TContactItemId id = editor->ExecuteLD();

    CleanupStack::PopAndDestroy(contactItem);

    iPbkContactEngine->CloseContactL(tId);
    phonebookResource.Close();
   


//----------------------------------------查找一个名片----------------------------------------
    //获取联系人通讯录TContactItemId
    TContactItemId tID = iAllRecord[aId]->iRecordID;

    CPbkContactItem* pContactItem = iPbkContactEngine->OpenContactL(tID);

    //记录集为空就执行下一条记录
    if (pContactItem == NULL)
        {
        return;
        }

    //如果不是查找的记录,就执行下一行
    if (tID != pContactItem->Id())
        {
        return;
        }

    //是查找的记录,下面开始组装名片字符串
    TPbkContactItemField* pCntField;
    TBuf<500> bValue;
    TBuf<100> bName;

    //得到姓
    bValue.Zero();
    pCntField = pContactItem->FindField(EPbkFieldIdLastName);
    if (pCntField)
        {
        pCntField->GetTextL(bValue);
        bName.Zero();
        CEikonEnv::Static()->ReadResource(bName, R_CARD_FIRST_NAME);
        bCard.Append(bName);
        bCard.Append(bValue);
        bCard.Append(KRN);
        }

    //得到名称
    bValue.Zero();
    pCntField = pContactItem->FindField(EPbkFieldIdFirstName);
    if (pCntField)
        {
        pCntField->GetTextL(bValue);
        bName.Zero();
        CEikonEnv::Static()->ReadResource(bName, R_CARD_LAST_NAME);
        bCard.Append(bName);
        bCard.Append(bValue);
        bCard.Append(KRN);
        }

    //得到手机号
    bValue.Zero();
    pCntField = pContactItem->FindField(EPbkFieldIdPhoneNumberMobile);
    if (pCntField)
        {
        pCntField->GetTextL(bValue);
        bName.Zero();
        CEikonEnv::Static()->ReadResource(bName, R_CARD_PHONE);
        bCard.Append(bName);
        bCard.Append(bValue);
        bCard.Append(KRN);
        }
    delete pContactItem;
    pContactItem = NULL;

    iPbkContactEngine->CloseContactL(tID);

    //到此,bCard中就是获取名片的信息了。



//----------------------------------------当名片夹有变化的时候----------------------------------------
class CControl : public CBase,
             public MPbkContactDbObserver
{

public:
      //当通讯录有变化的时候,系统就会自动调用此函数
      virtual void HandleDatabaseEventL(TContactDbObserverEvent aEvent);

 private:
      //通讯录引擎
      CPbkContactEngine* iPbkContactEngine;

      //通讯录监控类
      CPbkContactChangeNotifier* iPbkContactNotifier;

}




void CXXX::ConstructL()
{
         //创建通讯录引擎
    iPbkContactEngine = CPbkContactEngine::NewL();

        //创建事件通知类
    iPbkContactNotifier = CPbkContactChangeNotifier::NewL(*iPbkContactEngine, this);

}



void CXXX::HandleDatabaseEventL(TContactDbObserverEvent aEvent)
{
        // The changed item.
    TContactItemId contactId = aEvent.iContactId;

    switch (aEvent.iType)
    {
        //当修改通讯录的时候
        case EContactDbObserverEventContactChanged:
        {
               
        break;
        }
        //删除通讯录的时候       
        case EContactDbObserverEventContactDeleted:
        {
        break;
        }
        //添加通讯录的时候
        case EContactDbObserverEventContactAdded:
        {
        break;
        }
        default:
        {
        }
        break;
    }
}



//----------------------------------------打开某一个联系人的详情页面----------------------------------------
    //获取记录的TContactItem Id
    TContactItemId tId = //名片的TContactItem

    const TUid appUid =
        {
        0x101f4cce
        };
    const TUid KExtViewUid =
        {
        4
        }; // 对应信息页面的view uid
    CPbkViewState* pbkViewParam = CPbkViewState::NewLC();
    TInt contact_id = tId;
    pbkViewParam->SetFocusedContactId(contact_id);
    HBufC8* paramBuf = pbkViewParam->PackLC();
    CCoeEnv::Static()->AppUi()->ActivateViewL(TVwsViewId(appUid, KExtViewUid), CPbkViewState::Uid(),
            *paramBuf);
    CleanupStack::PopAndDestroy(2); // paramBuf, pbkViewPara



//---------------------在通讯录中,当一个人有多个手机的时候,拨打此人的电话,就弹出电话号码选择框。-------------------------------

    RPbkViewResourceFile pbkViewResourceFile(*CCoeEnv::Static());
    pbkViewResourceFile.OpenL();

    const TContactItemId cid = //获取通讯录中的ID;

    TBuf<128> phoneNumber;
    TBuf<128> phoneName;
    TBool namefound = EFalse;
    CPbkContactItem* pbkItem = iPbkContactEngine->ReadContactLC(cid);

    CPbkPhoneNumberSelect* dlg = new (ELeave) CPbkPhoneNumberSelect();
    CPbkPhoneNumberSelect::TParams addparams(*pbkItem);
    TBool selected = dlg->ExecuteLD(addparams);

    if (selected)
        {
        //得到选择的字段,如移动、移动(办公)、电话、家庭电话,通过numtmp->Label()你能找到额外的字段标签
        const TPbkContactItemField* numtmp = addparams.SelectedField();
        if (numtmp)
            {
            phoneNumber = numtmp->Text();
            }
        TPbkContactItemField* nametmp;
        if ((nametmp = pbkItem->FindField(EPbkFieldIdFirstName)) != NULL)
            {
            phoneName = nametmp->Text();
            if (phoneName.Length() > 0)
                {
                namefound = ETrue;
                }
            }
        if ((nametmp = pbkItem->FindField(EPbkFieldIdLastName)) != NULL)
            {
            if (namefound)
                {
                phoneName.Append(_L(" "));
                phoneName.Append(nametmp->Text());
                }
            else
                {
                phoneName = nametmp->Text();
                }
            }
        }
    CleanupStack::PopAndDestroy(1);//CPbkContactItem
    pbkViewResourceFile.Close();

    //如果有电话,就打电话
    if (0 < phoneNumber.Length())
        {
        //到现在,phoneNumber中就是选中的电话号码。
        }

内容概要:本文提出了一种基于非合作博弈理论的居民负荷分层调度模型,并结合双层鲸鱼优化算法(Two-level Whale Optimization Algorithm)进行高效求解,模型与算法均通过Matlab代码实现。研究针对电力系统中居民侧用电负荷的复杂调度问题,引入非合作博弈机制刻画各用户之间的利益竞争关系,实现负荷的分层优化分配;同时设计双层优化架构,上层优化资源配置,下层模拟用户自主决策行为,提升了模型的实用性与合理性。通过智能优化算法求解多层级、非凸非线性的博弈模型,有效提高了调度方案的收敛性与全局寻优能力,适用于现代智能电网中的需求侧管理与能源优化场景。; 适合人群:具备电力系统基础理论知识和Matlab编程能力,从事智能电网、能源优化调度、需求侧管理、博弈论应用等方向的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于居民区电力负荷的分层优化调度系统设计与仿真分析;②为非合作博弈在多主体能源系统建模中的应用提供方法论支持;③利用双层鲸鱼算法解决具有嵌套结构的复杂双层优化问题,提升求解效率与调度方案的可行性。; 阅读建议:建议读者结合提供的Matlab代码深入理解模型构建逻辑与算法实现流程,重点关注博弈模型的效用函数设计、纳什均衡求解思路以及双层优化结构的迭代机制,宜配合实际用电数据开展复现实验以验证模型有效性与鲁棒性。
内容概要:本文围绕基于自适应神经模糊推理系统(ANFIS)智能控制器的可再生能源微电网功率管理系统展开研究,结合Simulink仿真实现,深入探讨了微电网中功率的智能调控与经济机组组合调度问题。通过引入ANFIS控制器,有效应对风能、光伏等可再生能源出力的波动性与不确定性,提升系统运行的稳定性与电能质量。研究内容涵盖微电网多源协调控制策略、功率平衡管理、优化调度模型构建及仿真验证,实现了对分布式电源、储能系统和负荷的协同优化,兼顾经济性与可靠性目标,并通过仿真平台验证了所提方法的有效性与优越性。; 适合人群:具备电力系统、自动化或新能源相关专业背景,熟悉Matlab/Simulink仿真环境,从事微电网能量管理、智能控制、能源优化等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高比例可再生能源接入场景下的微电网能量管理系统研发与教学实践;②为实现微电网功率稳定控制与经济高效运行提供先进的智能控制解决方案;③支撑高水平学术论文复现、科研课题攻关及实际工程项目的仿真验证与方案优化。; 阅读建议:建议结合提供的Simulink模型与相关代码进行动手实践,重点关注ANFIS控制器的设计流程、规则库构建与参数调优方法,并通过与传统PID或MPC控制策略的对比实验,深入理解其在动态响应与鲁棒性方面的优势。同时可进一步拓展文中提出的优化调度逻辑,应用于多目标、多约束的复杂实际应用场景中。
内容概要:本文档聚焦于“直流电机双闭环控制Matlab仿真”,系统阐述了基于Matlab/Simulink平台实现直流电机双闭环控制系统(主要包括速度环与电流环)的设计与仿真全过程。通过构建直流电机的数学模型,结合PI控制器进行调控,实现对电机转速和电枢电流的高精度动态控制,验证控制策略的稳定性与响应性能。文档详细介绍了仿真模型的搭建流程、关键参数的整定方法、系统动态波形的分析手段以及仿真结果的有效性验证,体现了经典自动控制理论在实际电机系统中的工程应用,是电机控制与电力电子技术相结合的典型研究案例。; 适合人群:具备自动控制原理、电机与拖动基础、电力电子技术和Matlab/Simulink仿真能力的电气工程、自动化、机电一体化等专业的本科生、研究生及从事电机驱动系统研发的工程技术人员。; 使用场景及目标:①作为高校课程设计或实验教学材料,帮助学生深入理解双闭环调速系统的工作机理与工程实现;②服务于科研项目,为新型电机控制算法(如滑模、模糊PID等)的开发与性能对比提供基础仿真验证平台;③作为工业界产品前期设计的仿真工具,用于评估不同控制策略在动态响应、抗干扰能力和稳态精度方面的可行性。; 阅读建议:建议读者在学习过程中紧密结合自动控制理论知识,亲手在Simulink环境中搭建完整的双闭环仿真模型,通过反复调整PI控制器的比例与积分参数,观察并分析转速、电流的阶跃响应曲线,从而深刻理解反馈控制的本质、系统稳定性条件以及参数整定对动态性能的影响,进而掌握电机控制系统的设计精髓。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值