📄 dabiaoview.cpp
字号:
// 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 + -