⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phbook.c

📁 国家ASIC工程中心使用的嵌入式操作系统
💻 C
📖 第 1 页 / 共 4 页
字号:
		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 + -