?? recvview.cpp
字號:
// RecvView.cpp : implementation file
//
#include "stdafx.h"
#include "ComDbg.h"
#include "RecvView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRecvView
IMPLEMENT_DYNCREATE(CRecvView, CEditView)
BEGIN_MESSAGE_MAP(CRecvView, CEditView)
//{{AFX_MSG_MAP(CRecvView)
ON_WM_CHAR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CRecvView::CRecvView()
{
m_pDoc =NULL;
m_pedt =NULL;
m_hThread =NULL;
m_nbpl =8;
m_ptext =NULL;
m_ptext=new char[TBUF];
LOGFONT lf={0};
lf.lfCharSet=GB2312_CHARSET;//134
lf.lfOutPrecision=3;
lf.lfClipPrecision=2;
lf.lfQuality=1;
lf.lfPitchAndFamily=2;
lstrcpy(lf.lfFaceName,_T("宋體"));
lf.lfHeight=-17;
lf.lfWeight=FW_REGULAR;
m_font.CreateFontIndirect(&lf);
}
CRecvView::~CRecvView()
{
if(m_ptext != NULL)
delete [] m_ptext;
}
BOOL CRecvView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CEditView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CRecvView drawing
void CRecvView::OnDraw(CDC* pDC){}
/////////////////////////////////////////////////////////////////////////////
// CRecvView diagnostics
#ifdef _DEBUG
void CRecvView::AssertValid() const
{
CEditView::AssertValid();
}
void CRecvView::Dump(CDumpContext& dc) const
{
CEditView::Dump(dc);
}
CComDbgDoc* CRecvView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CComDbgDoc)));
return (CComDbgDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CRecvView message handlers
void CRecvView::OnInitialUpdate()
{
CEditView::OnInitialUpdate();
m_pDoc=GetDocument();
m_pedt=&GetEditCtrl();
SetFont(&m_font);
// m_pedt->SetReadOnly(TRUE);
}
void CRecvView::Clear()
{
m_pedt->SetWindowText(_T(""));
}
void CRecvView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar == 13)
{
CEditView::OnChar(nChar, nRepCnt, nFlags);
}
}
DWORD WINAPI CRecvView::RecvThread(LPVOID lpParam)
{
CRecvView* pCls=(CRecvView*)lpParam;
ASSERT(pCls != NULL);
pCls->m_evnStop.ResetEvent();
DWORD dwWait=0;
while(TRUE)
{
dwWait=::WaitForSingleObject(pCls->m_evnStop,5000);
if(dwWait == WAIT_OBJECT_0) break;
pCls->Recv();
}
return 0;
}
BOOL CRecvView::StartRecv()
{
StopRecv();
DWORD dwID=0;
m_hThread=CreateThread(NULL,0,RecvThread,this,0,&dwID);
TRACE("ProcThread 0x%X Created\n",dwID);
return (m_hThread != NULL);
}
void CRecvView::StopRecv()
{
if(m_hThread == NULL) return;
m_evnStop.SetEvent();
DWORD dwWait=::WaitForSingleObject(m_hThread,15000);
if(dwWait != WAIT_OBJECT_0)
::TerminateThread(m_hThread,-1);
m_hThread=NULL;
}
void CRecvView::Recv()
{
BYTE buf[RBUF]={0};
BYTE* p=buf;
for(int n=0;n<RBUF;n++)
{
if(!m_pDoc->m_com.Recv(p,1)) break;
p++;
}
n=p-buf;
if(n>0)
{
char szt[8]={0};
char endl[3]={0x0d,0x0a,0x00};
if(m_ptext == NULL)
{
m_pedt->SetWindowText(_T("內存不夠!"));
return;
}
memset(m_ptext,0,TBUF);
m_pedt->GetWindowText(m_ptext,TBUF-1);
memset(m_szl,0,sizeof(m_szl));
char* pszl=m_szl;
int idx=m_pedt->GetLineCount()-1;
int ilen=m_pedt->GetLine(idx,pszl,LBUF-1);
if(ilen%BPB) while(*pszl == TEXT(' '))pszl++;
int it=m_nbpl-lstrlen(pszl)/BPB;
if(it==m_nbpl) it=0;
int nl=(n-it)/m_nbpl;
if((n-it)%m_nbpl) nl++;
if(it>0) nl++;
idx=0;
it=lstrlen(pszl)/BPB;
for(int il=0;il<nl && idx<n;il++)
{
for(;it<m_nbpl && idx<n;it++)
{
sprintf(szt,_T("0x%02X "),buf[idx]);
lstrcat(m_ptext,szt);
if(it == m_nbpl-1)
lstrcat(m_ptext,endl);
idx++;
}
it=0;
}
m_pedt->SetWindowText(m_ptext);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -