📄 phonebooks.c
字号:
if(pme->pNameBox)
ITEXTCTL_SetActive(pme->pNameBox,TRUE);
break;
case 1:
if(pme->pMobileBox)
ITEXTCTL_SetActive(pme->pMobileBox,TRUE);
break;
case 2:
if(pme->pPhoneBox)
ITEXTCTL_SetActive(pme->pPhoneBox,TRUE);
break;
case 3:
if(pme->pGroupBox)
IMENUCTL_SetActive(pme->pGroupBox,TRUE);
break;
default:
break;
}
}
void CFormWin_Redraw(IWindow * po)
{
CFormWin* pme = (CFormWin*)po;
IDISPLAY_ClearScreen(pme->m_pIDisplay);
if(pme->pNameImage)
IIMAGE_Draw(pme->pNameImage,5,3);
ITEXTCTL_Redraw(pme->pNameBox);
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD,L"名称",-1,80,3,NULL,NULL);
if(pme->pMobileImage)
IIMAGE_Draw(pme->pMobileImage,5,23);
ITEXTCTL_Redraw(pme->pMobileBox);
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD,L"手机",-1,80,23,NULL,NULL);
if(pme->pPhoneImage)
IIMAGE_Draw(pme->pPhoneImage,5,43);
ITEXTCTL_Redraw(pme->pPhoneBox);
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD,L"座机",-1,80,43,NULL,NULL);
if(pme->pGroupImage)
IIMAGE_Draw(pme->pGroupImage,5,63);
IMENUCTL_Redraw(pme->pGroupBox);
IDISPLAY_DrawText(pme->m_pIDisplay,AEE_FONT_BOLD,L"分组",-1,80,63,NULL,NULL);
CFormWin_Enable(po,TRUE);
CSoftMenuCtl_Redraw(pme->pSoftMenuCtl);
}
boolean CFormWin_HandleEvent(IWindow * po, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
CFormWin* pme=(CFormWin*)po;
if(pme->m_bActive==FALSE)
return FALSE;
switch(eCode)
{
case EVT_KEY:
if(pme->nActiveIndex!=3)
{
if(wParam==AVK_UP)
{
if(pme->nActiveIndex<=0)
{
pme->nActiveIndex=3;
}
else
{
pme->nActiveIndex--;
}
CFormWin_Redraw(po);
}
if(wParam==AVK_DOWN || wParam==AVK_SELECT)
{
if(pme->nActiveIndex>=3)
{
pme->nActiveIndex=0;
}
else
{
pme->nActiveIndex++;
}
CFormWin_Redraw(po);
}
}
else
{
if(wParam==AVK_SELECT)
{
if(pme->nActiveIndex>=3)
{
pme->nActiveIndex=0;
}
else
{
pme->nActiveIndex++;
}
CFormWin_Redraw(po);
}
}
break;
case EVT_COMMAND:
switch(wParam)
{
//左软键
case 0:
CPhoneBooks_SetWindow(pme->m_pOwner,W_LIST,NULL);
return TRUE;
break;
//右软键
case 1:
{
if(pme->nRecID==0)
{
FABFields* pAddrFields=NULL;
IAddrRec* pAbr=NULL;
AECHAR buff[10];
ITEXTCTL_GetText(pme->pNameBox,buff,10);
if(WSTRLEN(buff)>0)
{
HFAbAddField(&pAddrFields,AEEDB_FT_STRING,AEE_ADDRFIELD_NAME, \
ITEXTCTL_GetTextPtr(pme->pNameBox));
HFAbAddField(&pAddrFields,AEEDB_FT_PHONE,AEE_ADDRFIELD_PHONE_HOME, \
ITEXTCTL_GetTextPtr(pme->pPhoneBox));
HFAbAddField(&pAddrFields,AEEDB_FT_PHONE,AEE_ADDRFIELD_PHONE_GENERIC, \
ITEXTCTL_GetTextPtr(pme->pMobileBox));
pAbr=IADDRBOOK_CreateRec(pme->m_pOwner->m_pAddrBook, \
AEE_ADDR_CAT_USER_DEFINED+IMENUCTL_GetSel(pme->pGroupBox)-100, \
pAddrFields->pFields,pAddrFields->FieldCount);
}
HFAbDelField(&pAddrFields);
RELEASE_Ctl(&pAbr);
CPhoneBooks_SetWindow(pme->m_pOwner,W_LIST,NULL);
}
else
{
FABFields* pAddrFields=NULL;
IAddrRec* pAbr;
pAbr=IADDRBOOK_GetRecByID(pme->m_pOwner->m_pAddrBook,pme->nRecID-1);
if(!pAbr)
return FALSE;
HFAbUpField(pAbr,&pAddrFields,AEE_ADDRFIELD_NAME, \
ITEXTCTL_GetTextPtr(pme->pNameBox));
HFAbUpField(pAbr,&pAddrFields,AEE_ADDRFIELD_PHONE_HOME, \
ITEXTCTL_GetTextPtr(pme->pPhoneBox));
HFAbUpField(pAbr,&pAddrFields,AEE_ADDRFIELD_PHONE_GENERIC, \
ITEXTCTL_GetTextPtr(pme->pMobileBox));
IADDRREC_UpdateAllFields(pAbr,pAddrFields->pFields,pAddrFields->FieldCount);
IADDRREC_SetCategory(pAbr,AEE_ADDR_CAT_USER_DEFINED+IMENUCTL_GetSel(pme->pGroupBox)-100);
HFAbDelField(&pAddrFields);
RELEASE_Ctl(&pAbr);
CPhoneBooks_SetWindow(pme->m_pOwner,W_LIST,NULL);
}
}
return TRUE;
break;
default:
break;
}
break;
default:
break;
}
//事件链末端
ITEXTCTL_HandleEvent(pme->pNameBox,eCode,wParam,dwParam);
ITEXTCTL_HandleEvent(pme->pPhoneBox,eCode,wParam,dwParam);
ITEXTCTL_HandleEvent(pme->pMobileBox,eCode,wParam,dwParam);
IMENUCTL_HandleEvent(pme->pGroupBox,eCode,wParam,dwParam);
CSoftMenuCtl_HandleEvent(pme->pSoftMenuCtl,eCode,wParam,dwParam);
return TRUE;
}
void CFormWin_Delete(IWindow * po)
{
CFormWin* pme = (CFormWin*)po;
CSoftMenuCtl_Release(pme->pSoftMenuCtl);
RELEASE_Ctl(&pme->pGroupBox);
RELEASE_Ctl(&pme->pGroupImage);
RELEASE_Ctl(&pme->pMobileBox);
RELEASE_Ctl(&pme->pMobileImage);
RELEASE_Ctl(&pme->pNameBox);
RELEASE_Ctl(&pme->pNameImage);
RELEASE_Ctl(&pme->pPhoneBox);
RELEASE_Ctl(&pme->pPhoneImage);
FREE(pme);
}
boolean HFAbAddField(FABFields** ppAddrFields,AEEAddrFieldType eFieldType, \
AEEAddrFieldID eFieldID,void* pBuffer)
{
int len=0;
if(ppAddrFields==NULL)
return FALSE;
if((*ppAddrFields)==NULL)
{
(*ppAddrFields)=(FABFields*)MALLOC(sizeof(FABFields));
(*ppAddrFields)->pFields=(AEEAddrField*)MALLOC(sizeof(AEEAddrField));
(*ppAddrFields)->FieldCount=1;
}
else
{
(*ppAddrFields)->FieldCount++;
(*ppAddrFields)->pFields=REALLOC((*ppAddrFields)->pFields,(*ppAddrFields)->FieldCount* \
sizeof(AEEAddrField));
}
(*ppAddrFields)->pFields[(*ppAddrFields)->FieldCount-1].fType=eFieldType;
(*ppAddrFields)->pFields[(*ppAddrFields)->FieldCount-1].fID=eFieldID;
switch(eFieldType)
{
case AEEDB_FT_BYTE:
len=1;
break;
case AEEDB_FT_WORD:
len=2;
break;
case AEEDB_FT_DWORD:
len=4;
break;
case AEEDB_FT_STRING:
len=0;
break;
case AEEDB_FT_BINARY:
len=1;
break;
case AEEDB_FT_PHONE:
len=0;
break;
default:
return FALSE;
}
if(len==0)
{
len=2*(WSTRLEN(pBuffer)+1);
}
(*ppAddrFields)->pFields[(*ppAddrFields)->FieldCount-1].wDataLen=len;
(*ppAddrFields)->pFields[(*ppAddrFields)->FieldCount-1].pBuffer=(void*)MALLOC(len*sizeof(byte));
MEMCPY((*ppAddrFields)->pFields[(*ppAddrFields)->FieldCount-1].pBuffer,pBuffer,len*sizeof(byte));
return TRUE;
}
boolean HFAbUpField(IAddrRec* pAbRec,FABFields** ppAbFields, \
AEEAddrFieldID eFieldID,void* pBuffer)
{
//数据库记录更新函数
//pDbRecord 要更新的记录指针
//*ppAbFields 保存记录所有字段的容器,并且以最终结果返回
//eFieldName 要更新的字段名
//pBuffer 更新的内容
//此函数每调用一次,只更新在*ppAbFields中的一个字段,不写入数据库
//若要最终写入更新内容,需再调IDBRECORD_Update()函数,*ppAbFields中保有调用此函数所需的参数数据
uint16 len=0;
void* pbuff=NULL;
int n,i=0;
AEEAddrField* pAbField;
if(ppAbFields==NULL)
return FALSE;
if(*ppAbFields==NULL)
{
*ppAbFields=(FABFields*)MALLOC(sizeof(FABFields));
(*ppAbFields)->pFields=(AEEAddrField*)MALLOC(sizeof(AEEAddrField));
(*ppAbFields)->FieldCount=0;
n=IADDRREC_GetFieldCount(pAbRec);
for(i=0;i<n;i++)
{
pAbField=IADDRREC_GetField(pAbRec,i);
if((*ppAbFields)->FieldCount++>0)
{
(*ppAbFields)->pFields=REALLOC((*ppAbFields)->pFields,(*ppAbFields)->FieldCount* \
sizeof(AEEAddrField));
}
(*ppAbFields)->pFields[(*ppAbFields)->FieldCount-1].fType=pAbField->fType;
(*ppAbFields)->pFields[(*ppAbFields)->FieldCount-1].fID=pAbField->fID;
(*ppAbFields)->pFields[(*ppAbFields)->FieldCount-1].wDataLen=pAbField->wDataLen;
switch(pAbField->fType)
{
case AEEDB_FT_BYTE:
(*ppAbFields)->pFields[(*ppAbFields)->FieldCount-1].pBuffer=(void*)MALLOC(sizeof(byte));
MEMCPY((*ppAbFields)->pFields[(*ppAbFields)->FieldCount-1].pBuffer, \
pAbField->pBuffer,sizeof(byte));
break;
case AEEDB_FT_WORD:
(*ppAbFields)->pFields[(*ppAbFields)->FieldCount-1].pBuffer=(void*)MALLOC(sizeof(word));
MEMCPY((*ppAbFields)->pFields[(*ppAbFields)->FieldCount-1].pBuffer, \
pAbField->pBuffer,sizeof(word));
break;
case AEEDB_FT_DWORD:
(*ppAbFields)->pFields[(*ppAbFields)->FieldCount-1].pBuffer=(void*)MALLOC(sizeof(dword));
MEMCPY((*ppAbFields)->pFields[(*ppAbFields)->FieldCount-1].pBuffer, \
pAbField->pBuffer,sizeof(dword));
break;
case AEEDB_FT_STRING:
(*ppAbFields)->pFields[(*ppAbFields)->FieldCount-1].pBuffer=(void*)WSTRDUP(pAbField->pBuffer);
break;
case AEEDB_FT_BINARY:
(*ppAbFields)->pFields[(*ppAbFields)->FieldCount-1].pBuffer=(void*)MALLOC(sizeof(byte));
MEMCPY((*ppAbFields)->pFields[(*ppAbFields)->FieldCount-1].pBuffer, \
pAbField->pBuffer,sizeof(byte));
break;
case AEEDB_FT_PHONE:
(*ppAbFields)->pFields[(*ppAbFields)->FieldCount-1].pBuffer=(void*)WSTRDUP(pAbField->pBuffer);
break;
default:
return FALSE;
}
}
}
for(i=0;i<(*ppAbFields)->FieldCount;i++)
{
if((*ppAbFields)->pFields[i].fID==eFieldID)
{
if((*ppAbFields)->pFields[i].fType==AEEDB_FT_STRING || \
(*ppAbFields)->pFields[i].fType==AEEDB_FT_PHONE)
{
FREE((*ppAbFields)->pFields[i].pBuffer);
(*ppAbFields)->pFields[i].wDataLen=2*(WSTRLEN(pBuffer)+1);
(*ppAbFields)->pFields[i].pBuffer=(void*)WSTRDUP(pBuffer);
}
else
{
switch((*ppAbFields)->pFields[i].fType)
{
case AEEDB_FT_BYTE:
MEMCPY((*ppAbFields)->pFields[i].pBuffer,pBuffer,sizeof(byte));
break;
case AEEDB_FT_WORD:
MEMCPY((*ppAbFields)->pFields[i].pBuffer,pBuffer,sizeof(word));
break;
case AEEDB_FT_DWORD:
MEMCPY((*ppAbFields)->pFields[i].pBuffer,pBuffer,sizeof(dword));
break;
case AEEDB_FT_BINARY:
MEMCPY((*ppAbFields)->pFields[i].pBuffer,pBuffer,sizeof(byte));
break;
default:
return FALSE;
}
}
return TRUE;
}
}
return FALSE;
}
boolean HFAbDelField(FABFields** ppAbFields)
{
//用于释放*ppAbFields
int i=0;
if(ppAbFields!=NULL && *ppAbFields!=NULL)
{
for(i=0;i<(*ppAbFields)->FieldCount;i++)
{
FREEIF((*ppAbFields)->pFields[i].pBuffer);
}
FREEIF((*ppAbFields)->pFields);
}
FREEIF((*ppAbFields));
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -