Files
player/Project/Src/MyWin/Window/mywin_list.c

165 lines
3.1 KiB
C
Raw Normal View History

2025-06-27 00:32:57 +08:00
#include "mywin_inc.h"
//定义列表类型
#define WIN_LIST_TYPE "WIN_ListStruct"
//在堆中创建一个列表窗口
WIN_ListStruct *WIN_CreatList (WIN_WindowStruct *base,
void (*msgLoop)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg),
int x,int y,int x_size,int y_size)
{
//重设消息循环
if (msgLoop==0)
{
msgLoop=(void (*)(struct _WIN_WindowStruct *win,WIN_MsgStruct *msg))LIST_DefaultMsgLoop;
}
WIN_ListStruct *ret=mymalloc (sizeof ( WIN_ListStruct));
//调用父类的构造函数
if (ret)
{
mymemset (ret,0,sizeof ( WIN_ListStruct));
if (0==WIN_CreatWindowExt((WIN_WindowStruct *)ret,base,msgLoop,x,y,x_size,y_size))
{
//创建失败
myfree (ret);
ret=0;
}
else
{
((WIN_WindowStruct *)ret)->winType=WIN_LIST_TYPE;
//构造一个列表
ret->itemHeigh=WIN_GetFontHight();
ret->list_y=0;
}
}
return ret;
}
//设置列表框显示的条目
void LIST_SetItem (WIN_ListStruct *list,char **item,int itemNum)
{
if (list->button)
{
//如果已经设置过,先清除以前的
for (int i=0;i<list->itemNum;i++)
{
((WIN_WindowStruct *)(list->button[i]))->deleteWindow((WIN_WindowStruct *)(list->button[i]));
}
myfree (list->button);
}
list->item=item;
list->itemNum=itemNum;
list->button=mymalloc (sizeof (WIN_ButtonStruct *)*list->itemNum);
mymemset (list->button,0,sizeof (WIN_ButtonStruct *)*list->itemNum);
//创建每个条目按钮
for (int i=0;i<list->itemNum;i++)
{
list->button[i]= WIN_CreatButton ((WIN_WindowStruct *)list,0,0,list->list_y+i*list->itemHeigh,
((WIN_WindowStruct *)list)->x_size,list->itemHeigh);
BUTTON_SetKeyString(list->button[i],list->item[i]);
}
}
//设置每个条目的高度
void LIST_SetItemHeight (WIN_ListStruct *list,int height)
{
list->itemHeigh=height;
}
//设置列表Y轴方向的原点
void LIST_SetYOrigin (WIN_ListStruct *list,int ori)
{
list->list_y=ori;
}
//设置Y轴方向的移动距离
void LIST_SetYMove (WIN_ListStruct *list,int move)
{
list->list_y+=move;
int temp=((WIN_WindowStruct *)list)->y_size-list->itemHeigh*list->itemNum;
if (list->list_y<temp)
{
list->list_y=temp;
}
else if (list->list_y>0)
{
list->list_y=0;
}
}
//默认绘制函数
void LIST_DefaultPaint (WIN_ListStruct *list)
{
int x=0;
int y=0;
}
//默认消息处理函数
void LIST_DefaultMsgLoop (WIN_ListStruct *list,WIN_MsgStruct *msg)
{
WIN_MoveStruct *m=0;
switch (msg->msg)
{
case WIN_MSG_PAINT:
LIST_DefaultPaint(list);
break;
case WIN_MSG_INIT:
break;
case WIN_MSG_KEY:
break;
case WIN_MSG_TOUCH:
break;
case WIN_MSG_CHID:
break;
case WIN_MSG_DELETE:
break;
case WIN_MSG_MOVE:
m=msg->data.p;
switch (m->moveType)
{
case MOVE_DATA_MOVEIN:
break;
case MOVE_DATA_MOVED:
break;
case MOVE_DATA_LONG:
break;
case MOVE_DATA_MOVEOUT:
case MOVE_DATA_OUTSIDE:
break;
case MOVE_DATA_TOUCHOUT:
break;
case MOVE_DATA_TOUCHIN:
WIN_SetInvalid ((WIN_WindowStruct *)list);
break;
default:
WIN_DefaultMsgLoop((WIN_WindowStruct *)list,msg);
break;
}
break;
default:
WIN_DefaultMsgLoop((WIN_WindowStruct *)list,msg);
break;
}
}