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

📄 appform.c

📁 高通brew平台上的BUIW控件中的ImageStaticWidget使用示例
💻 C
📖 第 1 页 / 共 2 页
字号:
			ptInfoNew->piImage = ISHELL_LoadResImage(pMe->piShell, WIDGETTEST_RES_FILE, IMAGE_OF_WIDGET);
			pMe->dwCurrentImageID = IMAGE_OF_WIDGET;
		} else {
			ptInfoNew->piImage = ISHELL_LoadResImage(pMe->piShell, WIDGETTEST_RES_FILE, IMAGE1_OF_WIDGET);
			pMe->dwCurrentImageID = IMAGE1_OF_WIDGET;
		}
		// 设置新的ImageStaticInfo结构数据,之后IWidget会回调原来设置的资源释放函数来释放原来的结构
		IWIDGET_SetImageStaticInfo(pMe->ImageStaticWidget, ptInfoNew, AppForm_ImageStaticInfoFree);
		IVALUEMODEL_Release(pivm);

		// 下面这个有问题,无法实现,原因待查
//		IWIDGET_GetImageStaticImageWidget(pMe->ImageStaticWidget, &iwImage);
//		IWIDGET_SetImage(iwImage, ISHELL_LoadResImage(pMe->piShell, WIDGETTEST_RES_FILE, IMAGE1_OF_WIDGET));
//		IWIDGET_SetImageStaticImageWidget(pMe->ImageStaticWidget, iwImage);
//		IWIDGET_Release(iwImage);
		// SetImageStaticImageWidget没有任何反应
		break;
	case MENUITEM_UPDATESTATIC:			// 更换文本
		// 先通过ValueModel获取旧的ImageStaticInfo,主要是获取原来的显示文本
		IWIDGET_GetModel(pMe->ImageStaticWidget, AEEIID_VALUEMODEL, (IModel**)&pivm);
		ptImageStaticInfo = IVALUEMODEL_GetValue(pivm, &nValueLen);

		// 完成文本比较,确定应该显示那个文本
		ptInfoNew = MALLOCREC(ImageStaticInfo);
		ptInfoNew->pwText = (AECHAR*)MALLOC(128);
		ISHELL_LoadResString(pMe->piShell, WIDGETTEST_RES_FILE, STATIC_OF_WIDGET, ptInfoNew->pwText, 128);
		if(WSTRCMP(ptImageStaticInfo->pwText, ptInfoNew->pwText) == 0)
			ISHELL_LoadResString(pMe->piShell, WIDGETTEST_RES_FILE, STATIC1_OF_WIDGET, ptInfoNew->pwText, 128);
		// 读取原来的图片资源,不知道有没有图片资源的拷贝方法
		ptInfoNew->piImage = ISHELL_LoadResImage(pMe->piShell, WIDGETTEST_RES_FILE, pMe->dwCurrentImageID);
		// 重新设置ImageStatic的信息
		IWIDGET_SetImageStaticInfo(pMe->ImageStaticWidget, ptInfoNew, AppForm_ImageStaticInfoFree);
		IVALUEMODEL_Release(pivm);
		// 下面这个也有问题,无法实现
//		IWIDGET_GetImageStaticStaticWidget(pMe->ImageStaticWidget, &iwStatic);
//		IWIDGET_GetModel(iwStatic, AEEIID_VALUEMODEL, (IModel**)&pivm);
//		pText2 = (AECHAR*)MALLOC(128);
//		ISHELL_LoadResString(pMe->piShell, WIDGETTEST_RES_FILE, STATIC_OF_WIDGET, pText2, 128);
//		if(WSTRCMP(IVALUEMODEL_GetText(pivm, &nValueLen), pText2) == 0)
//			ISHELL_LoadResString(pMe->piShell, WIDGETTEST_RES_FILE, STATIC1_OF_WIDGET, pText2, 128);
//		IVALUEMODEL_SetText(pivm, pText2, -1);
//		IWIDGET_SetImageStaticStaticWidget(pMe->ImageStaticWidget, iwStatic);
//		IVALUEMODEL_Release(pivm);
//		IWIDGET_Release(iwStatic);
		break;
	case MENUITEM_SHOWIMAGE:
		if(pMe->dwImageStaticFlags & ISWF_NOIMAGE)
		{
			IWIDGET_RemoveFlags(pMe->ImageStaticWidget, ISWF_NOIMAGE);
			pMe->dwImageStaticFlags &= ~ISWF_NOIMAGE;
		}
		else
		{
			IWIDGET_AddFlags(pMe->ImageStaticWidget, ISWF_NOIMAGE);
			pMe->dwImageStaticFlags |= ISWF_NOIMAGE;
		}
		break;
	case MENUITEM_SHOWSTATIC:
		if(pMe->dwImageStaticFlags & ISWF_NOTEXT)
		{
			IWIDGET_RemoveFlags(pMe->ImageStaticWidget, ISWF_NOTEXT);
			pMe->dwImageStaticFlags &= ~ISWF_NOTEXT;
		}
		else
		{
			IWIDGET_AddFlags(pMe->ImageStaticWidget, ISWF_NOTEXT);
			pMe->dwImageStaticFlags |= ISWF_NOTEXT;
		}
		break;
	case MENUITEM_EXIT:					// 退出
		result = AppForm_CreateExitConfDialog(pMe);
		if(result == 0)
		{
			IROOTFORM_PopForm(pMe->rootForm);
			IPOPUPMENU_Release(pMe->optionsMenu);
			pMe->optionsMenu = NULL;
			IROOTFORM_PushForm(pMe->rootForm, (IForm*)pMe->exitConfirmationDialog);
		}
		return;
	}

	// 菜单已经选择,要关闭窗口
	IROOTFORM_PopForm(pMe->rootForm);
	IPOPUPMENU_Release(pMe->optionsMenu);
	pMe->optionsMenu = NULL;
}

int AppForm_CreateOptionsMenu(AppForm* pMe) {
	int result = 0;
	IWidget* formWidget = NULL;
	
	result = ISHELL_CreateInstance(pMe->piShell, AEECLSID_POPUPMENUFORM, (void**) &pMe->optionsMenu);
	if(result == 0) {
		result += IPOPUPMENU_LoadMenuItem(pMe->optionsMenu, WIDGETTEST_RES_FILE, MENUITEM_SETBORDER, MENUITEM_SETBORDER,MMF_ENABLED);
		result += IPOPUPMENU_LoadMenuItem(pMe->optionsMenu, WIDGETTEST_RES_FILE, MENUITEM_SETSTATICFLAGS, MENUITEM_SETSTATICFLAGS,MMF_ENABLED);
		result += IPOPUPMENU_LoadMenuItem(pMe->optionsMenu, WIDGETTEST_RES_FILE, MENUITEM_SETFLAG, MENUITEM_SETFLAG,MMF_ENABLED);
		result += IPOPUPMENU_LoadMenuItem(pMe->optionsMenu, WIDGETTEST_RES_FILE, MENUITEM_UPDATEIMAGE, MENUITEM_UPDATEIMAGE, MMF_ENABLED);
		result += IPOPUPMENU_LoadMenuItem(pMe->optionsMenu, WIDGETTEST_RES_FILE, MENUITEM_UPDATESTATIC, MENUITEM_UPDATESTATIC, MMF_ENABLED);
		result += IPOPUPMENU_LoadMenuItem(pMe->optionsMenu, WIDGETTEST_RES_FILE, MENUITEM_SHOWIMAGE, MENUITEM_SHOWIMAGE, MMF_ENABLED);
		result += IPOPUPMENU_LoadMenuItem(pMe->optionsMenu, WIDGETTEST_RES_FILE, MENUITEM_SHOWSTATIC, MENUITEM_SHOWSTATIC, MMF_ENABLED);
		result += IPOPUPMENU_LoadMenuItem(pMe->optionsMenu, WIDGETTEST_RES_FILE, MENUITEM_EXIT, MENUITEM_EXIT, MMF_ENABLED);
	}
	
	if(result==0) {
		IFORM_SetSoftkeys((IForm*)pMe->optionsMenu, WIDGETTEST_RES_FILE, MAINFORMSOFTKEY1, 0);
		IFORM_SetSelectHandler((IForm*)pMe->optionsMenu, (PFNSELECT)OptionSelectionHandler, pMe);
		
		// 菜单窗口的大小以及窗口的显示位置只能在EventHandle中处理,不能使用IFORM_SetProperty来设置
		HANDLERDESC_Init(&pMe->optionsMenuHandler, OptionsEventHandler, pMe, 0);
		IFORM_SetHandler((IForm*)pMe->optionsMenu, &pMe->optionsMenuHandler);

		// 设置边框(应该可以在lua文件修改的)
		IFORM_GetWidget((IForm*)pMe->optionsMenu, WID_FORM, &formWidget);
		if(formWidget) {
			IWIDGET_SetBorderColor(formWidget, RGB_BLACK);
			IWIDGET_SetBorderWidth(formWidget, 1);
			IFORM_SetWidget((IForm*)pMe->optionsMenu, WID_FORM, formWidget);
			IWIDGET_Release(formWidget);
		}
		// 设置透明度
		IFORM_GetWidget((IForm*)pMe->optionsMenu, WID_BACKDROP, &formWidget);
		if(formWidget) {
			IWIDGET_SetTransparency(formWidget, 255);	// 完全透明
			IFORM_SetWidget((IForm*)pMe->optionsMenu, WID_BACKDROP, formWidget);
			IWIDGET_Release(formWidget);
		}
	}
	return result;
}

//Create Warning dialog
int AppForm_CreateExitConfDialog(AppForm* pMe) {
   IWidget* backdropWidget = NULL;

   ISHELL_CreateInstance(pMe->piShell, AEECLSID_WARNDIALOG, (void**) &pMe->exitConfirmationDialog);

   if(pMe->exitConfirmationDialog) {
      IFORM_SetSoftkeys((IForm*)pMe->exitConfirmationDialog, WIDGETTEST_RES_FILE, EXITFORMSOFTKEY1, EXITFORMSOFTKEY2);
      IFORM_SetCancelKey((IForm*)pMe->exitConfirmationDialog, AVK_SOFT2);

      IFORM_SetResText((IForm*)pMe->exitConfirmationDialog, FID_TITLE, WIDGETTEST_RES_FILE, EXITFORMTITLE);
      IFORM_SetResText((IForm*)pMe->exitConfirmationDialog, FID_TEXT, WIDGETTEST_RES_FILE, EXITFORMTEXT);

      //set the transparency of the backdrop
      IFORM_GetWidget((IForm*)pMe->exitConfirmationDialog, WID_BACKDROP, &backdropWidget);
      if(backdropWidget) {
         IWIDGET_SetTransparency(backdropWidget, 150);
         IFORM_SetWidget((IForm*)pMe->exitConfirmationDialog, WID_BACKDROP, backdropWidget);
         IWIDGET_Release(backdropWidget);
      }

      HANDLERDESC_Init(&pMe->exitConfirmationHandler, exitConfirmationDialog_HandleEvent, pMe, 0);
      IFORM_SetHandler((IForm*)pMe->exitConfirmationDialog, &pMe->exitConfirmationHandler);
      return AEE_SUCCESS;
   }
   return EFAILED;
}

// 从这里将控件放入到界面的指定位置
int AppForm_PopulateMainContainer(AppForm* pMe) {
	int result=0;
	IWidget* containerWidget = NULL;	// XYContainer所对应的IWidget
	
	WExtent we;							// 控件大小定义用的结构
	WidgetPos wpos;						// 控件放置位置定义用的结构
	ImageStaticInfo *ptImageStaticInfo = NULL;

	IWidget *iwImage = NULL;
	
	// 创建XYContainer
	result =  ISHELL_CreateInstance(pMe->piShell, AEECLSID_XYCONTAINER, (void**) &pMe->mainContainer);
	if(result != 0)
		return EFAILED;

	// 创建ImageStaticWidget控件
	result = ISHELL_CreateInstance(pMe->piShell, AEECLSID_IMAGESTATICWIDGET, (void**) &pMe->ImageStaticWidget);
	if(result != 0)
		return EFAILED;

	// 设置控件的大小
	we.height = 60;
	we.width  = 165;
	IWIDGET_SetExtent(pMe->ImageStaticWidget, &we);

	// 初始化ImageStaticInfo结构数据
	ptImageStaticInfo = MALLOCREC(ImageStaticInfo);
	ptImageStaticInfo->pwText = (AECHAR*)MALLOC(128);
	ISHELL_LoadResString(pMe->piShell, WIDGETTEST_RES_FILE, STATIC_OF_WIDGET, ptImageStaticInfo->pwText, 128);
	ptImageStaticInfo->piImage = ISHELL_LoadResImage(pMe->piShell, WIDGETTEST_RES_FILE, IMAGE_OF_WIDGET);

	// 设置控件的数据
	IWIDGET_SetImageStaticInfo(pMe->ImageStaticWidget, ptImageStaticInfo, AppForm_ImageStaticInfoFree);

	// 保存控件的对齐标志
	pMe->dwCurrentImageID = IMAGE_OF_WIDGET;
	pMe->dwImageStaticFlags = 0;
	// 将控件插入到xycontainer中
	wpos.bVisible = TRUE;
	wpos.x = 5;
	wpos.y = 5;
	IXYCONTAINER_Insert(pMe->mainContainer, pMe->ImageStaticWidget, WIDGET_ZNORMAL, &wpos);

	// 把xycontainer插入到Form中
	result = IXYCONTAINER_QueryInterface(pMe->mainContainer, AEEIID_WIDGET, (void**)&containerWidget);
	if(result ==0) {
		IFORM_SetWidget(pMe->mainForm, WID_FORM, containerWidget);
		IWIDGET_Release(containerWidget);
	}
	return result;
}


int AppForm_New(IForm** ppo, IShell *piShell, IRootForm *pRootForm, IDisplay *piDisplay) {
   int result=0;

   //allocate space for the form
   AppForm *pMe = MALLOCREC(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, WIDGETTEST_RES_FILE, MAINFORMSOFTKEY1, MAINFORMSOFTKEY2);
      result += IFORM_SetResText(pMe->mainForm, FID_TITLE, WIDGETTEST_RES_FILE, MAINFORMTITLE);

      HANDLERDESC_Init(&pMe->mainFormHandler, AppForm_HandleEvent, pMe, AppForm_Delete);
      IFORM_SetHandler(pMe->mainForm, &pMe->mainFormHandler);
   }

   if(result==0)
      result = AppForm_PopulateMainContainer(pMe);
   return result;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -