📄 phonebooks.c
字号:
{
item.wItemID=2001;
item.dwData=i;
item.wImage=MOBILE;
IMENUCTL_AddItemEx(pme->pHListCtl,&item);
}
break;
default:
break;
}
}
j=IMENUCTL_GetSel(pme->pHListCtl);
IMENUCTL_GetItemData(pme->pHListCtl,j,&data);
pAbF=IADDRREC_GetField(pAbr,data);
ISTATIC_SetText(pme->pStaticCtl,NULL,pAbF->pBuffer,NULL,AEE_FONT_BOLD);
RELEASE_Ctl(&pAbr);
}
return (IWindow *)pme;
}
void CListWin_Enable(IWindow * po, boolean bEnable)
{
CListWin* pme = (CListWin*)po;
pme->m_bActive=TRUE;
if(pme->pPopMenuCtl==NULL)
{
IMENUCTL_SetActive(pme->pHListCtl,bEnable);
IMENUCTL_SetActive(pme->pVListCtl,bEnable);
}
else
{
IMENUCTL_SetActive(pme->pVListCtl,FALSE);
IMENUCTL_SetActive(pme->pHListCtl,FALSE);
IMENUCTL_SetActive(pme->pPopMenuCtl,bEnable);
}
CSoftMenuCtl_SetActive(pme->pSoftMenuCtl,bEnable);
}
void CListWin_Redraw(IWindow * po)
{
CListWin* pme = (CListWin*)po;
AEERect rect;
IDISPLAY_ClearScreen(pme->m_pIDisplay);
CListWin_Enable(po,TRUE);
IMENUCTL_Redraw(pme->pHListCtl);
IMENUCTL_Redraw(pme->pVListCtl);
ISTATIC_Redraw(pme->pStaticCtl);
CSoftMenuCtl_Redraw(pme->pSoftMenuCtl);
ISTATIC_GetRect(pme->pStaticCtl,&rect);
IDISPLAY_DrawHLine(pme->m_pIDisplay,rect.x,rect.y,rect.dx);
IMENUCTL_GetRect(pme->pVListCtl,&rect);
IIMAGE_Draw(pme->pPhotoCtl,rect.x+rect.dx,rect.y+20);
if(pme->pPopMenuCtl!=NULL)
IMENUCTL_Redraw(pme->pPopMenuCtl);
}
boolean CListWin_HandleEvent(IWindow * po, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
CListWin* pme=(CListWin*)po;
uint32 data;
IAddrRec* pAbr=NULL;
int m,n,i,j;
AEEAddrField* pAbF=NULL;
if(pme->m_bActive==FALSE)
return FALSE;
IMENUCTL_HandleEvent(pme->pVListCtl,eCode,wParam,dwParam);
IMENUCTL_HandleEvent(pme->pHListCtl,eCode,wParam,dwParam);
switch(eCode)
{
case EVT_KEY:
switch(wParam)
{
case AVK_UP:
case AVK_DOWN:
if(IMENUCTL_GetItemCount(pme->pVListCtl)>0)
{
IMENUCTL_GetItemData(pme->pVListCtl,IMENUCTL_GetSel(pme->pVListCtl),&data);
pAbr=IADDRBOOK_GetRecByID(pme->m_pOwner->m_pAddrBook,data);
if(!pAbr)
return FALSE;
n=IADDRREC_GetFieldCount(pAbr);
IMENUCTL_DeleteAll(pme->pHListCtl);
for(i=0;i<n;i++)
{
CtlAddItem item;
item.pText=NULL;
item.pImage=NULL;
item.pszResText=NULL;
item.pszResImage=PHONEBOOKS_RES_FILE;
item.wText=0;
item.wFont=0;
pAbF=IADDRREC_GetField(pAbr,i);
if(pAbF==NULL)
{
RELEASE_Ctl(&pAbr);
return NULL;
}
switch(pAbF->fID)
{
case AEE_ADDRFIELD_PHONE_HOME:
if(WSTRLEN(pAbF->pBuffer)>0)
{
item.wItemID=2000;
item.dwData=i;
item.wImage=5003;
IMENUCTL_AddItemEx(pme->pHListCtl,&item);
}
break;
case AEE_ADDRFIELD_PHONE_GENERIC:
if(WSTRLEN(pAbF->pBuffer)>0)
{
item.wItemID=2001;
item.dwData=i;
item.wImage=5002;
IMENUCTL_AddItemEx(pme->pHListCtl,&item);
}
break;
default:
break;
}
}
if(IMENUCTL_GetItemCount(pme->pHListCtl)>0)
{
j=IMENUCTL_GetSel(pme->pHListCtl);
IMENUCTL_GetItemData(pme->pHListCtl,j,&data);
pAbF=IADDRREC_GetField(pAbr,data);
ISTATIC_SetText(pme->pStaticCtl,NULL,pAbF->pBuffer,NULL,AEE_FONT_BOLD);
}
RELEASE_Ctl(&pAbr);
CListWin_Redraw(po);
}
break;
case AVK_LEFT:
case AVK_RIGHT:
if(IMENUCTL_GetItemCount(pme->pHListCtl)>0)
{
IMENUCTL_GetItemData(pme->pVListCtl,IMENUCTL_GetSel(pme->pVListCtl),&data);
pAbr=IADDRBOOK_GetRecByID(pme->m_pOwner->m_pAddrBook,data);
if(!pAbr)
return FALSE;
j=IMENUCTL_GetSel(pme->pHListCtl);
IMENUCTL_GetItemData(pme->pHListCtl,j,&data);
pAbF=IADDRREC_GetField(pAbr,data);
ISTATIC_SetText(pme->pStaticCtl,NULL,pAbF->pBuffer,NULL,AEE_FONT_BOLD);
RELEASE_Ctl(&pAbr);
CListWin_Redraw(po);
}
break;
}
break;
case EVT_COMMAND:
switch(wParam)
{
//左软键
case 0:
{
if(pme->pPopMenuCtl==NULL)
{
AEERect rect;
if(ISHELL_CreateInstance(pme->m_pIShell,AEECLSID_MENUCTL,&pme->pPopMenuCtl)!=SUCCESS)
{
pme->pPopMenuCtl=NULL;
return FALSE;
}
SETAEERECT(&rect,0,pme->m_pOwner->m_cyHeight-pme->pSoftMenuCtl->m_Rect.dy-4*pme->m_pOwner->m_nNChSize,2*pme->m_pOwner->m_cxWidth/3,4*pme->m_pOwner->m_nNChSize);
IMENUCTL_SetRect(pme->pPopMenuCtl,&rect);
IMENUCTL_AddItem(pme->pPopMenuCtl,NULL,NULL,3,L"新建",NULL);
IMENUCTL_AddItem(pme->pPopMenuCtl,NULL,NULL,4,L"删除",NULL);
CSoftMenuCtl_SetSoftKey(pme->pSoftMenuCtl,NULL,L"取消",L"选择");
CListWin_Redraw(pme);
}
else
{
RELEASE_Ctl(&pme->pPopMenuCtl);
CSoftMenuCtl_SetSoftKey(pme->pSoftMenuCtl,NULL,L"选项",L"编辑");
CListWin_Redraw(pme);
}
}
return TRUE;
break;
//右软键
case 1:
if(pme->pPopMenuCtl==NULL)
{
IMENUCTL_GetItemData(pme->pVListCtl,IMENUCTL_GetSel(pme->pVListCtl),&data);
CPhoneBooks_SetWindow(pme->m_pOwner,W_FORM,data+1);
}
else
{
ISHELL_HandleEvent(pme->m_pIShell,EVT_COMMAND,IMENUCTL_GetSel(pme->pPopMenuCtl),NULL);
}
return TRUE;
break;
//新建联系人记录
case 3:
CPhoneBooks_SetWindow(pme->m_pOwner,W_FORM,NULL);
return TRUE;
break;
case 4:
{
if(IMENUCTL_GetItemCount(pme->pVListCtl)>0)
{
IMENUCTL_GetItemData(pme->pVListCtl,IMENUCTL_GetSel(pme->pVListCtl),&data);
IADDRREC_RemoveRec(IADDRBOOK_GetRecByID(pme->m_pOwner->m_pAddrBook,data));
IMENUCTL_DeleteItem(pme->pVListCtl,IMENUCTL_GetSel(pme->pVListCtl));
IMENUCTL_GetItemData(pme->pVListCtl,IMENUCTL_GetSel(pme->pVListCtl),&data);
pAbr=IADDRBOOK_GetRecByID(pme->m_pOwner->m_pAddrBook,data);
if(!pAbr)
return FALSE;
n=IADDRREC_GetFieldCount(pAbr);
IMENUCTL_DeleteAll(pme->pHListCtl);
for(i=0;i<n;i++)
{
CtlAddItem item;
item.pText=NULL;
item.pImage=NULL;
item.pszResText=NULL;
item.pszResImage=PHONEBOOKS_RES_FILE;
item.wText=0;
item.wFont=0;
pAbF=IADDRREC_GetField(pAbr,i);
if(pAbF==NULL)
{
RELEASE_Ctl(&pAbr);
return NULL;
}
switch(pAbF->fID)
{
case AEE_ADDRFIELD_PHONE_HOME:
item.wItemID=2000;
item.dwData=i;
item.wImage=5003;
IMENUCTL_AddItemEx(pme->pHListCtl,&item);
break;
case AEE_ADDRFIELD_PHONE_GENERIC:
item.wItemID=2001;
item.dwData=i;
item.wImage=5002;
IMENUCTL_AddItemEx(pme->pHListCtl,&item);
break;
default:
break;
}
}
j=IMENUCTL_GetSel(pme->pHListCtl);
IMENUCTL_GetItemData(pme->pHListCtl,j,&data);
pAbF=IADDRREC_GetField(pAbr,data);
ISTATIC_SetText(pme->pStaticCtl,NULL,pAbF->pBuffer,NULL,AEE_FONT_BOLD);
RELEASE_Ctl(&pAbr);
}
RELEASE_Ctl(&pme->pPopMenuCtl);
CSoftMenuCtl_SetSoftKey(pme->pSoftMenuCtl,NULL,L"选项",L"编辑");
CListWin_Redraw(pme);
}
return TRUE;
break;
default:
break;
}
break;
default:
break;
}
//事件链末端
if(pme->pPopMenuCtl!=NULL)
IMENUCTL_HandleEvent(pme->pPopMenuCtl,eCode,wParam,dwParam);
CSoftMenuCtl_HandleEvent(pme->pSoftMenuCtl,eCode,wParam,dwParam);
return TRUE;
}
void CListWin_Delete(IWindow * po)
{
CListWin* pme = (CListWin*)po;
CSoftMenuCtl_Release(pme->pSoftMenuCtl);
RELEASE_Ctl(&pme->pVListCtl);
RELEASE_Ctl(&pme->pHListCtl);
RELEASE_Ctl(&pme->pPopMenuCtl);
RELEASE_Ctl(&pme->pPhotoCtl);
RELEASE_Ctl(&pme->pStaticCtl);
FREE(pme);
}
IWindow* CFormWin_New(CPhoneBooks * pOwner)
{
CFormWin* pme;
VTBL(IWindow) vtbl;
AEERect rect;
//继承自CWindow的类必须如此构造
IWINDOW_SETVTBL(&vtbl, CFormWin_Enable, CFormWin_Redraw, CFormWin_HandleEvent, CFormWin_Delete);
pme = (CFormWin *)CWindow_New(sizeof(CFormWin), pOwner, &vtbl);
if (!pme)
return NULL;
//派生类私有成员构造
//软键菜单
pme->pSoftMenuCtl=CSoftMenuCtl_New(pOwner);
if(!pme->pSoftMenuCtl)
return NULL;
CSoftMenuCtl_SetBackground(pme->pSoftMenuCtl,FALSE,NULL,MAKE_RGB(0,0,255));
CSoftMenuCtl_SetSoftKey(pme->pSoftMenuCtl,0,L"取消",L"保存");
//姓名栏
pme->pNameImage=ISHELL_LoadResImage(pme->m_pIShell,PHONEBOOKS_RES_FILE,5001);
if(!pme)
return NULL;
if(ISHELL_CreateInstance(pme->m_pIShell,AEECLSID_TEXTCTL,&pme->pNameBox)!=SUCCESS)
return NULL;
SETAEERECT(&rect,20,0,50,20);
ITEXTCTL_SetRect(pme->pNameBox,&rect);
ITEXTCTL_SetProperties(pme->pNameBox,TP_FRAME);
ITEXTCTL_SetInputMode(pme->pNameBox,AEE_TM_CURRENT);
//手机号码栏
pme->pMobileImage=ISHELL_LoadResImage(pme->m_pIShell,PHONEBOOKS_RES_FILE,5002);
if(!pme)
return NULL;
if(ISHELL_CreateInstance(pme->m_pIShell,AEECLSID_TEXTCTL,&pme->pMobileBox)!=SUCCESS)
return NULL;
SETAEERECT(&rect,20,20,50,20);
ITEXTCTL_SetRect(pme->pMobileBox,&rect);
ITEXTCTL_SetProperties(pme->pMobileBox,TP_FRAME);
ITEXTCTL_SetInputMode(pme->pMobileBox,AEE_TM_NUMBERS);
//座机号码栏
pme->pPhoneImage=ISHELL_LoadResImage(pme->m_pIShell,PHONEBOOKS_RES_FILE,5003);
if(!pme)
return NULL;
if(ISHELL_CreateInstance(pme->m_pIShell,AEECLSID_TEXTCTL,&pme->pPhoneBox)!=SUCCESS)
return NULL;
SETAEERECT(&rect,20,40,50,20);
ITEXTCTL_SetRect(pme->pPhoneBox,&rect);
ITEXTCTL_SetProperties(pme->pPhoneBox,TP_FRAME);
ITEXTCTL_SetInputMode(pme->pPhoneBox,AEE_TM_NUMBERS);
//群组选择栏
pme->pGroupImage=ISHELL_LoadResImage(pme->m_pIShell,PHONEBOOKS_RES_FILE,5004);
if(!pme)
return NULL;
if(ISHELL_CreateInstance(pme->m_pIShell,AEECLSID_LISTCTL,&pme->pGroupBox)!=SUCCESS)
return NULL;
SETAEERECT(&rect,20,60,50,20);
IMENUCTL_SetRect(pme->pGroupBox,&rect);
IMENUCTL_AddItem(pme->pGroupBox,NULL,NULL,100,L"未知群组",NULL);
IMENUCTL_AddItem(pme->pGroupBox,NULL,NULL,101,L"朋友",NULL);
IMENUCTL_AddItem(pme->pGroupBox,NULL,NULL,102,L"同事",NULL);
IMENUCTL_AddItem(pme->pGroupBox,NULL,NULL,103,L"家人",NULL);
IMENUCTL_AddItem(pme->pGroupBox,NULL,NULL,104,L"同学",NULL);
pme->nActiveIndex=0;
pme->nRecID=0;
return (IWindow *)pme;
}
void CFormWin_Enable(IWindow * po, boolean bEnable)
{
CFormWin* pme = (CFormWin*)po;
pme->m_bActive=TRUE;
CSoftMenuCtl_SetActive(pme->pSoftMenuCtl,bEnable);
if(pme->pNameBox)
ITEXTCTL_SetActive(pme->pNameBox,FALSE);
if(pme->pMobileBox)
ITEXTCTL_SetActive(pme->pMobileBox,FALSE);
if(pme->pPhoneBox)
ITEXTCTL_SetActive(pme->pPhoneBox,FALSE);
if(pme->pGroupBox)
IMENUCTL_SetActive(pme->pGroupBox,FALSE);
switch(pme->nActiveIndex)
{
case 0:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -