⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sliderwidgetdemo.c

📁 高通brew平台上的BUIW控件中的slider的示例程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	// 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 + -