/* 一般用户并不需要调用这个 用户应用程序退出之后,application 会释放这个控件所占的空间。 而窗口管理程序会释放所有资源,包括申请的每个图形设备。 */ si_t spinbox_exit(struct spinbox * b) { list_exit(&b->subscribe_info_list); text_line_exit(b->text_number); button_exit(b->button_up); button_exit(b->button_down); return widget_exit(WIDGET_POINTER(b)); }
/** * @brief 清理输入事件模块 **/ static void event_exit() { /** * 清理输入设备数组 注意输入设备句柄由于已经添加到event_listener中 因此会自行close **/ vector_exit(&global_wm.input_device_vector); /** * 清理消息队列 **/ list_exit(&global_wm.message_list); }
si_t application_exit() { struct object * addr; si_t i, n; /** * release focus list **/ list_exit(&(global_application.focus_list)); /* 有多少个窗口 */ n = vector_size(&(global_application.window_vector)); /* 依次删除窗口 */ for(i = n - 1; i >= 0; -- i) { addr = vector_at(&(global_application.window_vector), i); /* 这里没有逐个注销窗口类对象或者它的派生类对象。 因为窗口管理程序收到用户应用程序的退出请求后, 会释放关于这个用户应用程序的所有资源。 */ /* 释放这棵树 */ object_tree_free(addr->parent); /* 从窗口向量中删除这个节点 */ vector_erase(&(global_application.window_vector), i); } vector_exit(&(global_application.window_vector)); if(0 != cancel_application()) { EGUI_PRINT_ERROR("failed to cancle application"); } event_listener_exit(&global_application.app_event_listener); queue_exit(&global_application.message_queue); uds_exit(&global_application.uds); free(global_application.name); free(global_application.icon_root_path); term_restore(); return 0; }
static void easy_menu_loop(menu_item_t* menu, char* desc) { list_dst* menu_ptr; menu_ptr = list_init(); if (NULL == menu_ptr) { error_exit(3, "不能创建菜单控件"); } list_props_set(menu_ptr , list_menu_property); int menu_count; for (menu_count = 0;; ++menu_count) { if (NULL == menu[menu_count].menu_desc) break; list_item_add(menu_ptr, menu[menu_count].menu_desc); } int32 ret; dis_mod_set(MAIN_DISP, INPUT_HZ_FONT, INPUT_ASC_FONT); while (1) { CLEAR_SCREEN; printf_str(MAIN_DISP, DISP_X_COOR, DISP_Y_COOR, ">", 1); printf_str(MAIN_DISP, DISP_X_COOR + 9, DISP_Y_COOR, desc, 1); line(MAIN_DISP , DISP_X_COOR, DISP_X_COOR + 28, DISP_X_COOR + 140, DISP_X_COOR + 28, 1); line(MAIN_DISP , DISP_X_COOR, DISP_X_COOR + 30, DISP_X_COOR + 140, DISP_X_COOR + 30, 1); list_show(MAIN_DISP, menu_ptr); lcd_160_upd(); ret = list_key_manege(MAIN_DISP, menu_ptr, lcd_160_upd); if (ret < 0) { list_exit(menu_ptr) ; return ; } if (ret < menu_count) { menu[ret].func(); dis_mod_set(MAIN_DISP, INPUT_HZ_FONT, INPUT_ASC_FONT); } } }