int main(int argc, char*argv[]) /* 主函数,程序的入口 */ { LCUI_Init(); LCUI_Widget *windows[4]; /* 创建窗口部件 */ windows[0] = Window_New("主窗口", NULL, Size(320, 240)); windows[1] = Window_New("子窗口 A", NULL, Size(240, 200)); windows[2] = Window_New("子窗口 B", NULL, Size(180, 150)); windows[3] = Window_New("子窗口 C", NULL, Size(150, 100)); /* 改变风格 */ Widget_SetStyleID( windows[1], WINDOW_STYLE_PURE_ORANGE ); Widget_SetStyleID( windows[2], WINDOW_STYLE_PURE_GREEN ); Widget_SetStyleID( windows[3], WINDOW_STYLE_PURE_RED ); /* 将子窗口放入主窗口的客户区中 */ Window_ClientArea_Add( windows[0], windows[1] ); Window_ClientArea_Add( windows[0], windows[2] ); Window_ClientArea_Add( windows[0], windows[3] ); /* 显示它们 */ Widget_Show(windows[0]); Widget_Show(windows[1]); Widget_Show(windows[2]); Widget_Show(windows[3]); Widget_Event_Connect( Window_GetCloseButton(windows[0]), EVENT_CLICKED, destroy); LCUI_Main(); /* 进入主循环 */ return 0; }
/* 初始化window部件相关数据 */ static void Window_Init( LCUI_Widget *win_p ) { LCUI_Widget *titlebar; LCUI_Widget *client_area; LCUI_Widget *btn_close; LCUI_Window *win; static LCUI_Graph btn_bg; win = (LCUI_Window*)Widget_NewPrivData(win_p, sizeof(LCUI_Window)); titlebar = Widget_New("titlebar"); client_area = Widget_New(NULL); btn_close = Widget_New("button"); titlebar->focus = FALSE; Widget_SetFocus( client_area ); Graph_Init( &btn_bg ); /* 载入按钮背景 */ Window_GetCloseButtonBG( &btn_bg ); /* 显示在左上角 */ Widget_SetAlign(btn_close, ALIGN_TOP_RIGHT, Pos(0, 0)); /* 将尺寸改成和图片一样 */ Widget_SetAutoSize( btn_close, FALSE, 0 ); Widget_Resize(btn_close, Size(44, 20)); Widget_SetBackgroundImage( btn_close, &btn_bg ); Widget_SetBackgroundLayout( btn_close, LAYOUT_CENTER ); /* 没有背景图就填充背景色 */ Widget_SetBackgroundTransparent( win_p, FALSE ); /* 部件的风格ID */ Widget_SetStyleID( win_p, WINDOW_STYLE_PURE_BLUE ); Widget_SetStyleID( btn_close, BUTTON_STYLE_FLAT ); /* 保存部件指针 */ win->client_area = client_area; win->titlebar = titlebar; win->btn_close = btn_close; /* 放入至容器 */ Widget_Container_Add(titlebar, btn_close); Widget_Container_Add(win_p, titlebar); Widget_Container_Add(win_p, client_area); /* 窗口初始尺寸 */ Widget_Resize(win_p, Size(100, 50)); Widget_Show(btn_close); /* 关联拖动事件,让鼠标能够拖动标题栏并使窗口移动 */ Widget_Event_Connect(titlebar, EVENT_DRAG, Window_ExecMove ); /* * 由于需要在窗口获得/失去焦点时进行相关处理,因此需要将回调函数 与部件 * 的FOCUS_IN和FOCUS_OUT事件 进行关联 * */ Widget_Event_Connect( win_p, EVENT_FOCUSOUT, Window_FocusOut ); Widget_Event_Connect( win_p, EVENT_FOCUSIN, Window_FocusIn ); /* 设置窗口部件的初始位置 */ Widget_SetAlign( win_p, ALIGN_MIDDLE_CENTER, Pos(0,0) ); }
/* 初始化按钮部件的数据 */ static void Button_Init( LCUI_Widget *widget ) { int valid_state; LCUI_Button *button; button = WidgetPrivData_New(widget, sizeof(LCUI_Button)); /* 初始化图像数据 */ Graph_Init(&button->btn_disable); Graph_Init(&button->btn_normal); Graph_Init(&button->btn_focus); Graph_Init(&button->btn_down); Graph_Init(&button->btn_over); valid_state = (WIDGET_STATE_NORMAL | WIDGET_STATE_ACTIVE); valid_state |= (WIDGET_STATE_DISABLE | WIDGET_STATE_OVERLAY); Widget_SetValidState( widget, valid_state ); button->label = Widget_New("label");/* 创建label部件 */ /* 将按钮部件作为label部件的容器 */ Widget_Container_Add(widget, button->label); /* label部件居中显示 */ Widget_SetAlign(button->label, ALIGN_MIDDLE_CENTER, Pos(0,0)); Widget_Show(button->label); /* 显示label部件 */ /* 启用自动尺寸调整,以适应内容 */ Widget_SetAutoSize( widget, TRUE, AUTOSIZE_MODE_GROW_AND_SHRINK); Widget_SetStyleID( widget, BUTTON_STYLE_DEFAULT ); /* 关联EVENT_FOCUSOUT事件,以在按钮失去焦点时重绘按钮 */ Widget_Event_Connect( widget, EVENT_FOCUSOUT, Button_ProcFocusOut ); }
int main(int argc, char **argv) { LCUI_Widget *window; /* 载入图像资源 */ LoadIMG(); /* 初始化LCUI */ LCUI_Init(350,280,0); /* 创建窗口 */ window = Widget_New("window"); /* 设置窗口背景色 */ Widget_SetBackgroundColor( window, RGB(255,255,255) ); /* 调整窗口尺寸 */ Widget_Resize( window, Size(320, 240) ); /* 设置窗口为线条边框风格 */ Widget_SetStyleID( window, WINDOW_STYLE_NONE ); /* 将界面创建至窗口内 */ CreateGUI( window ); /* 设置定时器,用于定时更新时间显示 */ LCUITimer_Set( 1000, UpdateTimeView, NULL, TRUE ); /* 设置定时器,用于更新滑块的位置 */ LCUITimer_Set( 20, PicBtn_UpdatePos, NULL, TRUE ); /* 显示窗口 */ Widget_Show( window ); /* 在LCUI退出时释放图像资源 */ LCUIApp_AtQuit( FreeIMG ); return LCUI_Main(); }
/* 按下按钮后将调用的回调函数 */ void switch_style(LCUI_Widget *widget, LCUI_WidgetEvent *event) { /* 找到被选中的单选框,并为窗口设定相应风格 */ if(RadioButton_IsOn(rdbtn[0])) { Widget_SetStyleID( main_window, WINDOW_STYLE_PURE_BLUE ); } if(RadioButton_IsOn(rdbtn[1])) { Widget_SetStyleID( main_window, WINDOW_STYLE_PURE_GREEN ); } if(RadioButton_IsOn(rdbtn[2])) { Widget_SetStyleID( main_window, WINDOW_STYLE_PURE_RED ); } if(RadioButton_IsOn(rdbtn[3])) { Widget_SetStyleID( main_window, WINDOW_STYLE_PURE_ORANGE ); } if(RadioButton_IsOn(rdbtn[4])) { Widget_SetStyleID( main_window, WINDOW_STYLE_PURE_PURPLE ); } }
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 ); }
/* 自定义按钮在各种状态下显示的位图 */ LCUI_API void Button_CustomStyle( LCUI_Widget *widget, LCUI_Graph *normal, LCUI_Graph *over, LCUI_Graph *down, LCUI_Graph *focus, LCUI_Graph *disable) { LCUI_Button *btn_data; btn_data = Widget_GetPrivData(widget); if( Graph_IsValid(normal) ) { btn_data->btn_normal = *normal; } else { Graph_Init( &btn_data->btn_normal ); } if( Graph_IsValid(over) ) { btn_data->btn_over = *over; } else { Graph_Init( &btn_data->btn_over ); } if( Graph_IsValid(down) ) { btn_data->btn_down = *down; } else { Graph_Init( &btn_data->btn_down ); } if( Graph_IsValid(focus) ) { btn_data->btn_focus = *focus; } else { Graph_Init( &btn_data->btn_focus ); } if( Graph_IsValid(disable) ) { btn_data->btn_disable = *disable; } else { Graph_Init( &btn_data->btn_disable ); } /* 设定为自定义风格 */ Widget_SetStyleID(widget, BUTTON_STYLE_CUSTOM); Widget_Draw(widget); /* 重新绘制部件 */ }
/** 初始化键位设置窗口 */ 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 ); }