Space C 控件升级发布 & 规范声明 [控件发布:SPWAV 1.0]
我知道有不有朋友真用SPACEC在做控件。经过考虑我想暂时发布一个控件设计的规范声明,好解决大家的控件可以互相复用。升级发布:
按钮控件 1.1:
SPBUTTON 1.1.rar
(4.81 KB)
时钟控件 1.1:
SPTIMER 1.1.rar
(3.89 KB)
菜单控件 1.1:
SPMENU 1.1.rar
(3.62 KB)
滚动条控件 1.1:
SPSLBAR 1.1.rar
(5.47 KB)
列表框控件 1.0:
SPLIST 1.0.rar
(7.63 KB)
- 2008.3.18新升级:更改各事件接口,传入对应的控件地址
按钮控件 1.2:
SPBUTTON 1.2.rar
(4.86 KB)
- 2008.3.20时钟控件 1.2:
SPTIMER 1.2.rar
(3.92 KB)
- 2008.3.20菜单控件 1.2:
SPMENU 1.2.rar
(3.65 KB)
- 2008.3.20新控件发布:对按钮和列表框的复用是亮点,控件本身代码实现很少。
ComboBox 1.0:
SPCOMBOX 1.0.rar
(9.96 KB)
- 2008.3.21控件升级:修正滚动条控件中的Change事件接口参数形式
滚动条控件 1.2:
SPSLBAR 1.2.rar
(5.52 KB)
控件发布:支持8位WAV音频文件播放,支持暂停,继续,控制播放进度等功能。Space C 1.1.0.0 及以上版本支持。
音频控件1.0:
SPWAV 1.0.rar
(2.83 KB)
- 2008.3.27其更改如下,只是加入了宏预编译,如时钟控件:
SPTIMER.h
#ifndef SP_TIMER_DEFINE_STRUCT
#define SP_TIMER_DEFINE_STRUCT
typedef void (*SPTimer_Timer)(void *);
typedef struct
{
UINT8 *Name; /* 时钟名称 */
UINT8 Enable; /* 时钟是否可操作 */
UINT32 TimeCount; /* 用于记数 */
UINT32 Interval; /* 多少次循环进行一次 */
UINT8 Mode; /* 是否为软时钟 */
SPTimer_Timer Timer; /* Timer事件函数指针 */
} SPTIMER;
void SP_CreatTimer(SPTIMER *Timer,
UINT8 *Name,
INT16 Top,
INT16 Left,
UINT16 Width,
UINT16 Height,
UINT8 Enable,
UINT32 Interval,
UINT8 Mode); /* 创建时钟模块 */
INT16 SP_UseTimer(SPTIMER *Timer,
UINT16 TabOrder,
UINT16 Keyboard); /* 时钟使用函数 */
#endif
SPTIMER.c
#ifndef SP_TIMER_DEFINE_FUN
#define SP_TIMER_DEFINE_FUN
/****************************************************************************
* 函数名: SP_CreatTimer *
* 功能 : 创建时钟控件 *
* 参数 : TimerS 时钟控件 *
* Name 开辟时钟控件名字 *
* Enable 是否可用 *
* Interval 响应间隔 *
* 返回值: 无 *
* 说明 : 无 *
****************************************************************************/
void SP_CreatTimer(SPTIMER *Timer,
UINT8 *Name,
INT16 Top,
INT16 Left,
UINT16 Width,
UINT16 Height,
UINT8 Enable,
UINT32 Interval,
UINT8 Mode)
{
/*sprintf(Timer->Name, "%s", Name); 记录时钟控件名字 */
Timer->Name = Name;
Timer->Enable = Enable; /* 记录时钟控件是否可用 */
Timer->Interval = Interval; /* 记录时钟控件响应间隔 */
Timer->TimeCount = 0; /* 记数清0 */
Timer->Mode = Mode; /* 是否为软时钟 */
Timer->Timer = NULL;
}
/****************************************************************************
* 函数名: SP_UseTimer *
* 功能 : 时钟控件使用函数 *
* 参数 : TimerS 时钟控件 *
* TabOrder Tab顺序 *
* Keyboard 键盘响应值 *
* 返回值: -1,表示无键盘响应 *
* 说明 : 无 *
****************************************************************************/
INT16 SP_UseTimer(SPTIMER *Timer,
UINT16 TabOrder,
UINT16 Keyboard)
{
if (Timer->Mode) /* 软时钟 */
{
Timer->TimeCount++;
if (Timer->TimeCount >= Timer->Interval) /* 间隔到,响应时钟 */
{
Timer->TimeCount = 0;
if (Timer->Enable) /* 若时钟开启 */
{
if (Timer->Timer != NULL)
{
Timer->Timer(Timer);
}
}
}
}
else /* 硬时钟 */
{
/* SP_TimerCount 鼠标模块的记数变量 */
if (SP_TimerCount >= Timer->TimeCount) /* 说明SP_TimerCount没有溢出 */
{
if ((SP_TimerCount-Timer->TimeCount) >= Timer->Interval)
{
Timer->TimeCount = SP_TimerCount;
if (Timer->Enable) /* 若时钟开启 */
{
if (Timer->Timer != NULL)
{
Timer->Timer(Timer);
}
}
}
}
else /* 说明SP_TimerCount溢出 */
{
if ((4294967296L-SP_TimerCount+Timer->TimeCount) >= Timer->Interval)
{
Timer->TimeCount = SP_TimerCount;
if (Timer->Enable) /* 若时钟开启 */
{
if (Timer->Timer != NULL)
{
Timer->Timer(Timer);
}
}
}
}
}
return -1;
}
#endif
注意一下红字部分,以后的控件应该加上这样的预编译宏。
补充:建议在建立事件函数时,将对应的控件结构以 void * 形式进行传递。以被扩展使用。
[[it] 本帖最后由 jig 于 2008-3-27 02:17 编辑 [/it]]