static void Window_TitleBar_Init(LCUI_Widget *titlebar) /* 功能:初始化窗口标题栏 */ { LCUI_Graph img; LCUI_TitleBar *t; Graph_Init(&img); t = Widget_NewPrivData(titlebar, sizeof(LCUI_TitleBar)); t->icon_box = Widget_New("picture_box"); t->label = Widget_New("label"); /* 窗口图标和标题文字不可获得焦点,并忽略鼠标点击 */ t->label->focus = FALSE; t->icon_box->focus = FALSE; Widget_SetClickableAlpha( t->label, 0, 1 ); Widget_SetClickableAlpha( t->icon_box, 0, 1 ); Widget_Container_Add(titlebar, t->icon_box); Widget_Container_Add(titlebar, t->label); Widget_Resize(t->icon_box, Size(18,18)); PictureBox_SetSizeMode(t->icon_box, SIZE_MODE_CENTER); Widget_Show(t->icon_box); Widget_Show(t->label); Widget_SetAlign(t->icon_box, ALIGN_MIDDLE_LEFT, Pos(0,0)); Widget_SetAlign(t->label, ALIGN_MIDDLE_LEFT, Pos(2,-2)); }
/* 初始化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 PictureBox_Init(LCUI_Widget *widget) /* 功能:初始化图片盒子 */ { LCUI_PictureBox *pic_box; pic_box = Widget_NewPrivData(widget, sizeof(LCUI_PictureBox));; Rect_Init(&pic_box->read_box); pic_box->image = NULL; pic_box->scale = 1.0; pic_box->size_mode = SIZE_MODE_CENTER; Graph_Init(&pic_box->buff_graph); Graph_Init(&pic_box->error_image); Graph_Init(&pic_box->initial_image); //Set_Widget_BG_Mode(widget, BG_MODE_FILL_BACKCOLOR); }
/* 初始化复选框部件的数据 */ static void CheckBox_Init(LCUI_Widget *widget) { int valid_state; LCUI_Widget *container[2]; LCUI_CheckBox *check_box; check_box = Widget_NewPrivData(widget, sizeof(LCUI_CheckBox)); check_box->on = FALSE; /* 初始化图像数据 */ Graph_Init(&check_box->img_off_disable); Graph_Init(&check_box->img_off_normal); Graph_Init(&check_box->img_off_focus); Graph_Init(&check_box->img_off_down); Graph_Init(&check_box->img_off_over); Graph_Init(&check_box->img_on_disable); Graph_Init(&check_box->img_on_normal); Graph_Init(&check_box->img_on_focus); Graph_Init(&check_box->img_on_down); Graph_Init(&check_box->img_on_over); /* 创建所需的部件 */ check_box->label = Widget_New("label"); check_box->imgbox = Widget_New("picture_box"); /* 创建两个容器,用于调整上面两个部件的位置 */ container[0] = Widget_New(NULL); container[1] = Widget_New(NULL); /* 启用这些部件的自动尺寸调整的功能 */ Widget_SetAutoSize( widget, TRUE, AUTOSIZE_MODE_GROW_AND_SHRINK ); Widget_SetAutoSize( container[0], TRUE, AUTOSIZE_MODE_GROW_AND_SHRINK ); Widget_SetAutoSize( container[1], TRUE, AUTOSIZE_MODE_GROW_AND_SHRINK ); Widget_Container_Add(container[0], check_box->imgbox); Widget_Container_Add(container[1], check_box->label); Widget_Container_Add(widget, container[0]); Widget_Container_Add(widget, container[1]); /* 调整尺寸 */ Widget_Resize(check_box->imgbox, Size(15, 15)); //Widget_Resize(container[0], Size(18,18)); //Widget_Resize(widget, Size(18,18)); /* 调整布局 */ Widget_SetAlign(container[0], ALIGN_MIDDLE_LEFT, Pos(0,0)); Widget_SetAlign(container[1], ALIGN_MIDDLE_LEFT, Pos(17,0)); Widget_SetAlign(check_box->imgbox, ALIGN_MIDDLE_CENTER, Pos(0,0)); Widget_SetAlign(check_box->label, ALIGN_MIDDLE_CENTER, Pos(0,0)); /* 设置图像框的尺寸模式为拉伸 */ PictureBox_SetSizeMode(check_box->imgbox, SIZE_MODE_STRETCH); /* 显示之 */ Widget_Show(check_box->label); Widget_Show(check_box->imgbox); Widget_Show(container[0]); Widget_Show(container[1]); /* 关联鼠标左键点击事件 */ Widget_Event_Connect( widget, EVENT_CLICKED, CheckBox_SwitchState ); /* 响应状态改变 */ valid_state = (WIDGET_STATE_NORMAL | WIDGET_STATE_ACTIVE); valid_state |= (WIDGET_STATE_DISABLE | WIDGET_STATE_OVERLAY); Widget_SetValidState( widget, valid_state ); }
/* 初始化单选框部件的数据 */ static void RadioButton_Init( LCUI_Widget widget ) { int valid_state; LCUI_Widget container[2]; LCUI_RadioButton *radio_button; radio_button = Widget_NewPrivData(widget, sizeof(LCUI_RadioButton)); radio_button->on = FALSE; /* 初始化图片数据 */ Graph_Init(&radio_button->img_off_disable); Graph_Init(&radio_button->img_off_normal); Graph_Init(&radio_button->img_off_focus); Graph_Init(&radio_button->img_off_down); Graph_Init(&radio_button->img_off_over); Graph_Init(&radio_button->img_on_disable); Graph_Init(&radio_button->img_on_normal); Graph_Init(&radio_button->img_on_focus); Graph_Init(&radio_button->img_on_down); Graph_Init(&radio_button->img_on_over); radio_button->mutex = NULL; radio_button->label = Widget_New("label");/* 创建label部件 */ radio_button->imgbox = Widget_New("picture_box"); /* 创建图像框部件 */ /* 创建两个容器,用于调整上面两个部件的位置 */ container[0] = Widget_New(NULL); container[1] = Widget_New(NULL); /* 启用这些部件的自动尺寸调整的功能 */ Widget_SetAutoSize( widget, TRUE, AUTOSIZE_MODE_GROW_AND_SHRINK ); Widget_SetAutoSize( container[0], TRUE, AUTOSIZE_MODE_GROW_AND_SHRINK ); Widget_SetAutoSize( container[1], TRUE, AUTOSIZE_MODE_GROW_AND_SHRINK ); Widget_Container_Add(container[0], radio_button->imgbox); Widget_Container_Add(container[1], radio_button->label); Widget_Container_Add(widget, container[0]); Widget_Container_Add(widget, container[1]); /* 调整尺寸 */ Widget_Resize(radio_button->imgbox, Size(15, 15)); /* 调整布局 */ Widget_SetAlign(container[0], ALIGN_MIDDLE_LEFT, Pos(0,0)); Widget_SetAlign(container[1], ALIGN_MIDDLE_LEFT, Pos(17,0)); Widget_SetAlign(radio_button->imgbox, ALIGN_MIDDLE_CENTER, Pos(0,0)); Widget_SetAlign(radio_button->label, ALIGN_MIDDLE_CENTER, Pos(0,0)); PictureBox_SetSizeMode(radio_button->imgbox, SIZE_MODE_STRETCH); /* 显示之 */ Widget_Show(radio_button->label); Widget_Show(radio_button->imgbox); Widget_Show(container[0]); Widget_Show(container[1]); Widget_ConnectEvent( widget, EVENT_CLICKED, RadioButton_Click ); valid_state = (WIDGET_STATE_NORMAL | WIDGET_STATE_ACTIVE); valid_state |= (WIDGET_STATE_DISABLE | WIDGET_STATE_OVERLAY); Widget_SetValidState( widget, valid_state); }