📄 otherdb.c
字号:
#include "email.h"
#include "emlfunc.h"
#include "emldb.h"
#include "OtherDB.h"
/***********************************************************************************************/
char *SearchEmailCard()
{
return GetEmailFromCard();// 查找电话号码
}
/***********************************************************************************************/
//从地址本获得地址
P_S8 GetEmailFromCard()
{
P_S8 findcall = NULL;
findcall = CardProcess( EMAIL_EXTER_ACCESS, 0 );
return findcall;
}
/***********************************************************************************************/
//地址本列表显示页面
P_S8 CardProcess( U8 access_mode, U8 reserved )
{
MSG Msg;
U32 pGC;
U8 quit = FALSE;
U32 mainwin; //主创口
U32 bt_add, bt_del, bt_search, bt_re, bt_edit, lbox; //功能键
U32 year_list, month_list, day_list, bt_go; //日期显示栏和当前日期提醒查询键
U32 bt_list[CARD_DISP_NUM], bt_alarm[CARD_DISP_NUM]; //标题和标志BUTTON
U32 scroll, hmenu; //滚动条
U32 tskbar;
U16 msgbox;
OTHER_SEARCH_STRU other_search_stru;
ADDR_STRU *addr_stru;
static char keystring[KEYSTRING_LEN] = {0}, type[2] = {0};
EMAIL_TIME_STRU time, conversion_time, *com_time;
ASIX_DATE date, com_date; //获得系统日期
U16 suffix_in_disp[CARD_DISP_NUM];
U8 topdir = FALSE, enddir = FALSE;//标志滚动滑块在页首和页尾,用于阻止相同页面的重刷
U8 startp, endp, low, high;
U8 select_bt = CARD_DISP_NUM;
U8 activeflag[CARD_DISP_NUM] = {UNACTIVE};//标题单击、双击
U8 display_flag = FALSE, day_flag = FALSE, history_flag = FALSE;//汇总显示标志
U8 i, count;
U16 select_no;
U8 cur_no;
DBLACB *cardlacb;
LOCALSEARCHLIST *card_list;
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
};
pGC = GetGC();
ClearScreen( pGC, WHITE);
//初始化数组
memset( (P_VOID)keystring, 0x0, KEYSTRING_LEN);
memset( suffix_in_disp, EOD, CARD_DISP_NUM*sizeof(U16) );
memset( (P_VOID)&Msg, 0x0, sizeof(MSG));
SchemeInitial();//初始化
//主窗口
mainwin=CreateWindow(WNDCLASS_WIN,"地址本",WS_OVERLAPPEDWINDOW,0,0,LCD_WIDTH-1,LCD_HEIGHT-1,0,0,NULL);
//任务栏
tskbar = CreateWindow(WNDCLASS_TSKBAR, NULL, WS_CHILD|TBS_TYPICAL, 0, 0, 0, 0,mainwin, 0, NULL);
//功能键
bt_add = CreateWindow(WNDCLASS_BUTTON, "增", WS_CHILD|BS_REGULAR, 4, 20, 20, 20, mainwin, 0, NULL); //图形未完成
bt_del = CreateWindow(WNDCLASS_BUTTON, "删", WS_CHILD|BS_REGULAR, 26, 20, 20, 20, mainwin, 0, NULL); //图形未完成
bt_search = CreateWindow( WNDCLASS_BUTTON,"查 ",WS_CHILD|BS_REGULAR,48,20,20,20,mainwin,0,NULL);
bt_re = CreateWindow(WNDCLASS_BUTTON, "恢", WS_CHILD|BS_REGULAR, 70, 20, 20, 20, mainwin, 0, NULL); //图形未完成
bt_edit = CreateWindow( WNDCLASS_BUTTON,"编辑",WS_CHILD|BS_REGULAR,92,20,20,20,mainwin,0,NULL);
lbox = CreateWindow( WNDCLASS_LIST,"ListBox",WS_CHILD|LBS_POPUP,48,46,70,16,mainwin,0,lboxitem);
SelectListBox( lbox, 0 ); //默认为全部
//处理外部和内部调用
if( ( access_mode == EMAIL_EXTER_ACCESS ) || ( access_mode == EMAIL_EXTER_NEW ) )
{
EnableWindow( bt_add, FALSE );
EnableWindow( bt_del, FALSE );
EnableWindow( bt_edit, FALSE );
}
if( access_mode == EMAIL_INTER_ACCESS )
{
EnableWindow( bt_del, FALSE );
}
cardlacb = LinkDataBase( CARD_DATA_BASE );//连接数据库
card_list = LocalFindRecord( cardlacb, CARD_NAME_FIELD, NULL, GLOBAL_SEARCH );
if( card_list == NULL )
msgbox = MessageBox( mainwin, "地址本读入失败,请退出重进!", "友情提醒", MB_OK|MB_ICONERROR );
//标题和标志按钮的初始化:
i = 70;
for( count = 0; count < CARD_DISP_NUM; count++ )
{
bt_list[count] = CreateWindow(WNDCLASS_BUTTON,NULL,WS_CHILD|BS_REGULAR,4,i,136,20,mainwin,0,NULL);
i += 21;
SetWindowText( bt_list[count], NULL, 0);
EnableWindow( bt_list[count], FALSE );
}
//设置滚动条
low = 0;
startp = 0;
if( card_list->num <= CARD_DISP_NUM )
{
high = 0;
endp = (U8)card_list->num;
}else{
high = (U8)(card_list->num - CARD_DISP_NUM);
endp = CARD_DISP_NUM;
}
hmenu = MAKELONG( low, high );
scroll = CreateWindow(WNDCLASS_SCROLL, NULL, WS_CHILD|SBS_VERT, 143,70,16,146,mainwin,hmenu,NULL);
for( i = 0; ( i < CARD_DISP_NUM ) && ( (startp+i) < card_list->num ); i++ ) //获得要显示的记录号
suffix_in_disp[i] = (U16)(startp+i);
CardDisplayList( suffix_in_disp, bt_list, 0 );
select_bt = CARD_DISP_NUM;
while(!quit)
{
ASIXGetMessage( &Msg, NULL, 0, 0);
switch ( Msg.message )
{
case WM_LISTBOX:
if( Msg.lparam == lbox )
{
switch( Msg.wparam )
{
case 0:
display_flag = TRUE;
DelOldSearchList( card_list );
card_list = LocalFindRecord( cardlacb, CARD_NAME_FIELD, NULL, GLOBAL_SEARCH );
break;
case 1:
case 2:
case 3:
case 4:
case 5:
display_flag = TRUE;
DelOldSearchList( card_list );
card_list = LocalFindRecord( cardlacb, CARD_RELATION_FIELD, (U8)(Msg.wparam + 48 - 1), PRECISE_FULL_MATCH );
break;
}
}
if( display_flag == TRUE )
{
memset( suffix_in_disp, EOD, CARD_DISP_NUM*sizeof(U16) );
for( i = 0; ( i < CARD_DISP_NUM ) && ( (startp+i) < card_list->num ); i++ ) //获得要显示的记录号
suffix_in_disp[i] = startp+i;
CardDisplayList( suffix_in_digs, bt_name, 0 );
display_flag = FALSE;
}
break;
case WM_COMMAND:
for( count = 0; count < CARD_DISP_NUM; count++ )//点击标志
{
if( Msg.lparam == bt_list[count] )
{
if( select_bt != CARD_DISP_NUM )
{
if( select_bt != count ) //清除原来反色的按钮
{
RepaintWindow( bt_list[select_bt], BS_INVERT );
RepaintWindow( bt_list[count], BS_INVERT );
activeflag[select_bt] = UNACTIVE;
}
}else
RepaintWindow( bt_list[count], BS_INVERT );
switch( activeflag[count] )
{
case UNACTIVE:
case DOUBLEACTIVE:
select_bt = count;
activeflag[count] = SINGLEACTIVE;
break;
case SINGLEACTIVE:
select_bt = count;
activeflag[count] = DOUBLEACTIVE;
select_no = suffix_in_disp[select_bt];
InvRec( pGC, 26, select_bt * 20 + 70, 114, 20 );
DisplayAddr( card_list, (U8)select_no, 0 );
display_flag = TRUE;
break;
}
break;
}
}
if( Msg.lparam == bt_add ) //添加
{
// if( CreateAddr( 0 ) != CARD_OK )
msgbox = MessageBox(mainwin, "创建提醒失败!", "友情提醒", MB_OKCANCEL|MB_ICONERROR);
DelOldSearchList( card_list );
card_list = LocalFindRecord( cardlacb, CARD_NAME_FIELD, NULL, GLOBAL_SEARCH );
display_flag = TRUE;
}
if( Msg.lparam == bt_search ) //查找
{
DelOldSearchList( card_list );
card_list = SearchCard( 0 );
display_flag = TRUE;
}
if( Msg.lparam == bt_re ) //恢复
{
DelOldSearchList( card_list );
card_list = LocalFindRecord( cardlacb, CARD_NAME_FIELD, NULL, GLOBAL_SEARCH );
display_flag = TRUE;
}
if( Msg.lparam == bt_edit ) //编辑
{
// EditAddrBk( select_no );
// DelOldSearchList( card_list );
// card_list = LocalFindRecord( cardlacb, CARD_NAME_FIELD, NULL, GLOBAL_SEARCH );
// display_flag = TRUE;
}
if( display_flag == TRUE )//汇总
{
if( select_bt != CARD_DISP_NUM )
{
activeflag[select_bt] = UNACTIVE;
RepaintWindow( bt_list[count], BS_INVERT );//清按钮的反色区
select_bt = CARD_DISP_NUM;
}
low = 0;
if( card_list->num <= CARD_DISP_NUM )
{
high = 0;
endp = (U8)card_list->num;
}else{
high = card_list->num - CARD_DISP_NUM;
endp = CARD_DISP_NUM;
}
startp = 0;
SetScrollRange( scroll, low, high );
SetScrollPos( scroll, startp, 0, 0 );
memset( suffix_in_disp, EOD, CARD_DISP_NUM*sizeof(U16) );
for( i = 0; ( i < CARD_DISP_NUM ) && ( (startp+i) < card_list->num ); i++ ) //获得要显示的记录号
suffix_in_disp[i] = startp+i;
CardDisplayList( card_list, suffix_in_digs, bt_name, 0 );
display_flag = FALSE;
}
break;
case WM_VSCROLL:
if(Msg.lparam == scroll)
{
if( startp == 0 ) topdir = TRUE;
if( endp == card_list->num ) enddir = TRUE;
switch( Msg.wparam )
{
case SB_LINEDOWN:
startp++;
endp++;
break;
case SB_LINEUP:
startp--;
endp--;
break;
case SB_PAGEDOWN:
startp += CARD_DISP_NUM;
endp += CARD_DISP_NUM;
break;
case SB_PAGEUP:
startp -= CARD_DISP_NUM;
endp -= CARD_DISP_NUM;
break;
case SB_ENDSCROLL :
startp = (U8)GetScrollPos(scroll,0,0,0);
endp = startp - CARD_DISP_NUM;
break;
default :
break;
}
low = 0;
if( card_list->num > CARD_DISP_NUM )
{
high = card_list->num - CARD_DISP_NUM;
if( (S8)(startp) < 0 ) startp = 0;
if( startp > high ) startp = high;
endp = startp + CARD_DISP_NUM;
}else{
high = 0;
startp = 0;
endp = (U8)card_list->num;
}
if(topdir==TRUE)
if( startp != 0 ) topdir = FALSE;
if( enddir == TRUE )
if( endp != card_list->num ) enddir = FALSE;
SetScrollRange( scroll, low, high );
if( ( topdir == FALSE ) && ( enddir == FALSE ) )
{
SetScrollPos( scroll, startp, 0, 0 );
if( select_bt != CARD_DISP_NUM) //移动的时候需要使原来选择的记录返黑
{
// InvRec( pGC, 26, select_bt * 20 + 70, 114, 20 );
RepaintWindow( bt_list[select_bt], BS_INVERT );
activeflag[select_bt] = UNACTIVE;
select_bt = CARD_DISP_NUM;
}
memset( suffix_in_disp, EOD, CARD_DISP_NUM*sizeof(U16) );
for( i = 0; ( i < CARD_DISP_NUM ) && ( (startp+i) < card_list->num ); i++ ) //获得要显示的记录号
suffix_in_disp[i] = startp+i;
CardDisplayList( card_list, suffix_in_digs, bt_name, 0 );
}
}
break;
case WM_QUIT:
quit = TRUE;
break;
}
DefWindowProc(Msg.message, Msg.lparam, Msg.data, Msg.wparam);
}
if( DetachDataBase( cardlacb ) != DB_OK )
msgbox = MessageBox(mainwin, "数据库断开失败!", "友情提醒", MB_OK|MB_ICONERROR);
DestroyWindow(mainwin);
}
/***********************************************************************************************/
////地址本列表显示
STATUS CardDisplayList( LOCALSEARCHLIST *list, U16 *suffix_in_digs, U32 *bt_name, U8 reserved )
{
ADDR_STRU *addr_stru;
U16 i;
i = 0;
while( ( *suffix_in_digs != EOD ) && ( i < SCHEME_DISP_NUM ) )
{
if( ( addr_stru = TransReadCard( list->head[*suffix_in_digs] , 0 ) ) == NULL )
return CARD_ERROR;
EnableWindow( *bt_name, TRUE);
SetWindowText( *bt_name++, email_stru->name, NULL);
i++;
suffix_in_digs++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -