📄 phbook.c
字号:
if(RecordLen >= DISP_NUM) //显示屏幕初始化
PhBookDisplay(displisthead,RecordLen,0, DISP_NUM, bt);
else
PhBookDisplay(displisthead,RecordLen,0, RecordLen, bt);
select_bt = DISP_NUM; //屏幕上选择记录
for(count = 0; count < DISP_NUM; count++)//显示记录的button状态赋初值
activeflag[count] = UNACTIVE;
quit = FALSE;
while(!quit)
{
ASIXGetMessage(&Msg, NULL, 0, 0);
switch(Msg.message)//XXXXX need check
{
case WM_COMMAND:
if ( Msg.lparam == newbt )//新建电话本
{
//
/*
newrecoredptr = Lmalloc(sizeof(PHONEBOOK));
if(newrecoredptr == NULL)
{
return ASIX_ERROR;
}
*/
if(RecordLen >=PHBOOK_MAXNUM)
{
msgst =MessageBox(0, string1, "提醒",MB_OK);
}else{
newrecoredptr = &newrecord;
memset(newrecoredptr,0x0,sizeof(PHONEBOOK));
NewRecordInf(newrecoredptr);
EditDetailNote(newrecoredptr, INTER_ACCESS,NOSTY, NULL,SAVE_INNEW,phbooklacb);
//新建过后需要显示数据,所以需要重新刷新所有记录
nowrelation = AllRelation;
FreePhbookList(displisthead);//释放链表,重新获得数据
displisthead = LoadRelationData(nowrelation,&RecordLen,phbooklacb);
isrefreshscr = 1;//added on 0904
}
} else
if(Msg.lparam == delbt)
{
if (select_bt != DISP_NUM) //表示是否已经选择了一个记录
{
//ThisPtr = displisthead + startp + select_bt; //选择记录的位置
// string = "确定删除联系人:";
strcat(string,ThisPtr->name);
msgst = MessageBox( mainwin, string, "提示信息", MB_OKCANCEL);
//重新复制string
strcpy(string, "确定删除联系人:" );
if( msgst == IDOK)
{
//InvRec( hGC, 4, select_bt * 21 + 68, 138, 20 );//使原来的黑框消除
DelRecord(ThisPtr,phbooklacb);
//以下是刷新屏幕,暂时先定为返回全部信息
//需要重新导入数据,刷新屏幕
FreePhbookList(displisthead);//释放链表,重新获得数据
nowrelation = AllRelation;
displisthead = LoadRelationData(nowrelation,&RecordLen,phbooklacb);
isrefreshscr = 1;
SelectListBox( lbox,SHOW_ALLST);//如果恢复所有项目显示,则改变下拉框的显示
}
}else {
msgst=MessageBox(mainwin, "请首先选择一条名片记录!", "警告",\
MB_OK|MB_ICONERROR|MB_DEFBUTTON1);
}
}else
if(Msg.lparam == searchbt) //查找模块
{
//需要先释放先前的内存XXXX
tmplist = SearchPhoneBook(&RecordLen,&isfindok,phbooklacb);
if(isfindok == 1)//如果是搜寻到,则刷新屏幕
{
isrefreshscr = 1;
FreePhbookList(displisthead);//释放链表,重新获得数据
displisthead = tmplist;
SelectListBox( lbox,SHOW_ALLST);//如果恢复所有项目显示,则改变下拉框的显示
}else{
isrefreshscr = 0;
}
}else
if(Msg.lparam == recoverybt)//恢复所有的数据列表
{
FreePhbookList(displisthead);//释放链表,重新获得数据
nowrelation = AllRelation;
curscrstate = SHOW_ALLST;
displisthead = LoadRelationData(nowrelation,&RecordLen,phbooklacb);
isrefreshscr = 1;
SelectListBox( lbox,SHOW_ALLST);//如果恢复所有项目显示,则改变下拉框的显示
}else
if(Msg.lparam == bt5)
{
if(select_bt != DISP_NUM)
{
EditDetailNote(ThisPtr,INTER_ACCESS ,NOSTY,NULL,SAVE_INEDIT,phbooklacb);
isrefreshscr = 1;//added on 0904
}else{
msgst = MessageBox(mainwin, "请首先选择一条名片记录!", "警告",\
MB_OK|MB_ICONERROR|MB_DEFBUTTON1);
}
}
for(count = 0; count < DISP_NUM; count++) //处理显示记录button,进入状态机
{
if(Msg.lparam == bt[count])
{
if(select_bt == DISP_NUM)
//InvRec( hGC, 4, count * 21 + 68, 138, 21 );//first select
// RepaintWindow( bt[count], BS_INVERT );
{}
else
if(select_bt != count)
{
// InvRec( hGC, 4, select_bt * 21 + 68, 138, 20 );//clear pre,将原来的返黑的记录返白
// InvRec( hGC, 4, count * 21 + 68, 138, 20 );
RepaintWindow( bt[select_bt], BS_INVERT );
// RepaintWindow( bt[count], BS_INVERT );
activeflag[select_bt] = UNACTIVE;
}
switch(activeflag[count])
{
case UNACTIVE:
select_bt = count;
activeflag[count] = SINGLEACTIVE;
ThisPtr = LinkJumpToPos(displisthead,(S16)(startp +select_bt));//如果记录为链表形式
//ThisPtr = LinkJumpToPos(displisthead,startp);//如果记录为链表形式
//ThisPtr = displisthead + startp + select_bt; //如果是记录为数组形式
break;
case SINGLEACTIVE:
select_bt = count;
//activeflag[count] = DOUBLEACTIVE;
activeflag[count] = UNACTIVE;
//Detail!!!
// InvRec( hGC, 4, select_bt * 21 + 68, 138, 20);//del by rsh 0904
ThisPtr = LinkJumpToPos(displisthead,(S16)(startp +select_bt));//如果记录为链表形式
//ThisPtr = displisthead + startp + select_bt; //激活记录的位置
tmpptr = ThisPtr;
do
{ //如果是上下翻动,则保持默认的选择的记录是第一行
isturntoedit = 0;
if(accesstyle == INTER_ACCESS)
{
if(ThisPtr!=NULL)
BrowseDetailNote(displisthead,INTER_ACCESS, &isturntoedit,RecordLen,ThisPtr->ID,&newid);
if(isturntoedit == 1)
{
ThisPtr =SearchThisidFrList(displisthead,newid);
}
}else
if(accesstyle == EXTER_ACCESS){
//如果是外部调用,则返回电话值
returncall = BrowseDetailNote(displisthead,EXTER_ACCESS, &isturntoedit,RecordLen,ThisPtr->ID,&newid);
if(returncall != 0) //如果返回的电话号码为空,则认为是要重新选择
quit = 1;//退出电话本记录界面
}else
if(accesstyle == SEARCH_ACCESS)//是外部电话本保存使用
{
//拷贝此记录到getitem中
SaveItemToNew(getitem,ThisPtr);
quit = 1;
}
if(accesstyle == INTER_ACCESS) //如果是外部模块调用,则不可以进入编辑
{
if (isturntoedit == 1)
{
EditDetailNote(ThisPtr,INTER_ACCESS ,NOSTY,NULL,SAVE_INEDIT,phbooklacb);
}
}
}while(isturntoedit == 1);
//XXXX把滚动条调整到合理的位置need check
isrefreshscr = 1;//modified by rsh on 0904
ThisPtr = NULL;
// isinactivest = 1;
break;
}
break;//退出查询
}
}
if(isrefreshscr == TRUE)
{
low = 0;
if(RecordLen > DISP_NUM)
{
high = RecordLen-DISP_NUM;
if((S8)(startp)<0) startp = 0;
if(startp>high) startp = high;
endp = startp+DISP_NUM;
} else
{
high = 0;
startp = 0;
endp=RecordLen;
}
SetScrollRange(scroll,low,high);
SetScrollPos(scroll, startp, 0, 0);
//if((select_bt!=DISP_NUM)&&(isinactivest != 1)) //移动的时候需要使原来选择的记录返黑
if(select_bt!=DISP_NUM) //移动的时候需要使原来选择的记录返黑
{ //在删除,浏览,编辑之后,都使原来的选定为空,并且使记录返黑清除
// InvRec( hGC, 4, select_bt * 21 + 68, 138, 20 );
activeflag[select_bt] = UNACTIVE;
select_bt = DISP_NUM;
}
PhBookDisplay(displisthead,RecordLen,startp, endp, bt);
select_bt = DISP_NUM;
isrefreshscr = 0;
}
break;
case WM_LISTBOX:
switch(Msg.wparam)
{
case 0:
nowrelation = AllRelation;
if (curscrstate != SHOW_ALLST)
{
isrefreshscr = 1;
}
curscrstate = SHOW_ALLST;
break;
case 1:
nowrelation = FRIEND;
if (curscrstate != SHOW_FRIEND)
{
isrefreshscr = 1;
}
curscrstate = SHOW_FRIEND;
break;
case 2:
nowrelation = FAMILY;
if (curscrstate != SHOW_FAMILY)
{
isrefreshscr = 1;
}
curscrstate = SHOW_FAMILY;
break;
case 3:
nowrelation = COLLEAGUE;
if (curscrstate != SHOW_COLLEAGUE)
{
isrefreshscr = 1;
}
curscrstate = SHOW_COLLEAGUE;
break;
case 4:
nowrelation = SCHMATE;
if (curscrstate != SHOW_SCHMATE)
{
isrefreshscr = 1;
}
curscrstate = SHOW_SCHMATE;
break;
case 5:
nowrelation = OTHERS;
if (curscrstate != SHOW_OTHERS)
{
isrefreshscr = 1;
}
curscrstate = SHOW_OTHERS;
break;
default: break;
}
// Showdisplisthead( displisthead, nowrelation);
if (isrefreshscr == 1)
{
// LoadRelationID(nowrelation,&RecordLen,LoadID); //获得相应的id数组
FreePhbookList(displisthead);//释放链表,重新获得数据
displisthead = LoadRelationData(nowrelation,&RecordLen,phbooklacb); //XXXX take care that the ptr maybe fly
select_bt = DISP_NUM; //屏幕上选择记录,表示没有记录选中
for(count = 0; count < DISP_NUM; count++)//显示记录的button状态赋初值
activeflag[count] = UNACTIVE;
startp=0;
low=0;//滚动条显示初始化
if(RecordLen <= DISP_NUM)
{
high = 0;
endp=RecordLen ;
}else{
high = RecordLen -DISP_NUM;
endp=DISP_NUM;
}
SetScrollRange(scroll,low,high);
SetScrollPos(scroll, startp, 0, 0);
if(select_bt!=DISP_NUM) //移动的时候需要使原来选择的记录返黑
{
InvRec( hGC, 1, select_bt * 21 + 68, 138, 20 );
activeflag[select_bt] = UNACTIVE;
select_bt = DISP_NUM;
}
PhBookDisplay(displisthead,RecordLen,startp, endp, bt); //显示屏幕初始化
// hmenu = MAKELONG(low, high);
isrefreshscr = 0;
}
break;
case WM_VSCROLL:
if(Msg.lparam == scroll)
{
if(startp == 0) topdir=TRUE;//表示第一次到starpos = 0,则需要刷新,后面,就不要
if(endp == RecordLen) enddir=TRUE;
switch(Msg.wparam)
{
case SB_LINEDOWN:
startp++;
endp++;
break;
case SB_LINEUP:
startp--;
endp--;
break;
case SB_PAGEDOWN:
startp += DISP_NUM;
endp += DISP_NUM;
break;
case SB_PAGEUP:
startp -= DISP_NUM;
endp-=DISP_NUM;
break;
case SB_ENDSCROLL :
startp = GetScrollPos(scroll,0,0,0);
endp=startp-DISP_NUM;
break;
default :
break;
}
//for(total_file_num=0;memo_file_index[total_file_num]!=INPUT_NULL;total_file_num++);
low = 0;
if(RecordLen > DISP_NUM)
{
high = RecordLen-DISP_NUM;
if((S8)(startp)<0) startp = 0;
if(startp>high) startp = high;
endp = startp+DISP_NUM;
}
else
{
high = 0;
startp = 0;
endp=RecordLen;
}
if(topdir==TRUE)
if(startp!=0) topdir=FALSE;
if(enddir==TRUE)
if(endp!=RecordLen) enddir=FALSE;
SetScrollRange(scroll,low,high);
if((topdir==FALSE)&&(enddir==FALSE))
{
SetScrollPos(scroll, startp, 0, 0);
if(select_bt!=DISP_NUM) //移动的时候需要使原来选择的记录返黑
{
//InvRec( hGC, 4, select_bt * 21 + 68, 138, 20 );
RepaintWindow( bt[select_bt], BS_INVERT );
activeflag[select_bt] = UNACTIVE;
select_bt = DISP_NUM;
}
PhBookDisplay(displisthead,RecordLen,startp, endp, bt);
}
}
break;
case WM_QUIT:
quit = 1;
returncall = NULL; //如果没有选择,则返回的是NULL,表示没有查询到数据
break;
}
DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam);
//如果修改,添加,查找结果,显示其他关系需要重新显示记录
}
DestroyWindow( mainwin );
databst = DetachDataBase(phbooklacb);//断开数据库
FreePhbookList(displisthead);
// if(accesstyle == EXTER_ACCESS) //如果是外部模块调用,则返回电话值
return returncall;
}
void MainPhoneBook(void)
{
#if 0 //用于调试外部模块//来电显示姓名
S8 incall[100] = "天生我才必";
S8 outname[100];
U8 isfind = 0;
FindNameFromPhbook(incall,outname,&isfind);
#endif
#if 0 //用于调试外部模块//保存
SaveCallIntoPhbook("天生我才必");
#endif
#if 0
char getcall[100];//查询电话本,获得电话
P_S8 callptr = NULL;
callptr = GetCallFromPhbook();
// strcpy(getcall,callptr);
#endif
PhoneBookProcess(INTER_ACCESS,NULL);
EndofTask();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -