📄 appform.c
字号:
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 + -