mre下的控制項實現 三 Button實現

2021-06-08 11:46:34 字數 3613 閱讀 9695

實現button控制項,其他控制項類此寫便是了。

按鈕控制項

#ifndef __button_h__

#define __button_h__

#include "widget.h"

typedef void (*buttononclickedfunc)(void* param1, void* param2);

typedef enum _buttonstyle

buttonstyle;

/* *    函式名:button_create

*    說明:建立按鈕

*    引數說明:

*/widget* button_create(int id, rect rect, int* layer, char* text);

/* *    函式名:button_set_on_clicked_func

*    說明:設定按鈕單擊時間處理函式

*    引數說明:

*/void button_set_on_clicked_func(widget* thiz, buttononclickedfunc on_clicked, void* param1, void* param2);

/* *    函式名:button_set_font_size

*    說明:設定文字字型大小

*    引數說明:

*/void button_set_font_size(widget* thiz, font_size_t size);

/* *    函式名:button_set_style

*    說明:設定按鈕風格

*    引數說明:

*/void button_set_style(widget* thiz, buttonstyle style);

/* *    函式名:button_set_text

*    說明:設定按鈕文字

*    引數說明:

*/void button_set_text(widget* thiz, char* text);

#endif /*__button_h__*/

按鈕控制項自有的介面實現

#include "button.h"

struct _buttonextra;

typedef struct _buttonextra buttonextra;

#define button_max_text 0x20

typedef enum _buttonstate

buttonstate;

struct _buttonextra

;static int button_on_key_event(widget* thiz, int event, int keycode)

}else if(vm_key_event_up == event)

}return true;

}static int button_on_pen_event(widget* thiz, int event, int x, int y)

else if(button_pushdown == extra->state && vm_pen_event_release == event)

return true;

}static int button_on_paint(widget* thiz)

;    vmint wstr_width, wstr_height;

vmint x_pos = widget_get_x_pos_abs(thiz);

vmint y_pos = widget_get_y_pos_abs(thiz);

vmint height = widget_get_height(thiz);

vmint width = widget_get_width(thiz);

int* layer = widget_get_layer(thiz);

int layer_hd = layer[widget_get_layer_index(thiz)];

vm_graphic_color start_color;

vm_graphic_color end_color;    

vm_graphic_color color;

if(null == thiz || !widget_is_visible(thiz) || null == thiz->extra)

return false;

extra = (buttonextra*)thiz->extra;

vm_graphic_set_font(extra->fone_size);

vm_gb2312_to_ucs2(button_name, button_max_text, extra->text);

wstr_width = vm_graphic_get_string_width(button_name);

wstr_height = vm_graphic_get_string_height(button_name);

if(buttonstyle1 == extra->style)

else if(button_pushdown == extra->state)

color.vm_color_565 = vm_color_black;

vm_graphic_setcolor(&color);

vm_graphic_gradient_paint_rect(layer_hd, x_pos + 1, y_pos + 1,     x_pos + width - 2, y_pos + height - 2, start_color, end_color, vm_gdi_gp_ver);

vm_graphic_roundrect_ex(layer_hd, x_pos, y_pos, width, height, 5);

vm_graphic_textout_to_layer(layer_hd, x_pos + width/2 - wstr_width/2 - 4, y_pos + height/2 - wstr_height/2 - 3, button_name, vm_wstrlen(button_name));

}else if(buttonstyle2 == extra->style)

vm_graphic_set_font(vm_medium_font);

return true;

}static int button_on_destroy(widget* thiz)

void button_set_on_clicked_func(widget* thiz, buttononclickedfunc on_clicked, void* param1, void* param2)

void button_set_font_size(widget* thiz, font_size_t size)

void button_set_style(widget* thiz, buttonstyle style)

void button_set_text(widget* thiz, char* text)

widget* button_create(int id, rect rect, int* layer, char* text)

MySQL的ADO控制項 實現ADO控制項引用的方法

關係型資料庫系統中的表由行和列組成,這有些類似於excel二維 的樣子。由於excel並不是關係型資料庫管理系統,在使用vba對關係型資料庫進行訪問時,需要通過設定ado來訪問關係型資料庫系統。本文介紹向工程中新增ado引用的方法。1 啟動excel並建立文件,開啟visual basic編輯器,選...

c 實現的ActiveX控制項

雖然應用範圍有限,但也算是一種嘗試吧。using system.runtime.interopservices namespace actwsz classinte ce classinte cetype.autodual public class acttest iact public strin...

實現DataList控制項的分頁

實現datalist控制項的分頁 datalist控制項功能很強大,他支援選擇 編輯,實現的方法也很簡單,不過最令人頭疼的就是它不像datagrid控制項一樣內建了分頁的功能,這麼好的乙個控制項竟然不能分頁!確實是乙個很讓人頭疼的事情。不過,只是datalist沒有提供內建的分頁功能,但是並不表示,...