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

📄 dabiaoview.cpp

📁 串口 操作 源码 打标机的控制程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// dabiaoView.cpp : implementation of the CDabiaoView class
//

#include "stdafx.h"
#include "dabiao.h"

#include "dabiaoDoc.h"
#include "dabiaoView.h"
#include "Picture.h"
#include "Cdib.h"
#include "SetComm.h"
#include "Test.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//引用的头文件
#include "EnterText.h"
#include "Text.h"
#include "Setview.h"
#include "Afxmt.h"
#include "Setting.h"
 //----------------------------------------------------------
#define MEMORY_MAPPED_FILES
#define WM_THREADFINISHED		WM_USER + 5
#define WM_WTHREADFINISHED      WM_USER + 6
#define WIDTHBYTES(bits)    (((bits) + 31) / 32 * 4)  
//全局变量
int datetype;
BOOL brush=FALSE;

CEvent g_eventKill;
int viewscale,g_nRefresh;
int viewx,viewy,viewwidth,viewhigh;
CDabiaoView*	g_pView = NULL;
CDabiaoDoc* 	g_pDoc = NULL;
BOOL   g_modify=FALSE;
int picx0,picy0,picx1,picy1;
CDib  pdib,dibit,cdib,filedib;
CSize  size,sizeFileDib,sizeFileDib0;
int times;
BOOL g_start=FALSE,
     g_open=FALSE,
	 g_pause=FALSE,
	 g_type=FALSE,
	 g_cancel=FALSE,
	 g_send=FALSE;

UINT  hdnum,Dist;
UINT  height,width;
BYTE  xoff,yoff,xd,yd; //off偏移量,d方向
UINT  speed;
BYTE  testorder;
BYTE  xtd,xtoff,ytd,ytoff;
CString  comname;
int  bits;

char  orderflag;
LPVOID    point;

HANDLE CommFile;
DCB CommDCB;
COMMPROP  comprop;

LPBYTE lpimage;
CString  datastring;
int sviewx,sviewy;

//-------------
int sx,sy,ex,ey;
CString pathname;
//--------------
CStdioFile  filetext;
BOOL    RecorderData(CDib &filedib);
BOOL    RecorderData2(CDib *filedib);
BYTE    GetArray(UINT hdnum, UINT Dist, UINT startnum,DWORD width,DWORD rwidth, LPBYTE lpimage,BYTE xd); 
BOOL    AnalyzeData(CDib &filedib);
UINT    OrderThread(LPVOID pParam);
LPBYTE  Conver(LPBYTE lpimage, DWORD sizeimage,DWORD width,DWORD rwidth);
UINT    Search(LPBYTE lpimage,DWORD width,DWORD rwidth,DWORD rows);
LPBYTE  Packet(LPBYTE lpimage, BYTE xoff, BYTE xd, DWORD width, DWORD rwidth,ULONG &bytesnum);
LPBYTE  Orderpacket(char flag,ULONG *bytesnum);
LPBYTE  Sumcheck(LPBYTE orderlines, UINT bytesnum);
LPBYTE  Go(BYTE xd, BYTE xoff,BYTE yoff, BYTE yd);
BOOL    writetofile(LPBYTE ppacket, UINT bytesnum);
BOOL    IsOk(char tag,LPBYTE readdata);
BOOL    writetag(LPBYTE tag);
BOOL    typedata(LPBYTE lpimage, UINT  height, UINT cols);
LPBYTE  Converbit(CDib *filedib);
HANDLE  DDBToDIB( CBitmap& bitmap, DWORD dwCompression, CPalette* pPal ) ;
BOOL    Write(LPBYTE writedata,ULONG  bytesnum);
void    Justed();
BOOL GetCADName(BOOL bIsOpen,CString& sFileName);


/////////////////////////////////////////////////////////////////////////////
// CDabiaoView


IMPLEMENT_DYNCREATE(CDabiaoView, CScrollView)

BEGIN_MESSAGE_MAP(CDabiaoView, CScrollView)
	//{{AFX_MSG_MAP(CDabiaoView)
	ON_COMMAND(ID_TTEXTOUT, OnTtextout)
	ON_UPDATE_COMMAND_UI(ID_TTEXTOUT, OnUpdateTtextout)
	ON_COMMAND(ID_SETVIEW, OnSetview)
	ON_COMMAND(ID_MODIFY, OnModify)
	ON_WM_LBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDBLCLK()
	ON_COMMAND(ID_PICTURRE, OnPicturre)
	ON_COMMAND(ID_TEST, OnTest)
	ON_COMMAND(ID_OPEN_SYSTEM, OnOpenSystem)
	ON_UPDATE_COMMAND_UI(ID_OPEN_SYSTEM, OnUpdateOpenSystem)
	ON_COMMAND(ID_CLOSE_SYSTEM, OnCloseSystem)
	ON_UPDATE_COMMAND_UI(ID_CLOSE_SYSTEM, OnUpdateCloseSystem)
	ON_COMMAND(ID_PRINT_CANCEL, OnPrintCancel)
	ON_UPDATE_COMMAND_UI(ID_PRINT_CANCEL, OnUpdatePrintCancel)
	ON_COMMAND(ID_PRINT_CONTINUE, OnPrintContinue)
	ON_UPDATE_COMMAND_UI(ID_PRINT_CONTINUE, OnUpdatePrintContinue)
	ON_COMMAND(ID_PRINT_LINK, OnPrintLink)
	ON_UPDATE_COMMAND_UI(ID_PRINT_LINK, OnUpdatePrintLink)
	ON_COMMAND(ID_PRINT_PAUSE, OnPrintPause)
	ON_UPDATE_COMMAND_UI(ID_PRINT_PAUSE, OnUpdatePrintPause)
	ON_COMMAND(ID_PRINT_SEND, OnPrintSend)
	ON_UPDATE_COMMAND_UI(ID_PRINT_SEND, OnUpdatePrintSend)
	ON_COMMAND(ID_PRINT_SET, OnPrintSet)
	ON_UPDATE_COMMAND_UI(ID_PRINT_SET, OnUpdatePrintSet)
	ON_COMMAND(ID_PRINT_TEST, OnPrintTest)
	ON_UPDATE_COMMAND_UI(ID_PRINT_TEST, OnUpdatePrintTest)
	ON_WM_KEYDOWN()
	ON_WM_TIMER()
	ON_UPDATE_COMMAND_UI(ID_MODIFY, OnUpdateModify)
	ON_UPDATE_COMMAND_UI(ID_PICTURRE, OnUpdatePicturre)
	ON_UPDATE_COMMAND_UI(ID_SETVIEW, OnUpdateSetview)
	ON_UPDATE_COMMAND_UI(ID_CLEAR, OnUpdateClear)
	ON_COMMAND(ID_CLEAR, OnClear)
	ON_UPDATE_COMMAND_UI(ID_FILE_NEW, OnUpdateFileNew)
	ON_UPDATE_COMMAND_UI(ID_FILE_OPEN, OnUpdateFileOpen)
	ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave)
	ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_AS, OnUpdateFileSaveAs)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDabiaoView construction/destruction
void CDabiaoView:: Init()
{
    datetype=0;
    g_pView = this;
    viewscale=2;
    viewx=100;
	viewy=20;
	viewwidth=240;
	viewhigh=300;
    height=150;
    picx0=0;
	picx1=0;
	picy0=0;
	picy1=0;
    comname="COM1";
    hdnum=6,Dist=20;
	times=1;
    height=150;
    xoff=0,yoff=0,xd=0,yd=0; 
    speed=2;
    testorder=0x1c;
    xtd=0,xtoff=0,ytd=0,ytoff=0;
    width=Dist*hdnum;

	return;
}
BOOL IsInCret(const CPoint& pos)
{
	if((pos.x > viewx)
		&&(pos.x < viewx+viewwidth)
		&&(pos.y > viewy)
		&&(pos.y < viewy+viewhigh))
		return TRUE;
	return FALSE;
}


CDabiaoView::CDabiaoView()
{
	// TODO: add construction code here
	datetype=0;
    g_pView = this;
    viewscale=2;
    viewx=100;
	viewy=20;
	viewwidth=240;
	viewhigh=300;
    height=150;
    picx0=0;
	picx1=0;
	picy0=0;
	picy1=0;
    comname="COM1";
    hdnum=6,Dist=20;
	times=1;
    height=150;
    xoff=0,yoff=0,xd=0,yd=0; 
    speed=2;
    testorder=0x1c;
    xtd=0,xtoff=0,ytd=0,ytoff=0;
    width=Dist*hdnum;
}

CDabiaoView::~CDabiaoView()
{
}

BOOL CDabiaoView::PreCreateWindow(CREATESTRUCT& cs)
{

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CDabiaoView drawing

void CDabiaoView::OnDraw(CDC* pDC)
{
	//-----插入图片部分-----------------------------------
	sviewx=viewx+viewx+viewscale*Dist*hdnum+1+50;
	sviewy=viewy+50+1;
	
	pDC->SetMapMode(MM_TEXT);
    pDC->Rectangle(viewx-2,viewy-2,viewx+viewscale*Dist*hdnum+2,viewy+viewscale*height+2);
	pDC->Rectangle(sviewx-1,sviewy-1,sviewx+width+1,sviewy+height+1);
	g_nRefresh ++; // 每次视窗被重新绘制时,刷新次数加 1
	CDabiaoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	pDoc->Draw( pDC);
	//-----------------
	sizeFileDib.cx = (picx1-picx0)*viewscale;
	sizeFileDib.cy = (picy1-picy0)*viewscale;
	sizeFileDib0.cx = (picx1-picx0);
	sizeFileDib0.cy = (picy1-picy0);
	filedib.Draw(pDC, CPoint(picx0+sviewx,picy0+sviewy),sizeFileDib0);
    filedib.Draw(pDC, CPoint(picx0*viewscale+viewx,picy0*viewscale+viewy), sizeFileDib);
	
}

void CDabiaoView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();
	CSize sizeTotal;

	sizeTotal.cx = sizeTotal.cy = 100;
	SetScrollSizes(MM_TEXT, sizeTotal);
}

/////////////////////////////////////////////////////////////////////////////
// CDabiaoView diagnostics

#ifdef _DEBUG
void CDabiaoView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CDabiaoView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CDabiaoDoc* CDabiaoView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDabiaoDoc)));
	return (CDabiaoDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDabiaoView message handlers

void CDabiaoView::OnTtextout() 
{
    g_modify=FALSE;
	CEnterText  ctextent;
	ctextent.m_high=20;
    ctextent.m_width=8;
	if(ctextent.DoModal()==IDOK)
	{
		int type;
		if(ctextent.m_no)
			type=MNO;
		if(ctextent.m_date)
		{
		
			type=MDATA;
		}
        if(ctextent.m_text)
			type=MTEXT;
        if(ctextent.m_time)
			type=MTIME;
		if(ctextent.m_no )
		{
		  CFile file;
	      CFileStatus Status;
          int no;
		  char startno[6];
	      no = atoi(ctextent.m_string);
	      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();
	
		}
		CDC*	pDC = g_pView->GetDC(); 
		CPoint begin;
        ctextent.m_far=0;
		begin.x = ctextent.m_posx;
		begin.y = ctextent.m_posy;
		CText* pNewText=new CText(begin,
			                     ctextent.m_high,
			                     ctextent.m_width,
			                     ctextent.m_far,			 
			                     ctextent.m_string,
			                     type,ctextent.m_lf);
		pNewText->m_datatype=ctextent.m_DateType;
		pNewText->m_timetype=ctextent.m_TimeType;
		pNewText->Draw(pDC,0);
	    g_pDoc->m_EntityList.AddTail(pNewText);
	    g_pView->ReleaseDC(pDC);
        g_pDoc->SetModifiedFlag(TRUE);
	}	
}



void CDabiaoView::OnSetview() 
{
    g_modify=FALSE;
    CSetview  setviewdlg;
	setviewdlg.m_posx=viewx;
    setviewdlg.m_posy=viewy;
	setviewdlg.m_bili=viewscale;
	 g_pDoc ->UpdateAllViews(NULL) ;		
	if(setviewdlg.DoModal()!=IDOK)
	{
		g_pDoc ->UpdateAllViews(NULL) ;
		return;
	}
	{
       viewx=setviewdlg.m_posx;
       viewy=setviewdlg.m_posy;
       viewscale=setviewdlg.m_bili;
	   viewwidth=viewscale*width;
	   viewhigh=viewscale*height;
	}
    g_pDoc ->UpdateAllViews(NULL) ;		
}

void CDabiaoView::OnModify() 
{
	g_modify=TRUE;
}

void CDabiaoView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	CDabiaoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	if(g_modify)
		pDoc->OnLButtonDown(nFlags, point);
	CScrollView::OnLButtonDown(nFlags, point);
}

void CDabiaoView::OnMouseMove(UINT nFlags, CPoint point) 
{
    CDabiaoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
//------------------------------------------------------------------------------
		CDC* pDC = g_pView->GetDC();
		CString zuobiao;
        CClientDC cdc(this);
		if(IsInCret(point))
		     zuobiao.Format("当前的坐标为:X=%d,Y=%d",(point.x-viewx)/viewscale,(point.y-viewy)/viewscale);
		else
		     zuobiao.Format("                                                                                                  ");	
		pDC->TextOut(viewx,viewy+viewscale*height+10,"                                                                     ");
		pDC->TextOut(viewx,viewy+viewscale*height+10,zuobiao);

	if(g_modify)
		pDoc->OnMouseMove(nFlags, point);	
	CScrollView::OnMouseMove(nFlags, point);
}

void CDabiaoView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CDabiaoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if(g_modify)
		pDoc->OnLButtonDblClk(nFlags, point);	
	CScrollView::OnLButtonDblClk(nFlags, point);
}

void CDabiaoView::OnErase()
{
}

void CDabiaoView::OnClear() 
{
	filedib.Empty();
	Invalidate();	
	pathname="";
}

void CDabiaoView::OnPicturre() 
{
	 CPicture  picture;
     picture.m_startx=0;
     picture.m_starty=0;
	 picture.m_endx=(viewwidth/viewscale);
	 picture.m_endy=(viewhigh/viewscale);
	 if(picture.DoModal()!=IDOK)
	 {
		 return;
	 }
	  sx=picx0 = picture.m_startx;
	  sy=picy0 = picture.m_starty;
      ex=picx1 = picture.m_endx;
	  ey=picy1 = picture.m_endy;
	  CFileDialog dlg(TRUE, "bmp", "*.bmp");
      if (dlg.DoModal() != IDOK) 
	  {
        return;
	  }
     pathname=dlg.GetPathName();
     InsertPicture(picx0,picy0,picx1,picy1,pathname);
	 g_pDoc->SetModifiedFlag(TRUE);
}

void CDabiaoView::OnTest() 
{
    Justed();
}

void CDabiaoView::OnOpenSystem() 
{
	CSetComm  comdialog;
	comdialog.m_com=comname;
	if (comdialog.DoModal()!=IDOK)
		return;
		comname=comdialog.m_com;
	if((CommFile=CreateFile(comname,GENERIC_WRITE|GENERIC_READ,0,NULL,
		OPEN_EXISTING,0,NULL))== (HANDLE)-1) 
	{
		AfxMessageBox("无法开放通讯口,请检查是否有此通讯口!");
		return;
	}

	GetCommProperties(CommFile,&comprop);
	SetupComm(CommFile,8192,8192); 
	GetCommState(CommFile, &CommDCB);
	CommDCB.BaudRate = 9600;
	CommDCB.ByteSize = 8;
	CommDCB.Parity =  NOPARITY;
	CommDCB.StopBits = ONESTOPBIT;
    SetCommState(CommFile,&CommDCB); 
	g_start=TRUE;
	g_modify=FALSE;
	orderflag='W';
    SetTimer(1,1000,NULL);
	AfxBeginThread(OrderThread,GetSafeHwnd());	// TODO: Add your command handler code here
	g_pDoc->UpdateAllViews(NULL) ;
}

void CDabiaoView::OnUpdateOpenSystem(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
		pCmdUI->Enable (!g_start);
}

void CDabiaoView::OnCloseSystem() 
{
	KillTimer(1);
	g_start=FALSE;
	orderflag=' ';
	g_send = FALSE;
	g_pause = FALSE;
	CloseHandle(CommFile);// TODO: Add your command handler code here
	
}

void CDabiaoView::OnUpdateCloseSystem(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable (g_start);	
}


//////////////////////////////////
void Justed()
{
    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());
				goto out;
			}
			if(pSelEntity->m_datatype==1)          
			{
				buffer.Format("%04d.%02d.%02d",
				CTime::GetCurrentTime().GetYear(),
				CTime::GetCurrentTime().GetMonth(),
				CTime::GetCurrentTime().GetDay());
				goto out;
			}

⌨️ 快捷键说明

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