📄 sliderwidgetdemo.c
字号:
// PROP_INACTIVE_BGCOLOR 指定非活动状态时的底色
// PROP_BGCOLOR: 指定所有状态的颜色(同一色)
IWIDGET_SetProperty(pMe->sliderDemo_1, PROP_ACTIVE_BGCOLOR, MAKE_RGB(255, 255, 0));
IWIDGET_SetProperty(pMe->sliderDemo_1, PROP_INACTIVE_BGCOLOR, MAKE_RGB(220, 220, 220));
IWIDGET_SetProperty(pMe->sliderDemo_2, PROP_ACTIVE_BGCOLOR, MAKE_RGB(255, 0, 255));
IWIDGET_SetProperty(pMe->sliderDemo_2, PROP_INACTIVE_BGCOLOR, MAKE_RGB(220, 220, 220));
IWIDGET_SetProperty(pMe->sliderDemo_3, PROP_ACTIVE_BGCOLOR, MAKE_RGB(255, 000, 000));
IWIDGET_SetProperty(pMe->sliderDemo_3, PROP_INACTIVE_BGCOLOR, MAKE_RGB(000, 255, 000));
////....////....////....////....////
//IWIDGET_SetProperty(pMe->sliderDemo_1,PROP_BGCOLOR,MAKE_RGB(0, 0,255));
//IWIDGET_SetProperty(pMe->sliderDemo_2,PROP_BGCOLOR,MAKE_RGB(0, 255, 0));
//IWIDGET_SetProperty(pMe->sliderDemo_3,PROP_BGCOLOR,MAKE_RGB(0, 255, 50));
////....////....////....////....////
// 设置Slider的方向 (宏PROP_LAYOUTSTYLE)
// LAYOUT_NONE 不指定
// LAYOUT_VERT 竖向,底部位置为0
// LAYOUT_HORZ 横向,左边位置为0
IWIDGET_SetProperty(pMe->sliderDemo_1, PROP_LAYOUTSTYLE, LAYOUT_NONE); // 不指定方向
IWIDGET_SetProperty(pMe->sliderDemo_2, PROP_LAYOUTSTYLE, LAYOUT_HORZ); // 横向
IWIDGET_SetProperty(pMe->sliderDemo_3, PROP_LAYOUTSTYLE, LAYOUT_VERT); // 竖向
// 设置Slider边框四角的风格 (宏PROP_BORDERSTYLE)
// BORDERSTYLE_NORMAL 普通风格
// BORDERSTYLE_BEVELED 斜面风格
// BORDERSTYLE_ROUNDED 圆角风格
// BORDERSTYLE_MAXSTYLE ???
//IWIDGET_SetProperty(pMe->sliderDemo_2, PROP_BORDERSTYLE, BORDERSTYLE_NORMAL); // 不指定风格
IWIDGET_SetProperty(pMe->sliderDemo_3, PROP_BORDERSTYLE, BORDERSTYLE_BEVELED); // 斜面风格
IWIDGET_SetProperty(pMe->sliderDemo_1, PROP_BORDERSTYLE, BORDERSTYLE_ROUNDED); // 圆角风格
// 设置Slider的大小
we.height = 40;
we.width = 100;
IWIDGET_SetExtent(pMe->sliderDemo_1,&we);
we.height = 30; // 如果放入比例容器,则该大小不起作用,会自适应比例容器
we.width = 80;
IWIDGET_SetExtent(pMe->sliderDemo_2,&we);
we.height = 70;
we.width = 25;
IWIDGET_SetExtent(pMe->sliderDemo_3,&we);
// 设置侦听函数,当slider数值改变时,会调用侦听函数
{
IModel* sliderModel = NULL;
IWIDGET_GetModel(pMe->sliderDemo_1, AEEIID_VALUEMODEL, &sliderModel);
IMODEL_AddListenerEx(sliderModel,
&pMe->slider1_VmListener, (PFNLISTENER)sliderDemo_slider1_ListenerHandler, pMe);
IWIDGET_GetModel(pMe->sliderDemo_2, AEEIID_VALUEMODEL, &sliderModel);
IMODEL_AddListenerEx(sliderModel,
&pMe->slider2_VmListener, (PFNLISTENER)sliderDemo_slider2_ListenerHandler, pMe);
IWIDGET_GetModel(pMe->sliderDemo_3, AEEIID_VALUEMODEL, &sliderModel);
IMODEL_AddListenerEx(sliderModel,
&pMe->slider3_VmListener, (PFNLISTENER)sliderDemo_slider3_ListenerHandler, pMe);
IMODEL_Release(sliderModel);
}
// 设置Slider的手柄初始位置
// 设置sliderDemo_1的初始位置为6 , sliderDemo_2及sliderDemo_3的初始位置不专门设置,采用默认的0
IWIDGET_GetModel(pMe->sliderDemo_1, AEEIID_VALUEMODEL, (IModel**)&SliderDemo_ValueModel); // 获得sliderDemo1的ValueModel
IVALUEMODEL_SetValue(SliderDemo_ValueModel, (void*)6, 0, NULL); // 通过该ValueModel赋初值
// 本例中,我们会让sliderDemo_1的滑杆杆体颜色随着手柄的滑动而变化,
// 所以,初始时,修正杆体的颜色为对应位置颜色,以保证用户感受的一致性
IWIDGET_SetProperty(pMe->sliderDemo_1, PROP_ACTIVE_BGCOLOR, SLIDERDEMO1_ACTIVE_BORDER_COLOR(6));
// 注:获得手柄位置的方法:
// int nPos = (int)IVALUEMODEL_GetValue(SliderDemo_ValueModel,NULL);
// 具体的使用,可参见sliderDemo_AppForm_HandleEvent函数
// 虽然slider2与slider3默认的当前值就是0,但是这里仍然再次设置当前值为0,目的是为了给侦听函数一个notify,使执行侦听函数以显示文本数字
IWIDGET_GetModel(pMe->sliderDemo_2, AEEIID_VALUEMODEL, (IModel**)&SliderDemo_ValueModel); // 获得sliderDemo的ValueModel
IVALUEMODEL_SetValue(SliderDemo_ValueModel, (void*)0, 0, NULL); // 通过该ValueModel赋初值
IWIDGET_GetModel(pMe->sliderDemo_3, AEEIID_VALUEMODEL, (IModel**)&SliderDemo_ValueModel); // 获得sliderDemo的ValueModel
IVALUEMODEL_SetValue(SliderDemo_ValueModel, (void*)0, 0, NULL); // 通过该ValueModel赋初值
// 将Slider1,Slider3放入坐标容器(即前面创建的pMe->mainContainer)
wpos.x = 5;
wpos.y = 5;
wpos.bVisible = TRUE;
IXYCONTAINER_Insert(pMe->mainContainer, pMe->sliderDemo_1, WIDGET_ZNORMAL, &wpos);
// wpos.x = 10;
// wpos.y = 80;
// wpos.bVisible = TRUE;
// IXYCONTAINER_Insert(pMe->mainContainer, pMe->sliderDemo_2, WIDGET_ZNORMAL, &wpos);
wpos.x = 110;
wpos.y = 50;
wpos.bVisible = TRUE;
IXYCONTAINER_Insert(pMe->mainContainer, pMe->sliderDemo_3, WIDGET_ZNORMAL, &wpos);
// 焦点标记是在Slider1上
pMe->focusSlider = 1;
// 将静态文本控件放入坐标容器,该文本将用于显示Slider的值
wpos.x = 50;
wpos.y = 45;
wpos.bVisible = TRUE;
IXYCONTAINER_Insert(pMe->mainContainer, pMe->numberStatic_1, WIDGET_ZNORMAL, &wpos);
wpos.x = 115;
wpos.y = 120;
wpos.bVisible = TRUE;
IXYCONTAINER_Insert(pMe->mainContainer, pMe->numberStatic_3, WIDGET_ZNORMAL, &wpos);
// 将Slider2放入比例容器
wp.bVisible = TRUE;
wp.prop = 6;
IPROPCONTAINER_Insert(propContainer, pMe->sliderDemo_2, WIDGET_ZNORMAL, &wp);
// 将静态文本2放入比例容器
wp.bVisible = TRUE;
wp.prop = 4;
IWIDGET_SetFlags(pMe->numberStatic_2, IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);
IPROPCONTAINER_Insert(propContainer, pMe->numberStatic_2, WIDGET_ZNORMAL, &wp);
// set the properties and extent of the prop container
result = IPROPCONTAINER_QueryInterface(propContainer, AEEIID_WIDGET, (void**)&containerWidget);
if(result == 0) {
IWIDGET_SetLayoutStyle(containerWidget, LAYOUT_HORZ);
IWIDGET_SetBorderColor(containerWidget, RGB_BLACK);
IWIDGET_SetBorderWidth(containerWidget, 1);
we.height =30;
we.width = 100;
IWIDGET_SetExtent(containerWidget, &we);
}
if(result == 0) {
//insert prop container into main container
wpos.x = 5;
wpos.y = 80;
wpos.bVisible = TRUE;
IXYCONTAINER_Insert(pMe->mainContainer, containerWidget, WIDGET_ZNORMAL, &wpos);
IWIDGET_Release(containerWidget);
}
//release the prop container
if(propContainer)
IPROPCONTAINER_Release(propContainer);
// 将坐标容器的widget放入form
//set WID_FORM to the container
result = IXYCONTAINER_QueryInterface(pMe->mainContainer, AEEIID_WIDGET, (void**)&containerWidget);
if(result ==0) {
IFORM_SetWidget(pMe->mainForm, WID_FORM, containerWidget);
//IWIDGET_MoveFocus(containerWidget, opPickList);//pMe->sliderDemo_1);
IWIDGET_Release(containerWidget);
}
return result;
}
//=====================================================================================
//
//=====================================================================================
int sliderDemo_AppForm_New(IForm** ppo, IShell *piShell, IRootForm *pRootForm) {
int result=0;
//allocate space for the form
sliderDemo_AppForm *pMe = MALLOCREC(sliderDemo_AppForm);
if(!pMe)
return ENOMEMORY;
pMe->piShell = piShell;
pMe->rootForm = pRootForm;
result = ISHELL_CreateInstance(pMe->piShell, AEECLSID_FORM, (void**) &pMe->mainForm);
if(result==0) {
*ppo = pMe->mainForm;
}
if(result==0) {
result = IFORM_SetSoftkeys(pMe->mainForm, SLIDERWIDGETDEMO_RES_FILE, MAINFORMSOFTKEY1, MAINFORMSOFTKEY2);
result += IFORM_SetResText(pMe->mainForm, FID_TITLE, SLIDERWIDGETDEMO_RES_FILE, MAINFORMTITLE);
// IFORM_SetText(pMe->mainForm, FID_TITLE, L"SliderWidget Demo ");
// IFORM_SetText(pMe->mainForm, FID_SOFTKEY1, L"next slider");
// IFORM_SetText(pMe->mainForm, FID_SOFTKEY2, L"exit");
HANDLERDESC_Init(&pMe->mainFormHandler, sliderDemo_AppForm_HandleEvent, pMe, sliderDemo_AppForm_Delete);
IFORM_SetHandler(pMe->mainForm, &pMe->mainFormHandler);
}
if(result==0)
result = sliderDemo_AppForm_PopulateMainContainer(pMe);
return result;
}
//=====================================================================================
/* Initialize applet data*/
//=====================================================================================
int sliderDemo_InitAppData(sliderDemo_App* pMe) {
int result = 0;
pMe->mainForm = NULL;
//create rootForm
result = ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_ROOTFORM, (void**) &pMe->rootForm);
//set the theme
if(result == 0)
result = IROOTFORM_SetThemeFileName(pMe->rootForm, "theme.bar");
// if(result==0)
// ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_DISPLAY, (void**) &pMe->piDisplay);
return result;
}
//=====================================================================================
// Free app data
//=====================================================================================
static void sliderDemo_FreeAppData(sliderDemo_App* pMe) {
if(pMe->rootForm) {
IROOTFORM_Release(pMe->rootForm);
pMe->rootForm = NULL;
}
if(pMe->mainForm) {
IFORM_Release(pMe->mainForm);
pMe->mainForm = NULL;
}
}
//=====================================================================================
// App handle event
//=====================================================================================
static boolean sliderDemo_HandleEvent(IApplet * pi, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
int result=0;
sliderDemo_App* pMe = (sliderDemo_App*) pi;
// Allow rootform to handle event first
if(IROOTFORM_HandleEvent(pMe->rootForm, eCode, wParam, dwParam)) {
return TRUE;
}
switch(eCode) {
case EVT_APP_START:
// create main app form and push it onto the stack
if(sliderDemo_AppForm_New(&pMe->mainForm, pMe->a.m_pIShell, pMe->rootForm) == 0) {
IROOTFORM_PushForm(pMe->rootForm, pMe->mainForm);
return TRUE;
}
break;
case EVT_APP_STOP:
return TRUE;
default:
break;
}
return FALSE;
}
//=====================================================================================
// 入口
//=====================================================================================
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
{
sliderDemo_App* pMe=NULL;
*ppObj = NULL;
if(!AEEApplet_New(sizeof(sliderDemo_App),
ClsId, pIShell,po,(IApplet**)ppObj,
(AEEHANDLER)sliderDemo_HandleEvent,
(PFNFREEAPPDATA) sliderDemo_FreeAppData))
return ENOMEMORY;
pMe = (sliderDemo_App*) *ppObj;
if(sliderDemo_InitAppData(pMe) != 0)
return EFAILED;
return AEE_SUCCESS;
}
//=====================================================================================
//================================The end==============================================
//=====================================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -