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

📄 phbook.c

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