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

📄 callcard.c

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