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

📄 dabiaoview.cpp

📁 串口 操作 源码 打标机的控制程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			if(pSelEntity->m_datatype==2)	
			{
				buffer.Format("%04d/%02d/%02d",
				CTime::GetCurrentTime().GetYear(),
				CTime::GetCurrentTime().GetMonth(),
				CTime::GetCurrentTime().GetDay());
				goto out;
			}
		}
		if(pSelEntity->m_type==MTEXT)
		{
		 buffer=pSelEntity->m_text;
		}
		if(pSelEntity->m_type==MNO)
		{
			CFile file;
			CFileStatus Status;
			int no;
			char startno[6];
			no = atoi(pSelEntity->m_text);
			no++;
			itoa(no,startno,10);
     			if(!file.GetStatus(_T("backup.txt"),Status))
				{
					file.Open(_T("backup.txt"),CFile::modeCreate|CFile::modeReadWrite);
				    file.Close();
					return;
				}
				file.Open(_T("backup.txt"),CFile::modeReadWrite);
    
				file.Write(startno,6);
				file.Close();
				buffer=startno;
				goto out;
			}
out:
		pSelEntity->m_text=buffer;
		pSelEntity->Draw(pDC,0);
	    g_pDoc->m_EntityList.AddTail(pSelEntity);
		pSelEntity = NULL;
		pos1= g_pDoc->m_EntityList.Find(pSel) ;
		g_pDoc->m_EntityList.RemoveAt(pos1) ;
		delete pSelEntity ;
		pSelEntity = NULL ;
	}
	   g_pDoc->UpdateAllViews(NULL) ;
	   g_pDoc->SetModifiedFlag(TRUE);
}


UINT  OrderThread(LPVOID pParam)
{		
    LPBYTE     Order,porder,sumcheck;
	ULONG      bytesnum;

 
    while (g_start==TRUE)
    {
		switch (orderflag)
		{
		case 'T':
			{
                CDC         memdc;
                CClientDC   dc((CWnd*)point);
                CRect   	clientRect;
                CBitmap     bitmap; 
                
		
			
                memdc.CreateCompatibleDC (&dc);
                SetSystemPaletteUse(memdc.GetSafeHdc (),SYSPAL_NOSTATIC);
	            bitmap.CreateCompatibleBitmap (&dc,width,height);
                CBitmap * poldbitmap=memdc.SelectObject (&bitmap);
                

			    memdc.StretchBlt(0,0,width,height,&dc,sviewx,sviewy,width,height,SRCCOPY);
                HANDLE hDIB = DDBToDIB(bitmap, 0, NULL);
	            LPVOID lpDib=::GlobalLock(hDIB);
			
                if (lpDib==NULL)
					return 0;
	            dibit.AttachMemory (lpDib,TRUE,hDIB);
                DWORD sizeimage,bitcount,dwsizeimage,rwidth;
                width=dibit.m_lpBMIH ->biWidth ;
                height=dibit.m_lpBMIH ->biHeight ;
                rwidth=WIDTHBYTES(width); 
               
        	    dibit.m_lpImage = Converbit(&dibit);
                sizeimage=height*rwidth;
                dibit.m_lpBMIH ->biSizeImage =sizeimage;
                dibit.m_lpBMIH ->biBitCount =1;
               //chen  RecorderData2(&dibit);
                bitmap.Detach ();

                xoff=0;
	            yoff=0;
	            xd=0;
	            yd=0;

	            LPBYTE endlpimage;
	            LPBYTE pdata,pgo;
  	            LPBITMAPINFOHEADER lpbmih;
                UINT  lines=0; //

                dwsizeimage=dibit.m_lpBMIH ->biSizeImage ;
                lpimage=(BYTE*)new UCHAR[dwsizeimage];
            	memcpy(lpimage,dibit.m_lpImage,dwsizeimage);
            	lpbmih=dibit.m_lpBMIH;
	            bitcount=lpbmih->biBitCount;
	            height=lpbmih->biHeight;
	            width=lpbmih->biWidth;
	            rwidth=(dwsizeimage/bitcount)/height;
            	lpimage=Conver(lpimage,dwsizeimage,width,rwidth);
               //chen  typedata(lpimage,height,rwidth);

             	endlpimage=lpimage;
	            (BYTE*)endlpimage+=dwsizeimage;

                COMMTIMEOUTS to;
                if (!(comprop.dwProvCapabilities & PCF_TOTALTIMEOUTS))
         		    AfxMessageBox("Can't set timeouts!");
                memset(&to,0,sizeof(to));
	            to.ReadTotalTimeoutConstant =100;
	            to.WriteTotalTimeoutConstant =500;
	            to.ReadIntervalTimeout =20;
            	SetCommTimeouts(CommFile,&to);
	
	            BYTE inbuff[2];
	            DWORD byteswrite,bytesread;
                UINT  linesnum=0;
                UINT  readnum;
	            while (linesnum<height)
				{
		          lines=Search(lpimage,width,rwidth,height);
				  linesnum+=lines;
	              (BYTE*)lpimage+=lines*rwidth;   
                  yoff+=lines;
                  
				 if(linesnum>=(height-1))   //如果图形下半部分没有要打的,
				    break;              //直接结束
			 
		     
		          if (lines!=0)
				  {   
                      char  gotag='M';
	        		  pgo=Go(xd,xoff,lines,yd);
				   for( readnum=0; readnum < 8; readnum++)
					{
	  
					  PurgeComm(CommFile,PURGE_RXCLEAR);
		    		  if(!WriteFile(CommFile,pgo,8,&byteswrite,NULL))
					  {
						AfxMessageBox("数据无法写出!");
						goto end;
					  }
					 
	  	              if(!ReadFile(CommFile,inbuff,2,&bytesread,NULL))
					  {
		 				AfxMessageBox("数据无法读入!");
						goto end;
					  }
		              else
					  {
			              if (bytesread)
						  {
				             if(IsOk(gotag,inbuff))
							 {
                            //chen    writetag(inbuff);
				              break;
							 }
						  }
					  } 
					  
	                 if (::WaitForSingleObject(g_eventKill, 0) == WAIT_OBJECT_0) 
					   {
                           g_send=FALSE;
			               goto end;
				  	  }
					  


					}
			     if (readnum==8)
					{
			            AfxMessageBox("数据写出超时,不能完成!");
			          goto end;
					}
			//打标机空走,并接受应答
				  }
	               
				 if(linesnum>=(height-1))   //如果图形下半部分没有要打的,
				    break;              //直接结束
			   
                   pdata=Packet(lpimage, xoff, xd,  width, rwidth,bytesnum);
                   for( readnum=0; readnum < 8; readnum++)
				   {
	    	         PurgeComm(CommFile,PURGE_RXCLEAR);
	                 if(!WriteFile(CommFile,pdata,Dist+5,&byteswrite,NULL))
					 {
				    	   AfxMessageBox("数据无法写出!");
					       goto end;
					 }
                      char   packetag='T'; 
		              if(!ReadFile(CommFile,inbuff,2,&bytesread,NULL))
					 {
		 			     AfxMessageBox("数据无法读入!");
						    goto end;
					 }
		              else
					  {
			            if (bytesread)
						{
				         if(IsOk(packetag,inbuff))
						 { 
					      //chen writetag(inbuff);
				           break;
						 }
					  }
					 } 

				}
			  if (::WaitForSingleObject(g_eventKill, 0) == WAIT_OBJECT_0) 
				{	
					g_send=FALSE;
			        goto end;
				}
				
				if(orderflag=='P')
				{
		     	 porder=(BYTE*) new char[4];
                 Order=porder;
			    *(BYTE*)porder++='P';
                *(BYTE*)porder++=0;
		    	sumcheck=Sumcheck(Order,2);
             	(BYTE*)sumcheck++;
	            *(BYTE*)porder++=*(BYTE*)sumcheck--;
                *(BYTE*)porder=*(BYTE*)sumcheck;
                bytesnum=4;
                Write(Order,bytesnum);         
               // AfxMessageBox("PAUSE!");
                while(orderflag=='P')
				{		
					Sleep(10);
				}

			if(orderflag=='F')
			{
			porder=(BYTE*) new char[4];
	        Order=porder;

			*(BYTE*)porder++='F';
            *(BYTE*)porder++=0;
			sumcheck=Sumcheck(Order,2);
           	(BYTE*)sumcheck++;
	        *(BYTE*)porder++=*(BYTE*)sumcheck--;
            *(BYTE*)porder=*(BYTE*)sumcheck;
            bytesnum=4;
	        Write(Order,bytesnum);
			}

				 if (orderflag=='J')
						   {	
					        porder=(BYTE*) new char[4];
                            Order=porder;
             			    *(BYTE*)porder++='J';
                            *(BYTE*)porder++=0;
			                sumcheck=Sumcheck(Order,2);
           	                (BYTE*)sumcheck++;
	                        *(BYTE*)porder++=*(BYTE*)sumcheck--;
                            *(BYTE*)porder=*(BYTE*)sumcheck;
                            bytesnum=4;
	                        Write(Order,bytesnum);
						   // AfxMessageBox("continue");
                            orderflag='T';
					   }
				 else
					   {
						   if (orderflag='C')
						   goto end;
					   }
				 

				}
		      if (readnum==8)
			  {
			   AfxMessageBox("数据写出超时,不能完成!");
			    goto end;
			  }

     	    linesnum++;
	    	lpimage+=rwidth;
		    yoff++;
		               if (xd==0)
					   {
			              xd=1;
					   }
		               else
					   {
		                  xd=0;
					   }
		
				}

	        porder=(BYTE*) new char[4];
	        Order=porder;

			*(BYTE*)porder++='T';
            *(BYTE*)porder++=0;
			sumcheck=Sumcheck(Order,2);
           	(BYTE*)sumcheck++;
	        *(BYTE*)porder++=*(BYTE*)sumcheck--;
            *(BYTE*)porder=*(BYTE*)sumcheck;
            bytesnum=4;
			PurgeComm(CommFile,PURGE_RXCLEAR);
            if(!WriteFile(CommFile,Order,bytesnum,&byteswrite,NULL))
			{
			    AfxMessageBox("不能发结束标志!");
					    goto end;
			}
			if (byteswrite==0)
			{
				AfxMessageBox("没有成功发送结束标志!");
				goto end;
			}
           end:

			//////////////////
			if(orderflag=='F')
			{
			porder=(BYTE*) new char[4];
	        Order=porder;

			*(BYTE*)porder++='F';
            *(BYTE*)porder++=0;
			sumcheck=Sumcheck(Order,2);
           	(BYTE*)sumcheck++;
	        *(BYTE*)porder++=*(BYTE*)sumcheck--;
            *(BYTE*)porder=*(BYTE*)sumcheck;
            bytesnum=4;
	        Write(Order,bytesnum);
			}
			///////////////
			 orderflag='W';
             g_eventKill.ResetEvent();
			 ::GlobalUnlock(lpDib);//GlobalUnlock(lpDib);
             break;

			}
		case 'F':
			{
		
			porder=(BYTE*) new char[4];
	        Order=porder;

			*(BYTE*)porder++='F';
            *(BYTE*)porder++=0;
			sumcheck=Sumcheck(Order,2);
           	(BYTE*)sumcheck++;
	        *(BYTE*)porder++=*(BYTE*)sumcheck--;
            *(BYTE*)porder=*(BYTE*)sumcheck;
            bytesnum=4;
	        Write(Order,bytesnum);
            orderflag='W';
		
			break;
			}
		case 'C':
			{
         
			porder=(BYTE*) new char[9];
            Order=porder;

			*(BYTE*)porder++='C';
            *(BYTE*)porder++=5;
			*(BYTE*)porder++=bits;
			*(BYTE*)porder++=xtd;
            *(BYTE*)porder++=xtoff;
            *(BYTE*)porder++=ytd;
            *(BYTE*)porder++=ytoff;
			sumcheck=Sumcheck(Order,7);
           	(BYTE*)sumcheck++;
	        *(BYTE*)porder++=*(BYTE*)sumcheck--;
            *(BYTE*)porder=*(BYTE*)sumcheck;
            bytesnum=9;
			Write(Order,bytesnum);
            orderflag='W';
            break;
         	}

		case 'S':
			{
		
			porder=(BYTE*) new char[6];
	        Order=porder;	

			*(BYTE*)porder++='S';
            *(BYTE*)porder++=2;
			*(BYTE*)porder++=Dist;
			*(BYTE*)porder++=speed;
			sumcheck=Sumcheck(Order,4);
           	(BYTE*)sumcheck++;
	        *(BYTE*)porder++=*(BYTE*)sumcheck--;
            *(BYTE*)porder=*(BYTE*)sumcheck;
            bytesnum=6;
	        Write(Order,bytesnum);
            orderflag='W';
			//-------------
			brush=TRUE;
			viewwidth=viewscale*Dist*hdnum;
	        viewhigh=viewscale*height;
			//-------------
            break;

			}
		case 'J':
			{
        
			porder=(BYTE*) new char[4];
            Order=porder;
			*(BYTE*)porder++='J';
            *(BYTE*)porder++=0;
			sumcheck=Sumcheck(Order,2);
           	(BYTE*)sumcheck++;
	        *(BYTE*)porder++=*(BYTE*)sumcheck--;
            *(BYTE*)porder=*(BYTE*)sumcheck;
            bytesnum=4;
	        Write(Order,bytesnum);
            orderflag='W';
			break;
			}
			
		case 'L':
			{	
			porder=(BYTE*) new char[4];
            Order=porder;
			*(BYTE*)porder++='L';
	        *(BYTE*)porder++=0;
			sumcheck=Sumcheck(Order,2);
           	(BYTE*)sumcheck++;
	        *(BYTE*)porder++=*(BYTE*)sumcheck--;
            *(BYTE*)porder=*(BYTE*)sumcheck;
            bytesnum=4;
        	Write(Order,bytesnum);
            orderflag='W';
			break;
			}
	case 'P':
			{	
         
			porder=(BYTE*) new char[4];
            Order=porder;

			*(BYTE*)porder++='P';
            *(BYTE*)porder++=0;
			sumcheck=Sumcheck(Order,2);
           	(BYTE*)sumcheck++;
	        *(BYTE*)porder++=*(BYTE*)sumcheck--;
            *(BYTE*)porder=*(BYTE*)sumcheck;
            bytesnum=4;
	        Write(Order,bytesnum);
            orderflag='W';
            break;
			}
	case 'A':
		{

			porder=(BYTE*) new char[4];
            Order=porder;

			*(BYTE*)porder++='A';
            *(BYTE*)porder++=0;
			sumcheck=Sumcheck(Order,2);
           	(BYTE*)sumcheck++;
	        *(BYTE*)porder++=*(BYTE*)sumcheck--;
            *(BYTE*)porder=*(BYTE*)sumcheck;
            bytesnum=4;
	        Write(Order,bytesnum);
            orderflag='W';
            break;
		}
		case 'W':
			{
                 BYTE  inbuff;
	             ULONG bytesread=0;
                 COMMTIMEOUTS to3;
                 if (!(comprop.dwProvCapabilities & PCF_TOTALTIMEOUTS))
	             AfxMessageBox("Can't set timeouts!");
                 memset(&to3,0,sizeof(to3));
               	 to3.ReadTotalTimeoutConstant =30;
                 to3.ReadIntervalTimeout =20;
             	 SetCommTimeouts(CommFile,&to3);
                 while(orderflag=='W')
				 {
					 if (orderflag!='W')
						 AfxMessageBox(" not w");
                     if(!ReadFile(CommFile,&inbuff,1,&bytesread,NULL))
					 {
		  	            AfxMessageBox("Error Read!");
						 
					 }
          
		           if (bytesread)
				   {
			         if (inbuff==0x01)
					 {
	 //-----------------------调整打印内容
					 {
							CText* pSelEntity = NULL ;
							CText* pSel =NULL;
							POSITION pos1 = NULL ;
							CDC*	pDC = g_pView->GetDC(); 
							int count=g_pDoc->m_EntityList.GetCount();
							POSITION	pos = g_pDoc->m_EntityList.GetHeadPosition();
							for(int i=0;i<count;i++)
								{
									pSelEntity = pSel = (CText*)g_pDoc->m_EntityList.GetNext(pos);
									CString	buffer;
									if(pSelEntity->m_type==MTIME)
										{

									
												buffer.Format("%02d:%02d",
												CTime::GetCurrentTime().GetHour(),
												CTime::GetCurrentTime().GetMinute());

										}
								   if(pSelEntity->m_type==MDATA)
										{
												if(pSelEntity->m_datatype==0)
												{
													buffer.Format("%04d_%02d_%02d",
													CTime::GetCurrentTime().GetYear(),
													CTime::GetCurrentTime().GetMonth(),
													CTime::GetCurrentTime().GetDay());
												}
												if(pSelEntity->m_datatype==1)          
												{
													buffer.Format("%04d.%02d.%02d",
													CTime::GetCurrentTime().GetYear(),
													CTime::GetCurrentTime().GetMonth(),
													CTime::GetCurrentTime().GetDay());
												}
												if(pSelEntity->m_datatype==2)	
												{
													buffer.Format("%04d/%02d/%02d",

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -