int main(int argc, char *argv[]) { int i; LCUI_Init( argc, argv ); LCUI_RGB color[6]={{255,255,255},{127,127,127}, {255,0,0}, {255,165,0}, {30,144,255}, {65,200,65} }; LCUI_Widget *window, *widget[6], *label[6]; window = Create_Widget( "window" ); for(i=0; i<6; ++i) { widget[i] = Create_Widget( NULL ); label[i] = Create_Widget( "label" ); Label_Text( label[i], "Area %d" , i); Widget_Container_Add( widget[i], label[i] ); Window_Client_Area_Add( window, widget[i] ); Resize_Widget( widget[i], Size(80,80) ); Set_Widget_PosType( widget[i], POS_TYPE_STATIC ); Set_Widget_Align( label[i], ALIGN_MIDDLE_CENTER, Pos(0,0) ); Set_Widget_Border( widget[i], RGB(0,0,0), Border(1,1,1,1) ); Set_Widget_BG_Mode( widget[i], BG_MODE_FILL_BACKCOLOR ); Set_Widget_Backcolor( widget[i], color[i] ); Show_Widget( label[i] ); Show_Widget( widget[i] ); } Set_Window_Title_Text( window, "测试部件布局-2" ); Resize_Widget( window, Size(320, 240) ); Show_Widget( window ); return LCUI_Main(); }
static void Window_Init(LCUI_Widget *win_p) /* * 功能:初始化窗口 * 说明:类似于构造函数 **/ { LCUI_Widget *titlebar; LCUI_Widget *client_area; LCUI_Widget *btn_close; LCUI_Window *win; win = (LCUI_Window*)Widget_Create_PrivData(win_p, sizeof(LCUI_Window)); win->hide_style = NONE; win->show_style = NONE; win->count = 0; win->init_align = ALIGN_MIDDLE_CENTER; /* 创建一个标题栏部件 */ titlebar = Create_Widget("titlebar"); /* 再创建一个客户区部件 */ client_area = Create_Widget(NULL); btn_close = Create_Widget("button"); static LCUI_Graph btn_highlight, btn_normal, btn_down; Graph_Init(&btn_down); Graph_Init(&btn_highlight); Graph_Init(&btn_normal); /* 载入默认图形 */ Load_Graph_Default_TitleBar_CloseBox_Normal(&btn_normal); Load_Graph_Default_TitleBar_CloseBox_Down(&btn_down); Load_Graph_Default_TitleBar_CloseBox_HighLight(&btn_highlight); /* 显示在左上角 */ Set_Widget_Align(btn_close, ALIGN_TOP_RIGHT, Pos(0, -2)); /* 将尺寸改成和图片一样 */ Resize_Widget(btn_close, Size(btn_normal.width, btn_normal.height)); Custom_Button_Style(btn_close, &btn_normal, &btn_highlight, &btn_down, NULL, NULL); /* 关联按钮的点击事件,当按钮被点击后,调用Quit_Window函数 */ Widget_Clicked_Event_Connect(btn_close, Quit_Parent_Window, NULL); Graph_Free(&btn_highlight); Graph_Free(&btn_down); Graph_Free(&btn_normal); win->client_area = client_area; win->titlebar = titlebar; win->btn_close = btn_close; /* 没有背景图就填充背景色 */ Set_Widget_BG_Mode(win_p, BG_MODE_FILL_BACKCOLOR); Set_Widget_Border_Style(win_p, BORDER_STYLE_STANDARD); /* 放入至容器 */ Widget_Container_Add(titlebar, btn_close); Widget_Container_Add(win_p, titlebar); Widget_Container_Add(win_p, client_area); Resize_Widget(win_p, Size(50, 50)); Show_Widget(btn_close); Widget_Drag_Event_Connect(titlebar, Move_Window); }
int main(int argc,char*argv[]) { /* 声明几个部件 */ LCUI_Widget *window, *label, *logo, *img; int width, height; /* 自定义默认字体文件位置 */ //Set_Default_Font("msyh.ttf"); /* 初始化LCUI */ LCUI_Init(argc, argv); /* 创建一个LCUI程序窗口 */ width = 320;//Get_Screen_Width(); /* 窗口的宽度 */ height = 240;//Get_Screen_Height();; /* 窗口的高度 */ /* 创建部件 */ window = Create_Widget("window"); label = Create_Widget("label"); logo = Create_Widget("picture_box"); img = Create_Widget("picture_box"); //Set_Widget_Border_Style(window, BORDER_STYLE_NONE); Resize_Widget(img, Size(180, 180)); Resize_Widget(logo, Size(128,128)); Resize_Widget(window, Size(width, height)); Set_Window_Title_Text(window, "LCUI"); Set_Widget_Backcolor(window, RGB(94,200,255)); Set_PictureBox_Size_Mode(logo, SIZE_MODE_CENTER); Set_PictureBox_Image_From_File(logo, "logo_128x128.png"); Set_Label_Text(label, "LCUI 正在载入..."); Set_Label_Font(label, 15, NULL); Set_Widget_Align(logo, ALIGN_MIDDLE_CENTER, Pos(0, -20)); Set_Widget_Align(label, ALIGN_MIDDLE_CENTER, Pos(0, +70)); /* 将这三个部件放入窗口客户区中 */ Window_Client_Area_Add(window, label); Window_Client_Area_Add(window, img); Window_Client_Area_Add(window, logo); pthread_t t; LCUI_Thread_Create(&t, NULL, change_graph, (void*)img); /* 显示部件以及窗口 */ Show_Widget(label); Show_Widget(logo); Show_Widget(window); LCUI_Main(); /* 进入主循环 */ return 0; }
int main(int argc,char*argv[]) /* 主函数,程序的入口 */ { LCUI_Widget *window, *label, *pic_box, *fore_box; /* 使用指向widget部件的指针 */ int width, height; /* 自定义默认字体文件位置 */ //Set_Default_Font("msyh.ttf"); /* 初始化LCUI */ LCUI_Init(argc, argv); /* 创建一个LCUI程序窗口 */ width = 320; /* 窗口的宽度 */ height = 240; /* 窗口的高度 */ /* 创建部件 */ window = Create_Widget("window"); label = Create_Widget("label"); pic_box = Create_Widget("picture_box"); fore_box = Create_Widget("picture_box"); Resize_Widget(fore_box, Size(190, 190)); Resize_Widget(pic_box, Size(135,135)); Resize_Widget(window, Size(width, height)); Set_Window_Title_Text(window, "头像"); LCUI_Graph pic; Graph_Init(&pic); Set_PictureBox_Size_Mode(pic_box, SIZE_MODE_STRETCH); Set_PictureBox_Image_From_File(pic_box, "image.jpg"); Set_PictureBox_Image_From_File(fore_box, "border.png"); Set_Label_Text(label, "蛋疼的头像"); Set_Label_Font(label, 16, NULL); Set_Widget_Align(pic_box, ALIGN_MIDDLE_CENTER, Pos(0, -20)); Set_Widget_Align(fore_box, ALIGN_MIDDLE_CENTER, Pos(0, -20)); Set_Widget_Align(label, ALIGN_MIDDLE_CENTER, Pos(0, +75)); Window_Client_Area_Add(window, label); Window_Client_Area_Add(window, pic_box); Window_Client_Area_Add(window, fore_box); Show_Widget(label); Show_Widget(pic_box); Show_Widget(fore_box); Show_Widget(window); return LCUI_Main(); }
static void Window_TitleBar_Init(LCUI_Widget *titlebar) /* 功能:初始化窗口标题栏 */ { LCUI_Graph img; LCUI_TitleBar *t; Graph_Init(&img); t = Widget_Create_PrivData(titlebar, sizeof(LCUI_TitleBar)); t->icon_box = Create_Widget("picture_box"); t->label = Create_Widget("label"); Widget_Container_Add(titlebar, t->icon_box); Widget_Container_Add(titlebar, t->label); Resize_Widget(t->icon_box, Size(18,18)); Set_PictureBox_Size_Mode(t->icon_box, SIZE_MODE_CENTER); Show_Widget(t->icon_box); Show_Widget(t->label); Set_Widget_Align(t->icon_box, ALIGN_MIDDLE_LEFT, Pos(0,0)); Set_Widget_Align(t->label, ALIGN_MIDDLE_LEFT, Pos(2,-2)); Load_Graph_Default_TitleBar_BG(&img); Set_Widget_Background_Image(titlebar, &img, LAYOUT_STRETCH); }
int main(int argc, char*argv[]) { LCUI_Init(argc, argv); window = Create_Widget("window"); scrollbar = Create_Widget("scrollbar"); label = Create_Widget("label"); /* 设定窗口标题的文本 */ Set_Window_Title_Text(window, "测试滚动条"); /* 改变窗口的尺寸 */ window->resize(window, Size(320, 240)); Resize_Widget( scrollbar, Size(10, 100) ); ScrollBar_Set_MaxSize( scrollbar, 400 ); /* 设置部件布局 */ Set_Widget_Align( label, ALIGN_MIDDLE_CENTER, Pos(-20,0) ); Set_Widget_Align( scrollbar, ALIGN_MIDDLE_CENTER, Pos(0,0) ); Label_Text( label, "0" ); /* 将窗口客户区作为部件的容器添加进去 */ Window_Client_Area_Add(window, label); Window_Client_Area_Add(window, scrollbar); /* 将回调函数与滚动条部件连接 */ ScrollBar_Connect( scrollbar, callback_func, NULL ); /* 显示部件 */ scrollbar->show(scrollbar); window->show(window); label->show(label); return LCUI_Main(); /* 进入主循环 */ }
static void Update_Label(LCUI_Widget *widget) /* 功能:更新label部件 */ { int mode; LCUI_Size max; LCUI_Label *label; label = Get_Widget_PrivData( widget ); if(!Graph_Valid(&widget->background_image)) { mode = GRAPH_MIX_FLAG_REPLACE; /* 替换模式 */ } else { mode = GRAPH_MIX_FLAG_OVERLAY; /* 叠加模式 */ } /* 先绘制文本位图,在绘制前它会更新位图尺寸 */ TextLayer_Draw( widget, &label->layer, mode ); /* 获取尺寸 */ max = TextLayer_Get_Size( &label->layer ); if( widget->dock == DOCK_TYPE_NONE && label->auto_size && Size_Cmp( max, widget->size ) != 0 ) { /* 如果开启了自动调整大小,并且尺寸有改变 */ Resize_Widget(widget, max ); Refresh_Widget(widget); } }
static void Exec_Update_ProgressBar(LCUI_Widget *widget) /* 功能:更新进度条的图形 */ { LCUI_ProgressBar *pb = (LCUI_ProgressBar*)Get_Widget_PrivData(widget); if(Strcmp(&widget->style, "dynamic") == 0) { /* 绘制空槽 */ Draw_Empty_Slot(&widget->graph, widget->size.w, widget->size.h); Set_Widget_Border_Style(widget, BORDER_STYLE_NONE); /* 载入两个图形 */ if(!Graph_Valid(&pb->fore_graph)) Load_Graph_ProgressBar_Fore(&pb->fore_graph); if(!Graph_Valid(&pb->flash_image)) Load_Graph_ProgressBar_Img(&pb->flash_image); Resize_Widget(pb->img_pic_box, Get_Graph_Size(&pb->flash_image)); /* 让图片盒子显示这个图形 */ Set_PictureBox_Image_From_Graph(pb->img_pic_box, &pb->flash_image); } else { Strcpy(&widget->style, "classic"); if(!Graph_Valid(&pb->fore_graph)) Graph_Create(&pb->fore_graph, 10, widget->size.h); Graph_Fill_Color(&pb->fore_graph, RGB(80,80,200)); Graph_Fill_Alpha(&pb->fore_graph, 255); } /* 让图片盒子显示这个图形 */ Set_PictureBox_Image_From_Graph(pb->fore_pic_box, &pb->fore_graph); int width, height; /* 计算进度条的长度 */ width = (widget->size.w - widget->border.left - widget->border.right) * pb->value / pb->max_value + 0.5; height = widget->size.h - widget->border.top - widget->border.bottom; Move_Widget(pb->fore_pic_box, Pos(widget->border.left, widget->border.top)); /* 改变进度条的尺寸 */ Resize_Widget(pb->fore_pic_box, Size(width, height)); }
int main(int argc, char*argv[]) /* 主函数,程序的入口 */ { LCUI_Init(argc, argv); LCUI_Widget *w1, *w2, *w3; /* 创建部件 */ w1 = Create_Widget("window"); w2 = Create_Widget("window"); w3 = Create_Widget("window"); /* 改变窗口的尺寸 */ Resize_Widget(w1, Size(320, 240)); Resize_Widget(w2, Size(200, 140)); Resize_Widget(w3, Size(120, 100)); Set_Window_Title_Text(w1, "窗口1"); Set_Window_Title_Text(w2, "窗口2"); Set_Window_Title_Text(w3, "窗口3"); Window_Client_Area_Add(w2, w3); Window_Client_Area_Add(w1, w2); Show_Widget(w1); Show_Widget(w2); Show_Widget(w3); LCUI_Main(); /* 进入主循环 */ return 0; }
static void Update_Label(LCUI_Widget *widget) /* 功能:更新label部件 */ { int mode; LCUI_Size max; LCUI_TextLayer *layer; layer = Get_Widget_PrivData( widget ); max = TextLayer_Get_Size( layer ); if( widget->auto_size && Size_Cmp( max, widget->size ) != 0 ) { /* 如果开启了自动调整大小,并且尺寸有改变 */ Resize_Widget(widget, max ); Refresh_Widget(widget); return; } if(!Graph_Valid(&widget->background_image)) { mode = GRAPH_MIX_FLAG_REPLACE; /* 替换模式 */ } else { mode = GRAPH_MIX_FLAG_OVERLAY; /* 叠加模式 */ } layer = Get_Widget_PrivData( widget ); TextLayer_Draw( widget, layer, mode ); }
void Window_Widget_Auto_Size(LCUI_Widget *win_p) /* 功能:在窗口尺寸改变时自动改变标题栏和客户区的尺寸 */ { int x, y, width, height; LCUI_Widget *titlebar; LCUI_Widget *client_area; titlebar = Get_Window_TitleBar(win_p); client_area = Get_Window_Client_Area(win_p); /* 按不同的风格来处理 */ switch(Get_Widget_Border_Style(win_p)) { case BORDER_STYLE_NONE: /* 没有边框 */ /* 先计算坐标和尺寸 */ x = win_p->border.left; y = win_p->border.top; width = win_p->size.w - x - win_p->border.right; height = win_p->size.h - y - win_p->border.bottom; Move_Widget( client_area, Pos(x, y) );/* 调整位置 */ Resize_Widget( client_area, Size(width, height) );/* 调整大小 */ Hide_Widget( titlebar );/* 隐藏标题栏 */ Show_Widget( client_area );/* 客户区需要显示 */ break; case BORDER_STYLE_LINE_BORDER: /* 线条边框 */ Move_Widget( client_area, Pos(0, 0) ); Resize_Widget( client_area, Size(win_p->size.w, win_p->size.h) ); Hide_Widget( titlebar); Show_Widget( client_area); break; case BORDER_STYLE_STANDARD: /* 标准边框 */ /* * 说明:由于用户区的尺寸和位置的调整,需要确定标题栏的尺寸,因此, * 调用Exec_Resize_Widget()函数立刻调整标题栏尺寸,如果是调用 * Resize_Widget()函数,那么,确定的尺寸会有误,因为标题栏的尺 * 寸还是以前的尺寸。 * */ Set_Widget_Border(win_p, RGB(50,50,50), Border(1,1,1,1)); /* 先计算坐标和尺寸 */ x = win_p->border.left; y = win_p->border.top; width = win_p->size.w - x - win_p->border.right; height = win_p->size.h - y - win_p->border.bottom; Move_Widget(titlebar, Pos(x, y) ); Resize_Widget(titlebar, Size(width, 25)); Set_Widget_Align(client_area, ALIGN_BOTTOM_CENTER, Pos(0, y)); Resize_Widget(client_area, Size(width, height - 23)); /* 标题栏和客户区都需要显示 */ Show_Widget(titlebar); Show_Widget(client_area); break; default: // break; } }
int main(int argc, char*argv[]) { int mode; LCUI_Widget *window, *text[2], *tb_username, *tb_password; LCUI_Widget *area, *login_btn; LCUI_Widget *fore_pb, *back_pb; LCUI_Init(argc, argv); /* 创建所需的部件 */ window = Create_Widget("window"); area = Create_Widget(NULL); tb_password = Create_Widget("text_box"); tb_username = Create_Widget("text_box"); text[0] = Create_Widget("label"); text[1] = Create_Widget("label"); fore_pb = Create_Widget("picture_box"); back_pb = Create_Widget("picture_box"); login_btn = Create_Widget("button"); /* 设置界面上显示的文本 */ Set_Window_Title_Text(window, "用户登录"); Label_Text( text[0], "帐号:" ); Label_Text( text[1], "密码:" ); Set_Button_Text( login_btn, "登录" ); /* 调整部件的尺寸 */ Resize_Widget( login_btn, Size(50, 50) ); Resize_Widget( window, Size(320, 240) ); Resize_Widget( back_pb, Size(128, 128)); Resize_Widget( fore_pb, Size(95,95)); Resize_Widget( area, Size(225,50) ); /* 设置这两个图片框内显示的图片 */ Set_PictureBox_Size_Mode( back_pb, SIZE_MODE_STRETCH ); Set_PictureBox_Size_Mode( fore_pb, SIZE_MODE_STRETCH ); Set_PictureBox_Image_From_File( back_pb, "faceback.png" ); Set_PictureBox_Image_From_File( fore_pb, "image.jpg" ); /* 限制文本框内的字符总数为32个 */ TextBox_Text_Set_MaxLength( tb_username, 32 ); TextBox_Text_Set_MaxLength( tb_password, 32 ); tb_password->resize( tb_password, Size(125, 22) ); TextBox_Text_Set_PasswordChar( tb_password, L'●' ); /* 限制文本框输入的字符 */ mode = ONLY_0_TO_9 | ONLY_A_TO_Z | ONLY_a_TO_z | ONLY_UNDERLINE; TextBox_Text_Limit( tb_username, mode ); tb_username->resize( tb_username, Size(125, 22) ); /* 将部件添加至相应的容器中 */ Widget_Container_Add( area, text[0] ); Widget_Container_Add( area, text[1] ); Widget_Container_Add( area, login_btn ); Widget_Container_Add( back_pb, fore_pb ); Widget_Container_Add( area, tb_username ); Widget_Container_Add( area, tb_password ); Window_Client_Area_Add( window, back_pb ); Window_Client_Area_Add( window, area ); /* 设置部件的布局 */ area->set_align( area, ALIGN_MIDDLE_CENTER, Pos(0,60) ); login_btn->set_align( login_btn, ALIGN_MIDDLE_RIGHT, Pos(0,0) ); back_pb->set_align( fore_pb, ALIGN_MIDDLE_CENTER, Pos(-2,-2) ); back_pb->set_align( back_pb, ALIGN_MIDDLE_CENTER, Pos(0,-35) ); text[0]->set_align( text[0], ALIGN_MIDDLE_LEFT, Pos(0,-12) ); text[1]->set_align( text[1], ALIGN_MIDDLE_LEFT, Pos(0,12) ); tb_username->set_align( tb_username, ALIGN_MIDDLE_LEFT, Pos(35,-12) ); tb_password->set_align( tb_password, ALIGN_MIDDLE_LEFT, Pos(35,12) ); /* 设置边框 */ Set_Widget_Border( fore_pb, RGB(120,120,120), Border(1,1,1,1) ); /* 显示这些部件 */ Show_Widget( back_pb ); Show_Widget( fore_pb ); Show_Widget( login_btn ); Show_Widget( area ); tb_password->show( tb_password ); tb_username->show( tb_username ); text[0]->show( text[0] ); text[1]->show( text[1] ); window->show( window ); /* 进入主循环 */ return LCUI_Main(); }
static void TextBox_Init( LCUI_Widget *widget ) /* 初始化文本框相关数据 */ { LCUI_TextBox *textbox; textbox = Widget_Create_PrivData(widget, sizeof(LCUI_TextBox)); textbox->text = Create_Widget( "label" ); textbox->cursor = Create_Widget( NULL ); textbox->scrollbar[0] = Create_Widget( "scrollbar" ); textbox->scrollbar[1] = Create_Widget( "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; Label_AutoSize( textbox->text, FALSE, 0 ); Set_Widget_Size( 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] ); /* 设置滚动条的尺寸 */ Set_Widget_Size( textbox->scrollbar[0], "10px", NULL ); Set_Widget_Size( textbox->scrollbar[1], NULL, "10px" ); Set_Widget_Align( textbox->scrollbar[0], ALIGN_TOP_RIGHT, Pos(0,0) ); Set_Widget_Align( textbox->scrollbar[1], ALIGN_BOTTOM_LEFT, Pos(0,0) ); /* 滚动条设为横向 */ ScrollBar_Set_Direction( textbox->scrollbar[1], 1 ); /* 将回调函数与滚动条连接 */ ScrollBar_Connect( textbox->scrollbar[0], TextBox_VertScroll_TextLayer, widget ); ScrollBar_Connect( textbox->scrollbar[1], TextBox_HoriScroll_TextLayer, widget ); Show_Widget( textbox->text ); Queue_Init( &textbox->text_block_buff, sizeof(LCUI_TextBlock), destroy_textblock ); TextLayer_Using_StyleTags( Label_Get_TextLayer(textbox->text), FALSE ); Set_Widget_Padding( widget, Padding(2,2,2,2) ); Set_Widget_Backcolor( textbox->cursor, RGB(0,0,0) ); Set_Widget_BG_Mode( textbox->cursor, BG_MODE_FILL_BACKCOLOR ); Resize_Widget( 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_Drag_Event_Connect( widget, TextBox_TextLayer_Click ); /* 关联 FOCUS_OUT 和 FOCUS_IN 事件 */ Widget_FocusOut_Event_Connect( widget, hide_textbox_cursor, NULL ); Widget_FocusIn_Event_Connect( widget, _put_textbox_cursor, NULL ); /* 关联按键输入事件 */ Widget_Keyboard_Event_Connect( widget, TextBox_Input ); /* 默认不启用多行文本模式 */ TextBox_Multiline( widget, FALSE ); }