📄 callcard.c
字号:
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);
editbt = 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);
// 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();
if(RecordLen >= DISP_NUM) //显示屏幕初始化
CardDisplay(displisthead,RecordLen,0, DISP_NUM, bt);
else
CardDisplay(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)
{
case WM_COMMAND:
if ( Msg.lparam == newbt)
{
if(RecordLen >=CARD_MAXNUM)
{
MessageBox(0, string1, "提醒",MB_OK);
}else{
newrecoredptr = &newrecord;
memset(newrecoredptr,0x0,sizeof(CALLCARD));
NewCardRecordInf(newrecoredptr);
EditCardDetail(newrecoredptr, INTER_ACCESS,NOSTY, NULL,"新建名片",SAVE_INNEW);
//新建过后需要显示数据,所以需要重新刷新所有记录
nowrelation = AllRelation;
FreeCardList(displisthead);//释放链表,重新获得数据
displisthead = CardLoadRelationData(nowrelation,&RecordLen);
isrefreshscr = 1;
}
// EditCardDetail(newrecoredptr, INTER_ACCESS,NOSTY, NULL,"新建名片",SaveInNew,hGC);
// isrefreshscr = 1;
} else
if(Msg.lparam == delbt)
{
if (select_bt != DISP_NUM) //表示是否已经选择了一个记录
{
strcat(string,ThisPtr->name);
msgst = MessageBox( mainwin, string, "提示信息", MB_OKCANCEL);
//重新复制string
strcpy(string, "确定删除联系人:" );
if( msgst == IDOK)
{
CardDelRecord(ThisPtr);
//以下是刷新屏幕,暂时先定为返回全部信息
FreeCardList(displisthead);//释放链表,重新获得数据
nowrelation = AllRelation;
displisthead = CardLoadRelationData(nowrelation,&RecordLen);
isrefreshscr = 1;
SelectListBox( lbox,SHOW_ALLST);//如果恢复所有项目显示,则改变下拉框的显示
}
}else {
MessageBox(mainwin, "请首先选择一条名片记录!", "警告",\
MB_OK|MB_ICONERROR|MB_DEFBUTTON1);
}
}else
if(Msg.lparam == searchbt) //查找模块
{
tmplist = SearchCallCard(&RecordLen,&isfindok);
if(isfindok == 1)//如果是搜寻到,则刷新屏幕
{
isrefreshscr = 1;
FreeCardList(displisthead);//释放链表,重新获得数据
displisthead = tmplist;
SelectListBox( lbox,SHOW_ALLST);//如果恢复所有项目显示,则改变下拉框的显示
}else{
isrefreshscr = 0;
}
}else
if(Msg.lparam == recoverybt)
{
FreeCardList(displisthead);//释放链表,重新获得数据
nowrelation = AllRelation;
curscrstate = SHOW_ALLST;
displisthead = CardLoadRelationData(nowrelation,&RecordLen);
isrefreshscr = 1;
SelectListBox( lbox,SHOW_ALLST);//如果恢复所有项目显示,则改变下拉框的显示
}else
if(Msg.lparam == editbt)
{
if(select_bt != DISP_NUM)
{
EditCardDetail(ThisPtr,INTER_ACCESS ,NOSTY,NULL,"编辑名片",SAVE_INEDIT);
isrefreshscr = 1;
}else{
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)
{
// RepaintWindow( bt[count], BS_INVERT );
//InvRec( hGC, 4, count * 21 + 68, 138, 21 );//first select
}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 = (U8)count;
activeflag[count] = SINGLEACTIVE;
ThisPtr = CardLinkJumpToPos(displisthead,(S16)(startp + select_bt));//如果记录为链表形式
break;
case SINGLEACTIVE:
select_bt = (U8)count;
activeflag[count] = UNACTIVE;
ThisPtr = CardLinkJumpToPos(displisthead,(S16)(startp+select_bt));//如果记录为链表形式
tmpptr = ThisPtr;
do
{ //如果是上下翻动,则保持默认的选择的记录是第一行
isturntoedit = 0;
BrowseCardDetail(displisthead,INTER_ACCESS, &isturntoedit,RecordLen,ThisPtr->ID,&newid);
if(isturntoedit == 1)
{
ThisPtr =CardSearchThisidFrList(displisthead,newid);
}
if (isturntoedit == 1)
{
EditCardDetail(ThisPtr,INTER_ACCESS ,NOSTY,NULL,"编辑名片",SAVE_INEDIT);
}
}while(isturntoedit == 1);
isrefreshscr = 1;
ThisPtr = NULL;
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;
}
CardDisplay(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)
{
FreeCardList(displisthead);//释放链表,重新获得数据
displisthead = CardLoadRelationData(nowrelation,&RecordLen);
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;
}
CardDisplay(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;
}
CardDisplay(displisthead,RecordLen,startp, endp, bt);
}
}
break;
case WM_QUIT:
quit = 1;
break;
}
DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam);
//如果修改,添加,查找结果,显示其他关系需要重新显示记录
}
DestroyWindow( mainwin );
SaveDB( cardlacb );
databst = DetachDataBase(cardlacb);//断开数据库
memdbgprintf( "### FreeCardList ###" );
FreeCardList(displisthead);
memdbgprintf( "### FreeCardList OK ###" );
EndofTask();
}
void MainCard(void)
{
CardProcess();
EndofTask();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -