⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phonebooks.c

📁 brew平台下用VC开发的电话本
💻 C
📖 第 1 页 / 共 3 页
字号:
		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 + -