char CHART__InvalidateItem(CHART_Handle hObj, CHART_Obj* pObj, int Index)
{
GUI_RECT r;
int spacing;
int Xsize;
int XStart=0;
int y1=0;
CHART_Item* pItem;
// WM_GetWindowRectEx(hObj,&r);
WM_GetInsideRectEx(hObj,&r);
spacing=pObj->Xspacing ;
Xsize=pObj->ItemXsize ;
y1=r.y1 -pObj->Yspacing ;
XStart=r.x0 +pObj->Xofft;
pItem= (CHART_Item*)GUI_ARRAY_GetpItem(&pObj->ItemArray, Index);
pItem->r .x0 =XStart+Index*(Xsize+spacing);
pItem->r .x1 =pItem->r .x0+Xsize;
pItem->r .y0 =y1 -(int)pItem->Value ;
pItem->r .y1 =y1 ;
if(pItem->r .x1 >r.x1)
{
return 1;
}
else
return 0;
// WM_InvalidateWindow(hObj);
}
在这个函数最后进行判断之后返回值
void CHART_AddItem(CHART_Handle hObj, char * s,float Value,GUI_COLOR Color)
{
float Value0;
GUI_RECT r;
WM_GetInsideRectEx(hObj,&r);
if(hObj)
{
CHART_Obj * pObj = (CHART_Obj *)GUI_ALLOC_h2p(hObj);
CHART_Item Item = {0};
if (GUI_ARRAY_AddItem(&pObj->ItemArray, &Item, sizeof(CHART_Item)+strlen(s)) == 0)
{
unsigned ItemIndex = GUI_ARRAY_GetNumItems(&pObj->ItemArray) - 1;
CHART_Item* pItem= (CHART_Item*)GUI_ARRAY_GetpItem(&pObj->ItemArray, ItemIndex);
if(s)
strcpy(pItem->htext , s);
//////////////////对数据进行处理
Value0=pObj->ymin +Value*(r.y1 -pObj->Yspacing -r.y0 )/(pObj->ymax - pObj->ymin );
//////////////////
pItem->DispValue = Value;
pItem->Value =Value0;
pItem->Color =Color;
if(CHART__InvalidateItem(hObj,pObj,ItemIndex))
{
GUI_ARRAY_DeleteItem(&pObj->ItemArray, ItemIndex);
}
else
{
WM_InvalidateWindow(hObj);
}
}
}
}
在这个添加函数中对上面那个函数的返回值进行判断来确定是不是添加成功
不成功删掉 成功则重绘。
|