在miniGUI中增加自定义控件

来源:互联网 发布:阿里云服务器费用100万 编辑:程序博客网 时间:2024/06/01 08:44

本文转载于:http://www.minigui.org/cgi-bin/lb5000/topic.cgi?forum=25&topic=1514

 

本人初学MiniGUI,现将在miniGUI中增加自定义控件的学习心得整理出来。目的是抛砖引玉,共同提高。
以增加一个Chart控件为例(目前我试验的此控件实际是一个复制的static控件).

一、命名规则:
1. 预定义宏
_CTRL_CHART
CTRL_CHART
CONFIG_CTRL_CHART
2. 控件名
Chart
3. 源文件名
chart.c
chart.h
4. 其它
ctrlchart
build_ctrl_chart

二、受影响的文件:
1. 与menuconfig相关的文件
configs/config.in
configs/feature.in
configure.in
acconfig.h
config.h.in (Generated from configure.in by autoheader, but I don't know why this file MUST be handled manually)
2. 与make相关的文件
src/control/Makefile.am
include/control.h
src/gui/ctrlclass.c
3. 增加源文件
src/control/chart.c
src/include/control/chart.h
4. 其它
configs/Configure.help

三、修改方法
1. configs/config.in
~ line 222
+
bool 'Chart' CONFIG_CTRL_CHART

2. configs/feature.in
~ line 150
+
CONFIG_CTRL_CHART=ctrlchart

3. configure.in
~ line 206
+
build_ctrl_chart = "yes"

~ line 653
+

AC_ARG_ENABLE(ctrlchart,
[  --enable-ctrlchartinclude CHART Control <Default=yes>],
build_ctrl_chart=$enableval)

~ line 1419
+
if test "x$build_ctrl_chart" = "xyes"; then
AC_DEFINE(_CTRL_CHART)
fi

4. acconfig.h
~ line 608
+
/* Define if include CHART Control */
#undef _CTRL_CHART

5. config.h.in
~ line 608
+
/* Define if include CHART Control */
#undef _CTRL_CHART

6. src/control/Makefile.am
~ line 5
-
COMMON_SRCS = strlmisc.c /
+
COMMON_SRCS = strlmisc.c chart.c /

7. include/control.h
~ line 187
+
/******* Chart Control ******************************************************/
#ifdef _CTRL_CHART
//... some notations needed
#define CTRL_CHART         ("chart")
//... some others needed
#endif /* _CTRL_CHART */

8. src/gui/ctrlclass.c
~ line 48
+
#ifdef _CTRL_CHART
#include "control/chart.h"
#endif

~ line 115
+
#ifdef _CTRL_CHART
if(!RegidterChartControl())
return FALSE;
#endif

~ line 192
+
#ifdef _CTRL_CHART
ChartControlCleanup();
#endif

9. configs/Configure.help
~ 533
+
Chart
CONFIG_CTRL_CHART
Chart Control is used to ...

四、编译
$ cd path_of_source_file
$ make menuconfig
$ make menuconfig (Select 'Chart', I do not know why need do twice to get the right config.h in source root)
$ make
# make install
# modify /usr/local/etc/MiniGUI.cfg if needed
$ compile your_source_file_with_chart_control

(在RH9.0, MiniGUI 1.3.3, qvfb下通过测试)

五、讨论与改进
增加自定义控件至少有三种方法:添加到control,添加到ext,使用时注册。
前面讲述的是第一种,第二种方法与第一种相差不大,只不过需要修改ext/control/initmgext.c而非第一种的src/gui/ctrlclass.c。(注意:此方法没有试验过,仅仅是猜想)。第三种方法需要单独完成Register和Cleanup,如同ctrlclass.c或initmgext.c完成的一样。(此方法没有试验过,有谁知道的话请告诉我)

前面两种方法可以实现与MiniGUI的无缝集成,用户可以通过configure,如make menuconfig裁减,但不利于独立发布。第三种方法使自定义控件可以作为独立部分发布,但风格不太好(需对每个自定义控件"显示地"写Register和Cleanup)。

对于前面描述的第一种方法(也许包括第二种),可以写一个脚本程序完成自动修改功能。在此,请大家评议一下,哪种方法更适合MiniGUI的控件开发?

原创粉丝点击