📄 outuse.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <asixwin.h>
#include <asixapp.h>
#include <ppsm.h>
#include <sys\cdevice.h>
#include <asixwin\disp.h>
#include <asixwin\bitmap.h>
#include <asixwin\asix_lb.h>
#include <asixwin\asix_ed.h>
#include <asixwin\asix_sb.h>
#include <asixwin\bitmap.h>
#include "phbook.h"
#include "Phdatabs.h"
#include <database\carddb.h>
extern STATUS GetSearchID(P_S8 tmpbuf,SearchStyle style,P_U16 len,U32 *id);
extern PHONEBOOK * LoadRelationData(RelationShip relation,U16 *len);
extern STATUS LoadRecord(PHONEBOOK **showdisplist,U32 * id,U16 len);
extern STATUS DelRecord(PHONEBOOK *thisptr);
extern STATUS SaveSourceToDB(PHONEBOOK *thisptr);
extern STATUS AddRecordToDB(PHONEBOOK *thisptr);
extern STATUS CompareModAndSrc(PHONEBOOK *thisptr,P_S8 *recordinf,U8 ctel,U8 cmob,U8 cbp,P_U8 ismodfptr);
extern STATUS SaveModfToSrc(PHONEBOOK *thisptr,P_S8 * recordinf,U8 ctel,U8 cmob,U8 cbp);
extern STATUS EditDetailNote(PHONEBOOK * thisptr, AccessStyle mode ,U8 PhStyle, PHONE * num ,U8 *wintext,SaveMode savemode,U32 hGC);
extern PHONEBOOK * LoadSearchData(P_S8 string,U16 *len);
extern P_S8 PhoneBookProcess(AccessStyle accesstyle,PHONEBOOK *getitem);
extern DBLACB *cardlacb; //定义一个数据库控制块的变量
//如果返回的是NULL,表示没有数据输入,即没有选择电话
P_S8 GetCallFromPhbook()
{
P_S8 findcall = NULL;
findcall = PhoneBookProcess(ExterAccess,NULL);
return findcall;
}
STATUS SelectSavePerson(U32 hGC,SavePersonSty *personsel)
{
SavePersonSty selectp;
MSG msg;
U32 seltypewin,lbox,bt1,bt2,st;
U8 quit = 0;
P_S8 inform1 = "请选择是新建联系人或者添加号码到已有联系人:";
struct LBOX_ITEM lboxitem[] =
{
ICON_ENABLE, UNDERLINE, "新建联系人",
ICON_ENABLE, UNDERLINE, "保存至已有联系人",
ICON_END, UNDERLINE, NULL
};
seltypewin = CreateWindow(WNDCLASS_WIN,
"提示信息",
WS_OVERLAPPEDWINDOW,
0,0,
PHY_LCD_W,PHY_LCD_H,
0,
0,
NULL);
bt1 = CreateWindow( WNDCLASS_BUTTON,
"确定",
WS_CHILD|BS_REGULAR,
35,130,
30,
20,
seltypewin,
0,
NULL);
bt2 = CreateWindow( WNDCLASS_BUTTON,
"取消",
WS_CHILD|BS_REGULAR,
80,130,
30,
20,
seltypewin,
0,
NULL);
st = CreateWindow(WNDCLASS_STATIC, //提示信息
inform1,
WS_CHILD|SS_TEXT,
35,36,
100,
62,
seltypewin,
0,
NULL);
lbox = CreateWindow( WNDCLASS_LIST,
"ListBox",
WS_CHILD|LBS_POPUP,
40,86,
110,
16,
seltypewin,
0,
lboxitem);
hGC = GetGC();
EnableWindow(bt1, FALSE);
while(!quit)
{
ASIXGetMessage(&msg, NULL, 0, 0);
switch(msg.message)
{
case WM_COMMAND:
if ( msg.lparam == bt1 )
{
*personsel = selectp;
quit = 1;
} else
if( msg.lparam == bt2 )
{
*personsel = SelExitChoose;
quit = 1;
}
break;
case WM_LISTBOX:
switch(msg.wparam)
{
case 0:selectp = SelNew;
break;
case 1:selectp = SelSavedPerson;
break;
default:break;
}
EnableWindow(bt1, TRUE);
break;
case WM_QUIT:
quit = 1;
break;
}
DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam);
}
DestroyWindow( seltypewin );
}
STATUS SelectSaveType(U32 hGC,PhoneStyle * select)
{
MSG msg;
U32 seltypewin,lbox,bt1,bt2,st;
U8 quit = 0;
PhoneStyle tmpselect;
P_S8 inform1 = "请选择需要保存号码的类型:";
struct LBOX_ITEM lboxitem[] =
{
ICON_ENABLE, UNDERLINE, "固话",
ICON_ENABLE, UNDERLINE, "手机",
ICON_ENABLE, UNDERLINE, "寻呼",
ICON_END, UNDERLINE, NULL
};
seltypewin = CreateWindow(WNDCLASS_WIN,
"提示信息",
WS_OVERLAPPEDWINDOW,
0,0,
PHY_LCD_W,PHY_LCD_H,
0,
0,
NULL);
bt1 = CreateWindow( WNDCLASS_BUTTON,
"确定",
WS_CHILD|BS_REGULAR,
35,100,
30,
20,
seltypewin,
0,
NULL);
bt2 = CreateWindow( WNDCLASS_BUTTON,
"取消",
WS_CHILD|BS_REGULAR,
80,100,
30,
20,
seltypewin,
0,
NULL);
st = CreateWindow(WNDCLASS_STATIC, //提示信息
inform1,
WS_CHILD|SS_TEXT,
35,36,
100,
22,
seltypewin,
0,
NULL);
lbox = CreateWindow( WNDCLASS_LIST,
"ListBox",
WS_CHILD|LBS_POPUP,
40,66,
100,
16,
seltypewin,
0,
lboxitem);
hGC = GetGC();
EnableWindow(bt1, FALSE);
while(!quit)
{
ASIXGetMessage(&msg, NULL, 0, 0);
switch(msg.message)
{
case WM_COMMAND:
if ( msg.lparam == bt1 )
{
*select = tmpselect;
quit = 1;
} else
if( msg.lparam == bt2 )
{
*select = NoSty;
quit = 1;
}
break;
case WM_LISTBOX:
switch(msg.wparam)
{
case 0:tmpselect = TelePhone;
break;
case 1:tmpselect = Mobile;
break;
case 2:tmpselect = BP;
break;
default:break;
}
EnableWindow(bt1, TRUE);
break;
case WM_QUIT:
quit = 1;
break;
}
DefWindowProc(msg.message, msg.lparam, msg.data, msg.wparam);
}
DestroyWindow( seltypewin );
}
//要求输入的数据不为空
//如果返回的是NULL,表示保存失败
//考虑,选择保存可以有新建,和保存到已经有的人名中
//issaveok 表示保存的状态,有可能在保存过程中用户会退出保存
//issaveok = saveok表示保存成功,否则,表示保存失败
SaveSts SaveCallIntoPhbook(P_S8 callstr,U32 hGC)
{
SaveSts issaveok = SaveCancel;
PHONEBOOK newrecord;
PHONEBOOK *newptr;
U8 len;
U32 databst;
PhoneStyle select = TelePhone;
SavePersonSty personsel = SelNew;
U8 namebuf[100];
RelationShip rela = Others;
U8 savetodbst = 0;
P_S8 str1 = "输入项目已满,请重新选择!";
if(callstr == NULL)//先判断输入的数据的正确与否
{
issaveok = SaveCancel;
return ASIX_ERROR;
}
//选择保存是新建还是添加到已经有的联系人
newptr = &newrecord; //新建一个记录
memset(newptr,0x0,sizeof(PHONEBOOK));
NewRecordInf(newptr);//指针赋值到缓冲区
len = strlen(callstr)+1;
//选择添加入新的联系人OR新建联系人
SelectSavePerson(hGC,&personsel);
switch(personsel)
{
case SelNew:break;
case SelSavedPerson:
PhoneBookProcess(SearchAccess,newptr);//需要考虑如果没有选择XXXXX
break;
case SelExitChoose: //用户在选择过程中不需要保存信息
issaveok = SaveCancel;
goto goout;
break;
default:break;
}
//在上面PhoneBookProcess是建立了数据库
//选择保存的数据类型
reselect:
SelectSaveType(hGC,&select);
if(personsel ==SelNew)
{
switch(select)
{
case NoSty://在选择框中,用户点击了退出,则表示不保存了
issaveok = SaveCancel;
goto goout;
break;
case TelePhone:
memcpy(newptr->telbuf[0],callstr,len); //复制电话到缓冲区
break;
case Mobile:
memcpy(newptr->mobbuf[0],callstr,len); //复制电话到缓冲区
break;
case BP:
memcpy(newptr->bpbuf[0],callstr,len); //复制电话到缓冲区
break;
default:
break;
}
// CreateDataBase(CARD_DATA_BASE); //创建数据库
cardlacb = LinkDataBase(CARD_DATA_BASE);//连接数据库
savetodbst = EditDetailNote(newptr, InterAccess,NoSty, NULL,"新建电话本记录",SaveInNew,hGC);
databst = DetachDataBase(cardlacb);//断开数据库
}
if(personsel ==SelSavedPerson)
{
switch(select)
{
case NoSty://在选择框中,用户点击了退出,则表示不保存了
issaveok = SaveCancel;
goto goout;
break;
case TelePhone:
if(*(newptr->tel[MAXTELNUM-1])!=NULL) //如果是选择的类型已经满了
{
MessageBox(NULL, str1,"提醒", MB_OK);
goto reselect;
}
//memcpy(newptr->telbuf[0],callstr,len); //复制电话到缓冲区
if(*(newptr->tel[0]) == NULL)
{
memcpy(newptr->tel[0],callstr,len);
}else
if(*(newptr->tel[1]) == NULL)
{
memcpy(newptr->tel[1],callstr,len);
}else
if(*(newptr->tel[2]) == NULL)
{
memcpy(newptr->tel[2],callstr,len);
}else
if(*(newptr->tel[3]) == NULL)
{
memcpy(newptr->tel[3],callstr,len);
}
break;
case Mobile:
if(*(newptr->mobile[MAXMOBNUM-1])!=NULL) //如果是选择的类型已经满了
{
MessageBox(NULL, str1,"提醒", MB_OK);
goto reselect;
}
if(*(newptr->mobile[0]) == NULL)
{
memcpy(newptr->mobile[0],callstr,len);
}else
if(*(newptr->mobile[1]) == NULL)
{
memcpy(newptr->mobile[1],callstr,len);
}else
if(*(newptr->mobile[2]) == NULL)
{
memcpy(newptr->mobile[2],callstr,len);
}else
if(*(newptr->mobile[3]) == NULL)
{
memcpy(newptr->mobile[3],callstr,len);
}
break;
case BP:
if(*(newptr->bp[MAXBPNUM-1])!=NULL) //如果是选择的类型已经满了
{
MessageBox(NULL, str1,"提醒", MB_OK);
goto reselect;
}
if(*(newptr->bp[0]) == NULL)
{
memcpy(newptr->bp[0],callstr,len);
}else
if(*(newptr->bp[1]) == NULL)
{
memcpy(newptr->bp[1],callstr,len);
}
break;
default:
break;
}
//savetodbst = EditDetailNote(newptr, InterAccess,NoSty, NULL,"新建电话本记录",SaveInNew,hGC);
// CreateDataBase(CARD_DATA_BASE); //创建数据库
cardlacb = LinkDataBase(CARD_DATA_BASE);//连接数据库
AddRecordToDB(newptr,SaveInEdit);
//连接数据库//是编辑
savetodbst = 1;
databst = DetachDataBase(cardlacb);//断开数据库
}
//如果没有存入数据库,则告诉上层
if(savetodbst == 1)
{
issaveok = SaveOk;
}else{
issaveok = SaveCancel;
}
goout:
//databst = DetachDataBase(cardlacb);//断开数据库
return issaveok;
}
//返回值如果是null,表示没有找到需要的姓名
//字符串比较,可以考虑字符串的过滤XXXXXXXXX
STATUS FindNameFromPhbook(P_S8 callstr,P_S8 outname)
{
PHONEBOOK * loadlist;
PHONEBOOK *pointer;
U16 len;
U16 count;
U8 i,j;
U8 findcall = 0;
P_S8 getname = NULL;
U8 compare = 1;
U32 databst;
U8 slen=0;
if(callstr == NULL)//判断输入的数据
{
return ASIX_ERROR;
}
// CreateDataBase(CARD_DATA_BASE); //创建数据库
cardlacb = LinkDataBase(CARD_DATA_BASE);//连接数据库
loadlist = LoadRelationData(AllRelation,&len);//生成链表
databst = DetachDataBase(cardlacb);//断开数据库,只要获得数据链表,就可以断开数据库
if(len == 0)//判断是否导入的链表为空
{
return NULL;
}
pointer = loadlist;
while(pointer !=NULL)//遍历数据链表
{
for(i = 0;i<MAXTELNUM;i++)
{
compare = strcmp(callstr,pointer->tel[i]);
if(compare == 0)
{
findcall = 1;
}
}
for(i=0;i<MAXMOBNUM;i++)
{
compare = strcmp(callstr,pointer->mobile[i]);
if(compare == 0)
{
findcall = 1;
}
}
for(i=0;i<MAXBPNUM;i++)
{
compare = strcmp(callstr,pointer->bp[i]);
if(compare == 0)
{
findcall = 1;
}
}
if(findcall == 1)
{
getname = pointer->name;
if(getname == NULL)
{
return ASIX_ERROR;
}
slen = strlen(getname)+1;
memcpy(outname,getname,slen);
return ASIX_OK;
}
pointer = pointer->next;
}
return NULL; //表示没有查询到数据
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -