static void Widget_ComputeSize(LCUI_Widget w) { float width, height; float max_width = -1, default_width = -1; Widget_ComputeLimitSize(w); width = ComputeXMetric(w, key_width); height = ComputeYMetric(w, key_height); if (width > 0) { width = Widget_GetLimitedWidth(w, width); } if (height > 0) { height = Widget_GetLimitedHeight(w, height); } if (!Widget_HasAutoStyle(w, key_width) && !Widget_HasAutoStyle(w, key_height)) { if (w->computed_style.box_sizing == SV_CONTENT_BOX) { width = ToBorderBoxWidth(w, width); height = ToBorderBoxHeight(w, height); } Widget_SetSize(w, width, height); return; } if (w->computed_style.box_sizing == SV_BORDER_BOX) { width = ToContentBoxWidth(w, width); height = ToContentBoxHeight(w, height); } if (Widget_HasAutoStyle(w, key_width) && Widget_HasFillAvailableWidth(w)) { width = Widget_ComputeFillAvailableWidth(w); width = ToContentBoxWidth(w, width); if (!Widget_HasStaticWidthParent(w)) { default_width = w->parent->box.content.width; if (w->computed_style.box_sizing == SV_BORDER_BOX) { default_width = ToContentBoxWidth(w, default_width); } max_width = width; width = 0; } } Widget_ComputeContentSize(w, &width, &height); if (default_width != -1 && width < default_width) { width = default_width; } if (max_width != -1 && width > max_width) { width = max_width; } if (w->computed_style.box_sizing == SV_BORDER_BOX) { width = ToBorderBoxWidth(w, width); height = ToBorderBoxHeight(w, height); } Widget_SetSize(w, width, height); }
void GameWindow_InitLicenseWindow(void) { window = Widget_New("window"); label_license = Widget_New("label"); textbox_license = Widget_New("text_box"); box = Widget_New(NULL); btn_ok = Widget_New("button"); Window_ClientArea_Add( window, label_license ); Window_ClientArea_Add( window, box ); Window_ClientArea_Add( window, btn_ok ); Widget_Container_Add( box, textbox_license ); Widget_SetBackgroundColor( label_license, RGB(255,255,255) ); Widget_SetBackgroundTransparent( label_license, FALSE ); Widget_SetAlign( label_license, ALIGN_TOP_CENTER, Pos(0,0) ); Widget_SetAlign( box, ALIGN_TOP_CENTER, Pos(0,8) ); Widget_SetAlign( btn_ok, ALIGN_BOTTOM_CENTER, Pos(0,-5) ); Label_TextW( label_license, TEXT_LICENSE ); Button_TextW( btn_ok, TEXT_OK ); TextBox_SetAutoWrap( textbox_license, TRUE ); TextBox_SetMultiline( textbox_license, TRUE ); TextBox_SetReadOnly( textbox_license, TRUE ); TextBox_SetUsingStyleTags( textbox_license, TRUE ); TextBox_TextW( textbox_license, license_text ); TextBox_ShowCursor( textbox_license, FALSE ); Widget_SetStyleID( window, WINDOW_STYLE_LINE ); Widget_SetPadding( Window_GetClientArea(window), Padding(10,10,10,10) ); Widget_SetAutoSize( btn_ok, FALSE, 0 ); Widget_SetBorder( box, Border(1,BORDER_STYLE_SOLID,RGB(200,200,200)) ); Widget_SetPadding( box, Padding(10,10,10,10) ); Widget_SetSize( box, "100%", "280px" ); Widget_SetSize( textbox_license, "100%", "100%" ); Widget_Resize( window, WINDOW_SIZE ); Widget_Resize( btn_ok, BTN_SIZE ); Widget_ConnectEvent( btn_ok, EVENT_CLICKED, btn_ok_on_clicked ); Widget_Show( textbox_license ); Widget_Show( box ); Widget_Show( label_license ); Widget_Show( btn_ok ); }
/* * 创建一个部件,作为滚动条的容器 * 再创建一个部件,作为滚动条 * 限制滚动条的移动范围 * */ static void ScrollBar_Init( LCUI_Widget *widget ) { LCUI_ScrollBar *scrollbar; scrollbar = WidgetPrivData_New(widget, sizeof(LCUI_ScrollBar)); scrollbar->data.max_num = 100; scrollbar->data.current_num = 100; scrollbar->data.max_size = 100; scrollbar->data.current_size = 100; scrollbar->direction = 0; scrollbar->callback_func = NULL; scrollbar->widget = Widget_New("button"); /* 禁用部件的自动尺寸调整 */ Widget_SetAutoSize( scrollbar->widget, FALSE, 0 ); Widget_Container_Add( widget, scrollbar->widget ); Widget_SetSize( scrollbar->widget, "100%", "100%" ); Widget_LimitPos( scrollbar->widget, Pos(0,0), Pos(0,0) ); Widget_SetBorder( widget, Border(1, BORDER_STYLE_SOLID, RGB(100,100,100)) ); Widget_SetPadding( widget, Padding(1,1,1,1) ); Widget_SetBackgroundColor( widget, RGB(200,200,200) ); Widget_SetBackgroundTransparent( widget, FALSE ); Widget_Show( scrollbar->widget ); Widget_Event_Connect( scrollbar->widget, EVENT_DRAG, ScrollBar_Drag ); }
static void Window_OnUpdate( LCUI_Widget *window ) { LCUI_Window *wnd; LCUI_Border border; char h_str[20]; wnd = (LCUI_Window*)Widget_GetPrivateData( window ); border = Border( 1, BORDER_STYLE_SOLID, RGB(200,200,200) ); border.top_width = TOP_PANDDING; /* 若窗口已获得焦点 */ if( Widget_GetFocus( window ) ) { border.top_color = wnd->theme_color; border.bottom_color = wnd->theme_color; border.left_color = wnd->theme_color; border.right_color = wnd->theme_color; Widget_SetShadow( window, BoxShadow(0,0,8,wnd->theme_color) ); } else { Widget_SetShadow( window, BoxShadow(0,0,8,ARGB(120,200,200,200)) ); } Widget_SetBorder( window, border ); /* 更新窗口标题栏上的关闭按钮 */ Widget_Update( wnd->btn_close ); sprintf( h_str, "%dpx", Widget_GetContainerHeight(window)-35 ); Widget_SetSize( wnd->client_area, "100%", h_str ); }
static void ScrollBar_Update( LCUI_Widget *widget ) { static int pos, max_len; static double scale; static char scale_str[256]; LCUI_ScrollBar *scrollbar; scrollbar = Widget_GetPrivData( widget ); /* 计算比例,之后转换成字符串 */ scale = scrollbar->data.current_size*1.0 / scrollbar->data.max_size; sprintf( scale_str, "%.2lf%%", scale*100 ); //_DEBUG_MSG("current_num: %d, max_num: %d\n", //scrollbar->data.current_num, scrollbar->data.max_num); /* 判断滚动条的方向 */ if( scrollbar->direction == 0 ) { /* 纵向 */ Widget_SetSize( scrollbar->widget, NULL, scale_str ); max_len = Widget_GetContainerHeight( widget ); max_len -= _Widget_GetHeight( scrollbar->widget ); Widget_LimitPos( scrollbar->widget, Pos(0,0), Pos( 0, max_len ) ); scale = scrollbar->data.current_num*1.0 / scrollbar->data.max_num; pos = scale * max_len; //_DEBUG_MSG("num: %d / %d\n", //scrollbar->data.current_num, scrollbar->data.max_num); //_DEBUG_MSG("ScrollBar_Update(), scale: %.2f\n", scale); //_DEBUG_MSG("ScrollBar_Update(), y: %d\n", pos); /* 移动滚动条 */ Widget_Move( scrollbar->widget, Pos(0,pos) ); } else { /* 横向 */ Widget_SetSize( scrollbar->widget, scale_str, NULL ); max_len = Widget_GetContainerWidth( widget ); max_len -= _Widget_GetWidth( scrollbar->widget ); Widget_LimitPos( scrollbar->widget, Pos(0,0), Pos(max_len,0) ); scale = scrollbar->data.current_num*1.0 / scrollbar->data.max_num; pos = scale * max_len; //printf("ScrollBar_Update(), num: %d / %d\n", //scrollbar->data.current_num, scrollbar->data.max_num); //printf("ScrollBar_Update(), scale: %.2f\n", scale); //printf("ScrollBar_Update(), x: %d\n", pos); Widget_Move( scrollbar->widget, Pos(pos, 0) ); } }
void Widget_AutoSize(LCUI_Widget w) { float width = 0, height = 0; if (!Widget_CheckStyleType(w, key_width, scale)) { width = ComputeXMetric(w, key_width); } if (!Widget_CheckStyleType(w, key_height, scale)) { height = ComputeYMetric(w, key_height); } Widget_ComputeContentSize(w, &width, &height); width = Widget_GetAdjustedWidth(w, width); Widget_SetSize(w, ToBorderBoxWidth(w, width), ToBorderBoxHeight(w, height)); }
static void thread(void *arg) { LCUI_Widget *widget, *label; widget = (LCUI_Widget*)arg; label = Widget_New( "label" ); Widget_Container_Add( widget, label ); Widget_SetAlign( label, ALIGN_MIDDLE_CENTER, Pos(0,0) ); Widget_Show( label ); while(LCUI_Active()) { Label_Text( label, "DOCK_TYPE_TOP" ); Widget_SetDock( widget, DOCK_TYPE_TOP ); Widget_SetSize( widget, "120px", "120px" ); /* 还原尺寸 */ LCUI_Sleep(1); Label_Text( label, "DOCK_TYPE_LEFT" ); Widget_SetDock( widget, DOCK_TYPE_LEFT ); Widget_SetSize( widget, "120px", "120px" ); LCUI_Sleep(1); Label_Text( label, "DOCK_TYPE_RIGHT" ); Widget_SetDock( widget, DOCK_TYPE_RIGHT ); Widget_SetSize( widget, "120px", "120px" ); LCUI_Sleep(1); Label_Text( label, "DOCK_TYPE_BOTTOM" ); Widget_SetDock( widget, DOCK_TYPE_BOTTOM ); Widget_SetSize( widget, "120px", "120px" ); LCUI_Sleep(1); Label_Text( label, "DOCK_TYPE_FILL" ); Widget_SetDock( widget, DOCK_TYPE_FILL ); Widget_SetSize( widget, "120px", "120px" ); LCUI_Sleep(1); Label_Text( label, "DOCK_TYPE_NONE" ); Widget_SetDock( widget, DOCK_TYPE_NONE ); Widget_SetSize( widget, "120px", "120px" ); LCUI_Sleep(1); } LCUIThread_Exit(NULL); }
static void TextBox_ScrollBar_UpdateSize( LCUI_Widget *widget ) /* 更新滚动条的长度 */ { int tmp; char size_str[15]; LCUI_Size area_size, layer_size; LCUI_Widget *scrollbar[2], *label; LCUI_TextLayer *layer; label = TextBox_GetLabel( widget ); /* 获取文本图层 */ layer = TextBox_GetTextLayer( widget ); /* 获取文本图层和文本框区域的尺寸 */ layer_size = TextLayer_GetSize( layer ); area_size = Widget_GetContainerSize( widget ); /* 获取纵向和横向滚动条 */ scrollbar[0] = TextBox_GetScrollbar( widget, 0 ); scrollbar[1] = TextBox_GetScrollbar( widget, 1 ); /* 如果文本图层高度超过显示区域 */ if( layer->enable_multiline && area_size.h > 0 && layer_size.h > area_size.h ) { tmp = area_size.w - Widget_GetWidth( scrollbar[0] ); #ifdef LCUI_BUILD_IN_LINUX snprintf( size_str, sizeof(size_str)-1, "%dpx", tmp ); #else sprintf_s( size_str, sizeof(size_str)-1, "%dpx", tmp ); #endif Widget_SetSize( label, size_str, NULL ); /* 修改滚动条中记录的最大值和当前值,让滚动条在更新后有相应的长度 */ ScrollBar_SetMaxSize( scrollbar[0], layer_size.h ); ScrollBar_SetCurrentSize( scrollbar[0], area_size.h ); Widget_Show( scrollbar[0] ); /* 如果横向滚动条可见 */ if( scrollbar[1]->visible ) { tmp = area_size.h - Widget_GetHeight( scrollbar[1] ); #ifdef LCUI_BUILD_IN_LINUX snprintf( size_str, sizeof(size_str)-1, "%dpx", tmp ); #else sprintf_s( size_str, sizeof(size_str)-1, "%dpx", tmp ); #endif Widget_SetSize( scrollbar[0], NULL, size_str ); } else { Widget_SetSize( scrollbar[0], NULL, "100%" ); } } else { /* 不需要显示滚动条 */ Widget_Hide( scrollbar[0] ); Widget_SetSize( label, "100%", NULL ); } /* 和上面的处理基本一样,这个是处理横向滚动条 */ if( layer->enable_multiline && area_size.w > 0 && layer_size.w > area_size.w ) { tmp = area_size.h - Widget_GetHeight( scrollbar[1] ); #ifdef LCUI_BUILD_IN_LINUX snprintf( size_str, sizeof(size_str)-1, "%dpx", tmp ); #else sprintf_s( size_str, sizeof(size_str)-1, "%dpx", tmp ); #endif Widget_SetSize( label, NULL, size_str ); ScrollBar_SetMaxSize( scrollbar[1], layer_size.w ); ScrollBar_SetCurrentSize( scrollbar[1], area_size.w ); Widget_Show( scrollbar[1] ); if( scrollbar[0]->visible ) { tmp = area_size.w - Widget_GetWidth( scrollbar[0] ); #ifdef LCUI_BUILD_IN_LINUX snprintf( size_str, sizeof(size_str)-1, "%dpx", tmp ); #else sprintf_s( size_str, sizeof(size_str)-1, "%dpx", tmp ); #endif Widget_SetSize( scrollbar[1], size_str, NULL ); } else { Widget_SetSize( scrollbar[1], "100%", NULL ); } } else { Widget_SetSize( label, NULL, "100%" ); Widget_Hide( scrollbar[1] ); } }
static void TextBox_Init( LCUI_Widget *widget ) /* 初始化文本框相关数据 */ { LCUI_TextBox *textbox; widget->valid_state = WIDGET_STATE_ACTIVE | WIDGET_STATE_OVERLAY; widget->valid_state |= (WIDGET_STATE_NORMAL | WIDGET_STATE_DISABLE); textbox = WidgetPrivData_New(widget, sizeof(LCUI_TextBox)); textbox->text = Widget_New( "label" ); textbox->cursor = Widget_New( NULL ); textbox->scrollbar[0] = Widget_New( "scrollbar" ); textbox->scrollbar[1] = Widget_New( "scrollbar" ); /* 不可获得焦点 */ textbox->text->focus = FALSE; textbox->cursor->focus = FALSE; textbox->scrollbar[0]->focus = FALSE; textbox->scrollbar[1]->focus = FALSE; textbox->limit_mode = 0; textbox->block_size = 256; textbox->show_placeholder = FALSE; LCUIWString_Init( &textbox->placeholder ); TextStyle_Init( &textbox->placeholder_style ); TextStyle_FontColor( &textbox->placeholder_style, RGB(100,100,100) ); Label_AutoSize( textbox->text, FALSE, 0 ); Widget_SetSize( textbox->text, "100%", "100%" ); /* 添加至相应的容器 */ Widget_Container_Add( textbox->text, textbox->cursor ); Widget_Container_Add( widget, textbox->text ); Widget_Container_Add( widget, textbox->scrollbar[0] ); Widget_Container_Add( widget, textbox->scrollbar[1] ); /* 设置滚动条的尺寸 */ Widget_SetSize( textbox->scrollbar[0], "10px", NULL ); Widget_SetSize( textbox->scrollbar[1], NULL, "10px" ); Widget_SetAlign( textbox->scrollbar[0], ALIGN_TOP_RIGHT, Pos(0,0) ); Widget_SetAlign( textbox->scrollbar[1], ALIGN_BOTTOM_LEFT, Pos(0,0) ); /* 滚动条设为横向 */ ScrollBar_SetDirection( textbox->scrollbar[1], 1 ); /* 将回调函数与滚动条连接 */ ScrollBar_Connect( textbox->scrollbar[0], TextBox_TextLayer_VertScroll, widget ); ScrollBar_Connect( textbox->scrollbar[1], TextBox_HoriScroll_TextLayer, widget ); Widget_Show( textbox->text ); Queue_Init( &textbox->text_block_buff, sizeof(LCUI_TextBlock), destroy_textblock ); TextLayer_UsingStyleTags( Label_GetTextLayer(textbox->text), FALSE ); Widget_SetPadding( widget, Padding(2,2,2,2) ); Widget_SetBackgroundColor( textbox->cursor, RGB(0,0,0) ); Widget_SetBackgroundTransparent( textbox->cursor, FALSE ); Widget_SetBackgroundTransparent( widget, FALSE ); Widget_Resize( textbox->cursor, Size(1, 14) ); /* 设置可点击区域的alpha值要满足的条件 */ Set_Widget_ClickableAlpha( textbox->cursor, 0, 1 ); Set_Widget_ClickableAlpha( textbox->text, 0, 1 ); /* 设定定时器,每1秒闪烁一次 */ if( __timer_id == -1 ) { __timer_id = set_timer( 500, blink_cursor, TRUE ); } Widget_Event_Connect( widget, EVENT_DRAG, TextBox_TextLayer_Click ); /* 关联 FOCUS_OUT 和 FOCUS_IN 事件 */ Widget_Event_Connect( widget, EVENT_FOCUSOUT, _putout_textbox_cursor ); Widget_Event_Connect( widget, EVENT_FOCUSIN, _putin_textbox_cursor ); /* 关联按键输入事件 */ Widget_Event_Connect( widget, EVENT_KEYBOARD, TextBox_Input ); /* 默认不启用多行文本模式 */ TextBox_Multiline( widget, FALSE ); }
static void widgets_configure( void ) { /* 设定标题栏显示的文本 */ Window_SetTitleText( window, TEXT_WND_TITLE ); Window_SetTitleIcon( window, &icon ); Widget_Resize( window, WND_SIZE ); /* 将部件加入至相应的容器 */ Widget_Container_Add( btn_area, btn_s ); Widget_Container_Add( btn_area, btn_j ); Widget_Container_Add( btn_area, btn_b ); Widget_Container_Add( btn_area, btn_next ); Window_ClientArea_Add( window, label ); Window_ClientArea_Add( window, l_vs ); Window_ClientArea_Add( window, me_pic_box ); Window_ClientArea_Add( window, cpu_pic_box ); Window_ClientArea_Add( window, btn_area ); /* 设定label部件显示的文本内容 */ Label_Text( label, TEXT_TIP ); /* 设定label部件中的字体大小为55像素,颜色为红色 */ Label_Text( l_vs, TEXT_VS ); /* 禁用按钮的自动尺寸调整 */ Widget_SetAutoSize( btn_b, FALSE, 0 ); Widget_SetAutoSize( btn_s, FALSE, 0 ); Widget_SetAutoSize( btn_j, FALSE, 0 ); Widget_SetAutoSize( btn_next, FALSE, 0 ); /* 调整这些部件的大小 */ Widget_SetSize( btn_b, "78px", "30px" ); Widget_SetSize( btn_s, "77px", "30px" ); Widget_SetSize( btn_j, "77px", "30px" ); Widget_SetSize( btn_next, "78px", "30px" ); Widget_SetSize( btn_area, NULL, "30px" ); Widget_SetDock( btn_area, DOCK_TYPE_BOTTOM ); Widget_Resize( me_pic_box, Size(110, 140) ); Widget_Resize( cpu_pic_box, Size(110, 140) ); /* 自定义这四个按钮的风格 */ Button_CustomStyle( btn_b, &btn_normal, &btn_over, &btn_down, &btn_focus, NULL); Button_CustomStyle( btn_s, &btn_normal, &btn_over, &btn_down, &btn_focus, NULL); Button_CustomStyle( btn_j, &btn_normal, &btn_over, &btn_down, &btn_focus, NULL); Button_CustomStyle( btn_next, &btn_normal, &btn_over, &btn_down, &btn_focus, NULL); /* 设定部件的定位类型 */ Widget_SetPosType( btn_s, POS_TYPE_STATIC ); Widget_SetPosType( btn_j, POS_TYPE_STATIC ); Widget_SetPosType( btn_b, POS_TYPE_STATIC ); Widget_SetPosType( btn_next, POS_TYPE_STATIC ); /* 设定布局 */ Widget_SetAlign(me_pic_box, ALIGN_MIDDLE_LEFT, Pos(5, -5)); Widget_SetAlign(cpu_pic_box, ALIGN_MIDDLE_RIGHT, Pos(-5, -5)); Widget_SetAlign(label, ALIGN_TOP_CENTER, Pos(0, 3)); Widget_SetAlign(l_vs, ALIGN_MIDDLE_CENTER, Pos(0, 0)); /* 设定部件的边框及颜色 */ Widget_SetBorder(me_pic_box, Border(1, BORDER_STYLE_SOLID, RGB(0,0,0))); Widget_SetBorder(cpu_pic_box, Border(1, BORDER_STYLE_SOLID, RGB(0,0,0))); /* 关联这些按钮的单击事件 */ Widget_Event_Connect(btn_s, EVENT_CLICKED, select_stone ); Widget_Event_Connect(btn_j, EVENT_CLICKED, select_knife ); Widget_Event_Connect(btn_b, EVENT_CLICKED, select_cloth ); Widget_Event_Connect(btn_next, EVENT_CLICKED, next ); Widget_Event_Connect(Window_GetCloseButton(window), EVENT_CLICKED, destroy); }
/** 初始化window部件相关数据 */ static void Window_OnInit( LCUI_Widget *window ) { LCUI_Window *wnd; LCUI_Graph btn_bg; LCUI_TextStyle style; LCUI_Border border; wnd = Widget_NewPrivateData( window, LCUI_Window ); wnd->theme_color = COLOR_EMERALD; wnd->theme_color.a = 128; wnd->titlebar = Widget_New(NULL); wnd->client_area = Widget_New(NULL); wnd->btn_close = Widget_New(WIDGET_CLOSE_BUTTON); wnd->icon = Widget_New(NULL); wnd->text = Label_New(); wnd->titlebar->focus = FALSE; wnd->icon->focus = FALSE; wnd->text->focus = FALSE; Widget_SetFocus( wnd->client_area ); Widget_SetClickable( wnd->icon, FALSE ); Widget_SetClickable( wnd->text, FALSE ); Widget_SetClickable( wnd->titlebar, FALSE ); Widget_SetClickable( wnd->client_area, FALSE ); Graph_Init( &btn_bg ); /* 载入按钮背景 */ LoadCloseButtonIMG( &btn_bg ); /* close按钮显示在左上角 */ Widget_SetAlign( wnd->btn_close, ALIGN_TOP_RIGHT, Pos(0,0) ); Widget_Resize( wnd->btn_close, Size(30, 30) ); Widget_SetBackgroundImage( wnd->btn_close, &btn_bg ); Widget_SetBackgroundLayout( wnd->btn_close, LAYOUT_CENTER ); Widget_SetBackgroundTransparent( wnd->icon, TRUE ); Widget_SetBackgroundTransparent( wnd->titlebar, TRUE ); Widget_SetBackgroundTransparent( wnd->client_area, FALSE ); Widget_SetBackgroundTransparent( window, FALSE ); Widget_SetBackgroundColor( window, RGB(255,255,255) ); Widget_SetBackgroundLayout( wnd->icon, LAYOUT_ZOOM ); Widget_SetDock( wnd->titlebar, DOCK_TYPE_TOP ); Widget_SetDock( wnd->client_area, DOCK_TYPE_BOTTOM ); Widget_SetPadding( window, Padding(TOP_PANDDING,1,1,1) ); Widget_SetPadding( wnd->client_area, Padding(1,1,1,1) ); Widget_SetSize( wnd->titlebar, "100%", "35px" ); Border_Init( &border ); border.top_width = 0; border.bottom_width = 1; border.left_width = 1; border.right_width = 1; border.bottom_color = RGB(200,200,200); border.left_color = RGB(255,255,255); border.right_color = RGB(255,255,255); Widget_SetBorder( wnd->titlebar, border ); TextStyle_Init( &style ); TextStyle_FontSize( &style, 18 ); Label_SetTextStyle( wnd->text, style ); /* 放入至容器 */ Widget_Container_Add( wnd->titlebar, wnd->icon ); Widget_Container_Add( wnd->titlebar, wnd->text ); Widget_Container_Add( wnd->titlebar, wnd->btn_close ); Widget_Container_Add( window, wnd->titlebar ); Widget_Container_Add( window, wnd->client_area ); Widget_Resize( window, Size(100, 50) ); Widget_Resize( wnd->icon, Size(24,24) ); Widget_SetAlign( window, ALIGN_MIDDLE_CENTER, Pos(0,0) ); Widget_SetAlign( wnd->icon, ALIGN_MIDDLE_LEFT, Pos(6,0) ); Widget_SetAlign( wnd->text, ALIGN_MIDDLE_LEFT, Pos(6,0) ); /* 关联拖动事件,让鼠标能够拖动标题栏并使窗口移动 */ Widget_ConnectEvent( window, EVENT_DRAG, Window_ExecMove ); /* * 由于需要在窗口获得/失去焦点时进行相关处理,因此需要将回调函数 与部件 * 的FOCUS_IN和FOCUS_OUT事件 进行关联 * */ Widget_ConnectEvent( window, EVENT_FOCUSOUT, Window_OnFocusOut ); Widget_ConnectEvent( window, EVENT_FOCUSIN, Window_OnFocusIn ); Widget_Show( wnd->btn_close ); Widget_Show( wnd->icon ); Widget_Show( wnd->text ); Widget_Show( wnd->titlebar ); Widget_Show( wnd->client_area ); }
/** 初始化键位设置窗口 */ void GameWindow_InitSetKeyboardWindow(void) { /* 创建所需的GUI部件 */ window = Widget_New("window"); box = Widget_New(NULL); label = Widget_New("label"); label_left = Widget_New("label"); label_right = Widget_New("label"); label_up = Widget_New("label"); label_down = Widget_New("label"); label_jump = Widget_New("label"); label_defense = Widget_New("label"); label_a_atk = Widget_New("label"); label_b_atk = Widget_New("label"); btn_left = Widget_New("button"); btn_right = Widget_New("button"); btn_up = Widget_New("button"); btn_down = Widget_New("button"); btn_a_atk = Widget_New("button"); btn_b_atk = Widget_New("button"); btn_jump = Widget_New("button"); btn_defense = Widget_New("button"); btn_ok = Widget_New("button"); btn_reset = Widget_New("button"); Widget_Container_Add( box, btn_left ); Widget_Container_Add( box, btn_right ); Widget_Container_Add( box, btn_up ); Widget_Container_Add( box, btn_down ); Widget_Container_Add( box, btn_jump ); Widget_Container_Add( box, btn_defense ); Widget_Container_Add( box, btn_a_atk ); Widget_Container_Add( box, btn_b_atk ); Widget_Container_Add( box, label_left ); Widget_Container_Add( box, label_right ); Widget_Container_Add( box, label_up ); Widget_Container_Add( box, label_down ); Widget_Container_Add( box, label_jump ); Widget_Container_Add( box, label_defense ); Widget_Container_Add( box, label_a_atk ); Widget_Container_Add( box, label_b_atk ); Window_ClientArea_Add( window, box ); Window_ClientArea_Add( window, label ); Window_ClientArea_Add( window, btn_ok ); Window_ClientArea_Add( window, btn_reset ); Widget_SetAutoSize( btn_left, FALSE, 0 ); Widget_SetAutoSize( btn_right, FALSE, 0 ); Widget_SetAutoSize( btn_up, FALSE, 0 ); Widget_SetAutoSize( btn_down, FALSE, 0 ); Widget_SetAutoSize( btn_jump, FALSE, 0 ); Widget_SetAutoSize( btn_a_atk, FALSE, 0 ); Widget_SetAutoSize( btn_b_atk, FALSE, 0 ); Widget_SetAutoSize( btn_defense, FALSE, 0 ); Widget_SetAutoSize( btn_ok, FALSE, 0 ); Widget_Resize( btn_left, KEYBTN_SIZE ); Widget_Resize( btn_right, KEYBTN_SIZE ); Widget_Resize( btn_up, KEYBTN_SIZE ); Widget_Resize( btn_down, KEYBTN_SIZE ); Widget_Resize( btn_jump, KEYBTN_SIZE ); Widget_Resize( btn_a_atk, KEYBTN_SIZE ); Widget_Resize( btn_b_atk, KEYBTN_SIZE ); Widget_Resize( btn_defense, KEYBTN_SIZE ); Widget_Resize( btn_ok, BTN_SIZE ); Widget_Resize( btn_reset, BTN_SIZE ); Widget_Move( btn_left, Pos(0,50+22) ); Widget_Move( btn_right, Pos(100,50+22) ); Widget_Move( btn_up, Pos(50,0+22) ); Widget_Move( btn_down, Pos(50,50+22) ); Widget_Move( btn_jump, Pos(200,50+22) ); Widget_Move( btn_a_atk, Pos(200,0+22) ); Widget_Move( btn_b_atk, Pos(250,0+22) ); Widget_Move( btn_defense, Pos(250,50+22) ); Widget_Move( label_left, Pos(10,125) ); Widget_Move( label_right, Pos(110,125) ); Widget_Move( label_up, Pos(60,0) ); Widget_Move( label_down, Pos(60,125) ); Widget_Move( label_a_atk, Pos(210,0) ); Widget_Move( label_b_atk, Pos(260,0) ); Widget_Move( label_jump, Pos(210,125) ); Widget_Move( label_defense, Pos(260,125) ); UpdateKeyBtn(); /* 设置各种文本 */ Label_TextW( label_left, TEXT_LEFT ); Label_TextW( label_right, TEXT_RIGHT ); Label_TextW( label_up, TEXT_UP ); Label_TextW( label_down, TEXT_DOWN ); Label_TextW( label_jump, TEXT_JUMP ); Label_TextW( label_defense, TEXT_DEFENSE ); Label_TextW( label_a_atk, TEXT_A_ATK ); Label_TextW( label_b_atk, TEXT_B_ATK ); /* 设置窗口 */ Widget_SetStyleID( window, WINDOW_STYLE_LINE ); Widget_Resize( window, WINDOW_SIZE ); Widget_SetPadding( Window_GetClientArea(window), Padding(10,10,10,10) ); Label_TextW( label, TEXT_SET_KEYBOARD ); Widget_SetBackgroundColor( label, RGB(255,255,255) ); Widget_SetBackgroundTransparent( label, FALSE ); Button_TextW( btn_ok, TEXT_OK ); Button_TextW( btn_reset, TEXT_RESET ); Widget_SetSize( box, "100%", "165px" ); Widget_SetBorder( box, Border(1,BORDER_STYLE_SOLID,RGB(200,200,200)) ); Widget_SetPadding( box, Padding(10,10,10,10) ); Widget_SetAlign( box, ALIGN_TOP_CENTER, Pos(0,12) ); Widget_SetAlign( label, ALIGN_TOP_CENTER, Pos(0,0) ); Widget_SetAlign( btn_ok, ALIGN_BOTTOM_CENTER, Pos(-50,-5) ); Widget_SetAlign( btn_reset, ALIGN_BOTTOM_CENTER, Pos(50,-5) ); /* 为键位按钮连接事件 */ Widget_ConnectEvent( btn_ok, EVENT_CLICKED, btn_ok_on_clicked ); Widget_ConnectEvent( btn_reset, EVENT_CLICKED, btn_reset_on_clicked ); Widget_ConnectEvent( btn_left, EVENT_CLICKED, btn_key_on_clicked ); Widget_ConnectEvent( btn_right, EVENT_CLICKED, btn_key_on_clicked ); Widget_ConnectEvent( btn_up, EVENT_CLICKED, btn_key_on_clicked ); Widget_ConnectEvent( btn_down, EVENT_CLICKED, btn_key_on_clicked ); Widget_ConnectEvent( btn_b_atk, EVENT_CLICKED, btn_key_on_clicked ); Widget_ConnectEvent( btn_a_atk, EVENT_CLICKED, btn_key_on_clicked ); Widget_ConnectEvent( btn_jump, EVENT_CLICKED, btn_key_on_clicked ); Widget_ConnectEvent( btn_defense, EVENT_CLICKED, btn_key_on_clicked ); Widget_Show( btn_left ); Widget_Show( btn_right ); Widget_Show( btn_up ); Widget_Show( btn_down ); Widget_Show( btn_jump ); Widget_Show( btn_a_atk ); Widget_Show( btn_b_atk ); Widget_Show( btn_defense ); Widget_Show( label_left ); Widget_Show( label_right ); Widget_Show( label_up ); Widget_Show( label_down ); Widget_Show( label_jump ); Widget_Show( label_a_atk ); Widget_Show( label_b_atk ); Widget_Show( label_defense ); Widget_Show( btn_ok ); Widget_Show( btn_reset ); Widget_Show( box ); Widget_Show(label ); }