static void run_game(int select) /* 功能:运行游戏 */ { int cpu_select; cpu_select = rand() % 3; /* 产生3以内的随机数 */ /* 根据随机数的取值,让PictureBox部件显示不同的图像 */ if(cpu_select == 0) { /* 石头 */ PictureBox_SetImage(cpu_pic_box, &stone); } else if(cpu_select == 1) { /* 剪刀 */ PictureBox_SetImage(cpu_pic_box, &knife); } else {/* 布 */ PictureBox_SetImage(cpu_pic_box, &cloth); } if(cpu_select == select) {/* 如果出一样的,平局次数+1 */ standoff += 1; } else if((cpu_select == 0 && select == 1) || (cpu_select == 1 && select == 2) || (cpu_select == 2 && select == 0)) { /* 如果是程序赢了, 输的次数+1 */ lose += 1; } else { /* 否则只有玩家赢了,赢的次数+1 */ win += 1; } update_text();/* 更新文本内容 */ }
static void clear_game() /* 功能:清理游戏,恢复PictureBox部件显示的图像 */ { PictureBox_SetImage( me_pic_box, &think ); PictureBox_SetImage( cpu_pic_box, &think ); Widget_Disable(btn_next); }
LCUI_API void Window_SetTitleIcon(LCUI_Widget *window, LCUI_Graph *icon) /* 功能:自定义指定窗口的标题栏图标 */ { LCUI_Graph *image; LCUI_Widget *title_widget; LCUI_TitleBar *title_data; if( window == NULL ) { return; } title_widget = Window_GetTitleBar(window); title_data = (LCUI_TitleBar *)Widget_GetPrivData(title_widget); image = PictureBox_GetImage(title_data->icon_box); Graph_Free(image);/* 释放PictureBox部件内的图像占用的资源 */ if(icon == NULL) { return; } /* 设置新图标 */ PictureBox_SetImage(title_data->icon_box, icon); Widget_SetAlign(title_data->icon_box, ALIGN_MIDDLE_LEFT, Pos(3,0)); Widget_SetAlign(title_data->label, ALIGN_MIDDLE_LEFT, Pos(23,0)); }
/* 玩家选择布 */ static void select_cloth( LCUI_Widget *widget, LCUI_WidgetEvent *unused ) { if(!Graph_IsValid(&left_cloth)) { Graph_HorizFlip( &cloth, &left_cloth ); } PictureBox_SetImage( me_pic_box, &left_cloth ); Widget_Disable( btn_j ); Widget_Disable( btn_s ); Widget_Disable( btn_b ); Widget_Enable( btn_next ); run_game(2); }
/* 设定图片文件中的图像为PictureBox部件显示的图像 */ LCUI_API int PictureBox_SetImageFile( LCUI_Widget *widget, char *image_file ) { int ret; graph_data data; LCUI_PictureBox *pic_box; LCUI_Graph *graph; pic_box = Widget_GetPrivData(widget); if( !graph_mem_init ) { Queue_Init( &picbox_graph_mem, sizeof(graph_data), destroy_graph_data); graph_mem_init = TRUE; } /* 如果在记录中没找到该部件,那么就分配内存,否则,直接使用那块内存 */ ret = find_widget_data(widget); if(ret == -1) { data.image = (LCUI_Graph*) calloc(1, sizeof(LCUI_Graph)); data.widget = widget; Queue_Add(&picbox_graph_mem, &data); } else { data = *(graph_data*)Queue_Get(&picbox_graph_mem, ret); } graph = data.image; pic_box->image_state = IMAGE_STATE_LOADING; /* 图片状态为正在载入 */ PictureBox_SetImage(widget, NULL); ret = Graph_LoadImage( image_file, graph );/* 载入图片文件 */ if( ret == 0 ) { /* 载入成功 */ pic_box->image_state = IMAGE_STATE_SUCCESS; PictureBox_SetImage(widget, graph); } else { /* 载入失败 */ pic_box->image_state = IMAGE_STATE_FAIL; PictureBox_SetImage(widget, NULL); } return ret; }
/* 玩家选择石头 */ static void select_stone( LCUI_Widget *widget, LCUI_WidgetEvent *unused ) { /* 如果没有存储已水平翻转的图像,就进行水平翻转 */ if(!Graph_IsValid(&left_stone)) { Graph_HorizFlip(&stone, &left_stone); } /* 设定显示的图像为石头 */ PictureBox_SetImage(me_pic_box, &left_stone); Widget_Disable(btn_j); Widget_Disable(btn_s); Widget_Disable(btn_b); Widget_Enable(btn_next); run_game(0);/* 进入游戏 */ }
void update_clock(void *arg) { time_t rawtime; struct tm * timeinfo; LCUI_Graph h_temp, m_temp, clock_bg, hour_pointer, minute_pointer; LCUI_Widget *widget; LCUI_Widget *bg, *hour, *minute; int h_angle, m_angle; widget = (LCUI_Widget *)arg; /* 初始化图形数据结构 */ Graph_Init(&clock_bg); Graph_Init(&minute_pointer); Graph_Init(&hour_pointer); Graph_Init(&h_temp); Graph_Init(&m_temp); /* 创建几个部件 */ bg = Widget_New("picture_box"); hour = Widget_New("picture_box"); minute = Widget_New("picture_box"); /* PictureBox部件居中显示图片 */ PictureBox_SetSizeMode(bg, SIZE_MODE_CENTER); PictureBox_SetSizeMode(hour, SIZE_MODE_CENTER); PictureBox_SetSizeMode(minute, SIZE_MODE_CENTER); /* 载入图片,保存图形数据 */ Load_Image("new_daytime_background.png", &clock_bg); Load_Image("new_daytime_hour.png", &hour_pointer); Load_Image("new_daytime_minute.png", &minute_pointer); /* 设定PictureBox部件显示的图形 */ PictureBox_SetImage(bg, &clock_bg); PictureBox_SetImage(hour, &hour_pointer); PictureBox_SetImage(minute, &minute_pointer); /* 将这些部件添加至相应容器中 */ Widget_Container_Add(bg, hour); Widget_Container_Add(bg, minute); /* 将部件添加至窗口客户区中 */ Window_ClientArea_Add(widget, bg); /* 改变部件尺寸,使用固定的尺寸 */ Widget_Resize(bg, Size(280, 280)); Widget_Resize(hour, Size(120, 120)); Widget_Resize(minute, Size(120, 120)); /* 改变部件的布局方式,都是居中显示 */ Widget_SetAlign(bg, ALIGN_MIDDLE_CENTER, Pos(0, 0)); Widget_SetAlign(hour, ALIGN_MIDDLE_CENTER, Pos(0, 0)); Widget_SetAlign(minute, ALIGN_MIDDLE_CENTER, Pos(0, 0)); /* 显示 */ Widget_Show(hour); Widget_Show(minute); Widget_Show(bg); while(1) { time ( &rawtime ); timeinfo = localtime ( &rawtime ); /* 获取系统当前时间 */ /* 计算时针分针的角度 */ h_angle = 360*timeinfo->tm_hour / 12.0; m_angle = 360*timeinfo->tm_min / 60.0; h_angle += m_angle / 60; /* 根据这个角度来旋转图形 */ Graph_Rotate(&hour_pointer, h_angle, &h_temp); Graph_Rotate(&minute_pointer, m_angle, &m_temp); /* 更改PictureBox部件显示的图形 */ PictureBox_SetImage(hour, &h_temp); PictureBox_SetImage(minute, &m_temp); LCUI_Sleep(1);/* 暂停1秒 */ } LCUIThread_Exit(NULL); }
/* 更新复选框的图形数据 */ static void CheckBox_ExecDraw(LCUI_Widget *widget) { LCUI_Graph *p; LCUI_CheckBox *check_box; check_box = Widget_GetPrivData(widget); if(_LCUIString_Cmp(&widget->style_name, "custom") == 0) { /* 如果为自定义风格,那就使用用户指定的图形,具体可参考按钮部件的处理方法 */ if( !widget->enabled ) { widget->state = WIDGET_STATE_DISABLE; } switch(widget->state){ case WIDGET_STATE_NORMAL: if( check_box->on ) { p = &check_box->img_on_normal; } else { p = &check_box->img_off_normal; } PictureBox_SetImage(check_box->imgbox, p); break; case WIDGET_STATE_OVERLAY : if( check_box->on ) { p = &check_box->img_on_over; } else { p = &check_box->img_off_over; } PictureBox_SetImage(check_box->imgbox, p); break; case WIDGET_STATE_ACTIVE : if( check_box->on ) { p = &check_box->img_on_down; } else { p = &check_box->img_off_down; } PictureBox_SetImage(check_box->imgbox, p); break; case WIDGET_STATE_DISABLE : if( check_box->on ) { p = &check_box->img_on_disable; } else { p = &check_box->img_off_disable; } PictureBox_SetImage(check_box->imgbox, p); break; default : break; } } else {/* 如果按钮的风格为缺省 */ _LCUIString_Copy(&widget->style_name, "default"); if( !widget->enabled ) { widget->state = WIDGET_STATE_DISABLE; } /* 先释放PictureBox部件中保存的图形数据的指针 */ p = PictureBox_GetImage(check_box->imgbox); Graph_Free(p); /* 由于本函数在退出后,使用局部变量保存的图形数据会无效,因此,申请内存空间来储存 */ p = (LCUI_Graph*)calloc(1,sizeof(LCUI_Graph)); switch(widget->state) { case WIDGET_STATE_NORMAL: if( check_box->on ) { Load_Graph_Default_CheckBox_On_Normal(p); } else { Load_Graph_Default_CheckBox_Off_Normal(p); } PictureBox_SetImage(check_box->imgbox, p); break; case WIDGET_STATE_OVERLAY : if( check_box->on ) { Load_Graph_Default_CheckBox_On_Selected(p); } else { Load_Graph_Default_CheckBox_Off_Selected(p); } PictureBox_SetImage(check_box->imgbox, p); break; case WIDGET_STATE_ACTIVE : if( check_box->on ) { Load_Graph_Default_CheckBox_On_Selected(p); } else { Load_Graph_Default_CheckBox_Off_Selected(p); } PictureBox_SetImage(check_box->imgbox, p); break; case WIDGET_STATE_DISABLE : if( check_box->on ) { Load_Graph_Default_CheckBox_On_Disabled(p); } else { Load_Graph_Default_CheckBox_Off_Disabled(p); } PictureBox_SetImage(check_box->imgbox, p); break; default : break; } } }
/* 更新单选框的图形数据 */ static void RadioButton_ExecUpdate( LCUI_Widget widget ) { int img_id; LCUI_Graph *img_ptr; LCUI_RadioButton *radio_button; radio_button = (LCUI_RadioButton*)Widget_GetPrivData(widget); /* 如果为自定义风格,那就使用用户指定的图形 */ if( _LCUIString_Cmp(&widget->style_name, "custom") == 0 ) { if(widget->enabled == FALSE) { widget->state = WIDGET_STATE_DISABLE; } switch(widget->state) { case WIDGET_STATE_NORMAL: if(radio_button->on) { img_ptr = &radio_button->img_on_normal; } else { img_ptr = &radio_button->img_off_normal; } break; case WIDGET_STATE_OVERLAY : if(radio_button->on) { img_ptr = &radio_button->img_on_over; } else { img_ptr = &radio_button->img_off_over; } break; case WIDGET_STATE_ACTIVE : if(radio_button->on) { img_ptr = &radio_button->img_on_down; } else { img_ptr = &radio_button->img_off_down; } break; case WIDGET_STATE_DISABLE : if(radio_button->on) { img_ptr = &radio_button->img_on_disable; } else { img_ptr = &radio_button->img_off_disable; } break; default:return; } PictureBox_SetImage(radio_button->imgbox, img_ptr); } _LCUIString_Copy( &widget->style_name, "default" ); if( !widget->enabled ) { widget->state = WIDGET_STATE_DISABLE; } switch(widget->state) { case WIDGET_STATE_NORMAL: if(radio_button->on) { img_id = IMG_ON_NORMAL; } else { img_id = IMG_OFF_NORMAL; } break; case WIDGET_STATE_OVERLAY : if(radio_button->on) { img_id = IMG_ON_SELECTED; } else { img_id = IMG_OFF_SELECTED; } break; case WIDGET_STATE_ACTIVE : case WIDGET_STATE_DISABLE : default: return; } img_ptr = PictureBox_GetImage( radio_button->imgbox ); Graph_Free( img_ptr ); img_ptr = (LCUI_Graph*)calloc( 1, sizeof(LCUI_Graph) ); RadioButton_LoadDefaultGraph( img_ptr, img_id ); PictureBox_SetImage( radio_button->imgbox, img_ptr ); }