📄 phbook.c
字号:
ASIXGetMessage(&msg, NULL, 0, 0);
switch(msg.message)
{
case WM_COMMAND:
if ( msg.lparam == bt1 )
{
tmpbuf = GetEditorStr(edit1, NULL, 0);//需要判断是否为空,即有否输入数据
if((P_S8)(*tmpbuf) != NULL)
{
switch (style)
{
case PHONETICISE://变成模糊查询
//XXXneed added code
//根据tmpbuf和style搜索数据库
searchlst=LoadSearchData(tmpbuf,&len,PRECISE_PART_MATCH,phbooklacb);
* isfindok = TRUE;
* recordlen = len;
// return searchlst;
flag = 1;
break;
case CHINESEWORD: //变成精确查询
//XXXneed added code
//根据tmpbuf和style搜索数据库
searchlst=LoadSearchData(tmpbuf,&len,PRECISE_FULL_MATCH,phbooklacb);
* isfindok = TRUE;
* recordlen = len;
flag = 1;
//return searchlst;
break;
}
quit = 1;
* isfindok = TRUE;
}else{
msgst = MessageBox(0, string1, "提醒", MB_OK);
}
} else
if ( msg.lparam == bt2 )
{
quit = 1;
* isfindok = FALSE;
}
break;
case WM_LISTBOX:
switch(msg.wparam)
{
case 0: style = PHONETICISE;
break;
case 1: style = CHINESEWORD;
break;
default: break;
}
break;
case WM_QUIT:
quit = 1;
* isfindok = FALSE;
break;
}
DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam);
}
DestroyWindow( searchwin );
return searchlst;
}
STATUS PhBookDisplay(PHONEBOOK * displaylist, U16 len, S16 startpos, S16 endpos, U32 *bt)
// displaylist是现在需要显示的记录类,listlen是此记录的长度,
//startpos,endpos 分别是链表显示信息的起始和终止记录
//bt是显示记录button的ID,
{
U16 count;
PHONEBOOK *pointer;
U32 hGC;
hGC = GetGC();
pointer = displaylist;
GroupOn( hGC );
for(count = 0; count < DISP_NUM; count++)
{
SetWindowText(*bt, NULL, NULL);
EnableWindow(*bt,FALSE);
bt++;
}
bt -= DISP_NUM;
if(len <= 0)
{
SetWindowText(*bt, " 此记录为空", NULL);
goto outfun;
}
if(startpos != 0)
{
for(count = 0;count<startpos;count++)
{
pointer = pointer->next;
}
}
for(count = startpos; count < endpos; count++)
{
EnableWindow(*bt, TRUE);
SetWindowText(*bt, pointer->name, NULL);
pointer = pointer->next;
bt++;
}
outfun:
GroupOff( hGC, 1, 1, LCD_WIDTH-1,LCD_HEIGHT-1);
return ASIX_OK;
}
void NewRecordInf(PHONEBOOK * newptr)//将数据的指针赋上正确的值
{
U8 count;
/*
newptr->name = (P_S8)Lmalloc(MAXNAMELEN);
if(newptr->name==NULL)
{
return ASIX_ERROR;
}
memset(newptr->name,0x0,MAXNAMELEN);
newptr->relation = OTHERS;
for(count=0;count<4;count++)
{
newptr->tel[count] = (P_S8)Lmalloc(MAXTELLEN);
if(newptr->tel[count]==NULL)
{
return ASIX_ERROR;
}
memset(newptr->tel[count],0x0,MAXTELLEN);
}
for(count=0;count<4;count++)
{
newptr->mobile[count] = (P_S8)Lmalloc(MAXMOBLEN);
if(newptr->mobile[count] ==NULL)
{
return ASIX_ERROR;
}
memset(newptr->mobile[count] ,0x0,MAXMOBLEN);
}
for(count=0;count<2;count++)
{
newptr->bp[count]= (P_S8)Lmalloc(MAXBPLEN);
if(newptr->bp[count]==NULL)
{
return ASIX_ERROR;
}
memset(newptr->bp[count],0x0,MAXBPLEN);
}
*/
newptr->name = newptr->namebuf;
for(count = 0;count<MAXTELNUM;count++)
{
newptr->tel[count] = newptr->telbuf[count];
}
for(count = 0;count<MAXMOBNUM;count++)
{
newptr->mobile[count] = newptr->mobbuf[count];
}
for(count = 0;count<MAXBPNUM;count++)
{
newptr->bp[count] = newptr->bpbuf[count];
}
}
void SaveItemToNew(PHONEBOOK *target,PHONEBOOK *source)
{
//需要判断在target和source中的指针没有null的情况
U8 count;
if((source == NULL)||(target == NULL))
{
return;// ASIX_ERROR;
}
if((P_S8)(*(source->name))==NULL) //如果名字为空,则认为输入错误
{
return;// ASIX_ERROR;
}
strcpy(target->name,source->name);
for(count=0;count<MAXTELNUM;count++)
{
strcpy(target->tel[count],source->tel[count]);
}
for(count = 0;count<MAXMOBNUM;count++)
{
strcpy(target->mobile[count],source->mobile[count]);
}
for(count = 0;count<MAXBPNUM;count++)
{
strcpy(target->bp[count],target->bp[count]);
}
target->ID = source->ID;
target->relation = source->relation;
}
//考虑是拷贝还是指向
P_S8 PhoneBookProcess(ACCESSSTYLE accesstyle,PHONEBOOK *getitem)
{
MSG Msg;
U32 mainwin,newbt,delbt,searchbt,recoverybt,bt5,scroll,st,tskbar;
U32 bt[DISP_NUM];
U32 newid;
U32 hGC;
U8 quit=0;
U8 topdir=FALSE,enddir=FALSE;//标志滚动滑块在页首和页尾,用于阻止相同页面的重刷
S16 startp,endp,high,low;
CURSCRSTATE curscrstate;
DBLACB *phbooklacb; //定义一个数据库控制块的变量
PHONEBOOK *displisthead =NULL;//XXX看看程序是否会飞
PHONEBOOK *tmplist =NULL; //用于搜索的暂时存储链表的指针
PHONEBOOK *ThisPtr;
PHONEBOOK *tmpptr;
PHONEBOOK newrecord;
PHONEBOOK *newrecoredptr;
U32 lbox;
struct LBOX_ITEM lboxitem[] =
{
ICON_ENABLE, UNDERLINE, "全部",
ICON_ENABLE, UNDERLINE, "朋友",
ICON_ENABLE, UNDERLINE, "亲戚",
ICON_ENABLE, UNDERLINE, "同事",
ICON_ENABLE, UNDERLINE, "同学",
ICON_ENABLE, UNDERLINE, "其他",
ICON_END, UNDERLINE, NULL
};
RELATIONSHIP nowrelation;
U8 count;
S8 select_bt;
U8 activeflag[DISP_NUM];
U32 hmenu;
U8 isturntoedit = 0;
U8 isrefreshscr = 0;
U8 isfindok = FALSE;
U32 *LoadID=NULL; //需要考虑数组的释放
S16 RecordLen = 0; //从数据库获得的ID的长度
S8 string[50]= "确定删除联系人:";
U16 msgst;
U8 isfirstnote = 0;
U8 islastnote = 0;
U32 databst;
P_S8 returncall=NULL;
P_S8 string1 = "所存电话本记录已满!";
// U8 isinactivest = 0; //在编辑,浏览,删除态之后,使所有BT状态为UNACTIVE,并且所有返黑清除
//导入全部电话本记录
curscrstate = SHOW_ALLST;
nowrelation = AllRelation;
// CreateDataBase(); //创建数据库
phbooklacb = LinkDataBase(CARD_DATA_BASE);//连接数据库
// LoadRelationID(nowrelation,&RecordLen,&LoadID);
displisthead = LoadRelationData(nowrelation,&RecordLen,phbooklacb);
/**************用于调试加入数据***************************/
// LoadDebugData(&displisthead,&RecordLen);
/****************************************************************/
//NewRecordInf(&newrecord);//del on 0925
//newrecoredptr = &newrecord;
/* 创建主窗口 */
mainwin = CreateWindow(WNDCLASS_WIN,
"电话本",
WS_OVERLAPPEDWINDOW,
0,0,
PHY_LCD_W,PHY_LCD_H,
0,
0,
NULL);
tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);
st = CreateWindow(WNDCLASS_STATIC,
"关系:",
WS_CHILD|SS_TEXT,
LCD_WIDTH/2-LCD_WIDTH*2/5,46*LCD_HEIGHT/240+(LCD_HEIGHT>240)*8,
40,
22,
mainwin,
0,
NULL);
lbox = CreateWindow( WNDCLASS_LIST,
"ListBox",
WS_CHILD|LBS_POPUP,
LCD_WIDTH/2-LCD_WIDTH*2/5+(LCD_WIDTH*4/5-18)/10+40,46*LCD_HEIGHT/240+(LCD_HEIGHT>240)*8,
(LCD_WIDTH*4/5-18)*9/10-40,
16,
mainwin,
0,
lboxitem);
newbt = CreateWindow( WNDCLASS_BUTTON,
"\\新建",
WS_CHILD|BS_REGULAR,
LCD_WIDTH/2-LCD_HEIGHT*5/24-2,18,
LCD_HEIGHT/12,
LCD_HEIGHT/12,
mainwin,
0,
(char*)zi_new);
delbt = CreateWindow( WNDCLASS_BUTTON,
"\\删除",
WS_CHILD|BS_REGULAR,
LCD_WIDTH/2-LCD_HEIGHT/8-1,18,
LCD_HEIGHT/12,
LCD_HEIGHT/12,
mainwin,
0,
(char*)zi_delete);
searchbt = CreateWindow( WNDCLASS_BUTTON,
"\\查找 ",
WS_CHILD|BS_REGULAR,
LCD_WIDTH/2-LCD_HEIGHT/24,18,
LCD_HEIGHT/12,
LCD_HEIGHT/12,
mainwin,
0,
(char*)zi_dianhuabenchazhao);
recoverybt = CreateWindow( WNDCLASS_BUTTON,
"\\恢复",
WS_CHILD|BS_REGULAR,
LCD_WIDTH/2+LCD_HEIGHT/24+1,18,
LCD_HEIGHT/12,
LCD_HEIGHT/12,
mainwin,
0,
(char*)zi_huifu);
bt5 = CreateWindow( WNDCLASS_BUTTON,
"\\编辑",
WS_CHILD|BS_REGULAR,
LCD_WIDTH/2+LCD_HEIGHT/8+2,18,
LCD_HEIGHT/12,
LCD_HEIGHT/12,
mainwin,
0,
(char*)zi_edit);
//处理外部和内部调用
if((accesstyle == EXTER_ACCESS)||(accesstyle == SEARCH_ACCESS))
{
EnableWindow(newbt,FALSE);
EnableWindow(delbt,FALSE);
EnableWindow(bt5,FALSE);
}
// DisPListNum = AllRelationNum; //需要在屏幕上显示的列表,默认的是全部
low=0; //需要考虑是low=1 or low =0;
if(RecordLen <= DISP_NUM)
{
high = 0;
endp=RecordLen ;
}
else
{
high = RecordLen -DISP_NUM;
endp=DISP_NUM;
}
startp=0;
hmenu = MAKELONG(low, high);
scroll = CreateWindow(WNDCLASS_SCROLL,
"Scroll",
WS_CHILD|SBS_VERT,
LCD_WIDTH/2+LCD_WIDTH*2/5-16,LCD_HEIGHT*68/240+(LCD_HEIGHT>240)*16,
16,
146,
mainwin,
hmenu,
NULL);
for(count = 0; count < DISP_NUM; count++)
{
bt[count] = CreateWindow(WNDCLASS_BUTTON,
NULL,
// WS_DISABLED|WS_CHILD|BS_PEN_UP_CMD|BS_LEFT,
WS_CHILD|BS_TOOLBAR,
// WS_CHILD|BS_TOOLBAR,
LCD_WIDTH/2-LCD_WIDTH*2/5,
(U16)(count * 21 + LCD_HEIGHT*68/240+(LCD_HEIGHT>240)*16),
LCD_WIDTH*4/5-18,
21,
mainwin,
0,
NULL);
}
hGC = GetGC();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -