现在的位置: 首页 > 综合 > 正文

BUIW初学——日程表SETFORM初探

2018年05月08日 ⁄ 综合 ⁄ 共 2697字 ⁄ 字号 评论关闭

根据我自己的理解,setform.c主要负责的工作就是日程表界面显示相关的内容,而逻辑实现部分则在working.c之中;

对于界面而言,其一是对于外观的修改,例如菜单的长度、文字的长度、对话框大小的设置等等;其二是更深入的部分,主要是相关按键及其他事件的处理工作。对于第一点我们了解了它就可以对界面的显示进行修改了;如果要对按键等功能设置进行更改的话则需在事件处理中进行。下面是一个创建日程表内容的界面创建过程,我们通过它来详细的了解步骤1。

static int SCH_Create_Schedule_Content(Sch_Setting * pMe,int16 ypos)
{   
    int ret = SUCCESS; 
    WidgetProp wp;
    IWidget *tmpWidget;
    WExtent we;
    WidgetPos wpos;

    pMe->pSchContImage =  ISHELL_LoadResImage(pMe->pShell, SCHEDULE_IMAGE_RESFILE,IDI_SCH_CONT);//载入内容ICON

     // 创建PROPCONTAINER接口实例
    ret = ISHELL_CreateInstance(pMe->pShell, AEECLSID_PROPCONTAINER, (void**)&pMe->pSchContPropContainer);

    ret += ISHELL_CreateInstance(pMe->pShell,AEECLSID_STATICWIDGET,(void**)&pMe->pSchContWidget);//创建static widget实例
    ret += ISHELL_CreateInstance(pMe->pShell,AEECLSID_IMAGEWIDGET,(void**)&pMe->pSchContImgWig);//创建image widget实例
    ISHELL_LoadResString(pMe->pShell,pMe->pMF->pApp->pSchedulesrFile,IDS_SCH_CONT,pMe->SchContBuf,SCH_TIME_BUF_LENGTH*sizeof(AECHAR));//载入“内容”二字
    IWIDGET_SetImage(pMe->pSchContImgWig, pMe->pSchContImage); //将图片指针与imagewidget关联
    ret += IWIDGET_SetROP(pMe->pSchContImgWig, AEE_RO_TRANSPARENT); //设置imagewidget属性1
    IWIDGET_SetFlags(pMe->pSchContImgWig, IDF_ALIGN_LEFT|IDF_ALIGN_MIDDLE);//设置imagewidget属性2
    IWIDGET_SetBorderWidth(pMe->pSchContWidget, 0);//设置static widget属性1

    IWIDGET_SetFlags(pMe->pSchContWidget, IDF_ALIGN_LEFT|IDF_ALIGN_MIDDLE);//设置static widget属性2

    IWIDGET_SetText(pMe->pSchContWidget,pMe->SchContBuf,FALSE);//设置static widget文字

    wp.bVisible=TRUE;//设置可见属性
#ifdef FEATURE_QTM10
 wp.prop = 1 ;     //不执行
 IPROPCONTAINER_Insert(pMe->pSchContPropContainer, pMe->pSchContWidget, WIDGET_ZNORMAL,&wp);//不执行
#else
    wp.prop = 2 ; //FLAG_IMAGE_WIDTH
    IPROPCONTAINER_Insert(pMe->pSchContPropContainer, pMe->pSchContImgWig,WIDGET_ZNORMAL,&wp);//插入imwig至PCONT
    wp.prop = 10 ;
    IPROPCONTAINER_Insert(pMe->pSchContPropContainer, pMe->pSchContWidget, WIDGET_ZNORMAL,&wp);插入stawig至PCONT
#endif

//将CONTPROPCONTAINER与一个widget类型的临时指针绑定,也就是说将其当做一个普通的widget
    ret += IPROPCONTAINER_QueryInterface(pMe->pSchContPropContainer, AEEIID_WIDGET, (void**)&tmpWidget);
    if (ret == SUCCESS)
    {

      //将该WIDGET放置于pXYContainer指向的container,达到显示的目的,前面几句代码作用是设置widget的属性
        IWIDGET_SetLayoutStyle(tmpWidget, LAYOUT_HORZ);
        we.height = MENU_ITEM_HEIGHT;
        we.width = CONTAINER_WIDTH ;
        IWIDGET_SetExtent(tmpWidget, &we);
        wpos.x=0 ;
        wpos.y= ypos ;
        wpos.bVisible=TRUE ;
        IXYCONTAINER_Insert(pMe->pXYContainer, tmpWidget, WIDGET_ZNORMAL, &wpos);//最后插入widget或者说是propcontainer
        IWIDGET_Release(tmpWidget);//释放临时对象, 注意代码的安全
    }
    HANDLERDESC_Init(&pMe->hSchContDesc, Sch_Setting_Cont_HandleEvent, pMe, 0);//调用事件处理函数
    IWIDGET_SetHandler(pMe->pSchContWidget, &pMe->hSchContDesc);//设置新的事件处理
    return ret;
}

(完)

抱歉!评论已关闭.