?? xfkilnview.cpp
字號:
// XFKILNView.cpp : implementation of the CXFKILNView class
//
#include "stdafx.h"
#include "XFKILN.h"
#include "XFKILNDoc.h"
#include "XFKILNView.h"
#include "DeviceNode.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CXFKILNView
IMPLEMENT_DYNCREATE(CXFKILNView, CView)
BEGIN_MESSAGE_MAP(CXFKILNView, CView)
//{{AFX_MSG_MAP(CXFKILNView)
ON_COMMAND(ID_CMD_TESTPORT, OnCmdTestport)
ON_WM_ERASEBKGND()
ON_COMMAND(ID_MENU_ADDNODE, OnAddnode)
ON_COMMAND(IDC_METER1, OnMeter1)
ON_COMMAND(IDC_METER2, OnMeter2)
ON_COMMAND(IDC_MTER3, OnMter3)
ON_COMMAND(IDC_MTER4, OnMter4)
ON_UPDATE_COMMAND_UI(IDC_METER1, OnUpdateMeter1)
ON_UPDATE_COMMAND_UI(IDC_METER2, OnUpdateMeter2)
ON_UPDATE_COMMAND_UI(IDC_MTER3, OnUpdateMter3)
ON_UPDATE_COMMAND_UI(IDC_MTER4, OnUpdateMter4)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CXFKILNView construction/destruction
CXFKILNView::CXFKILNView()
{
// TODO: add construction code here
m_count = 0;
}
CXFKILNView::~CXFKILNView()
{
}
BOOL CXFKILNView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CXFKILNView drawing
void CXFKILNView::OnDraw(CDC* pDC)
{
CXFKILNDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CRect rcView;
GetClientRect(rcView);
CString strTitle(_T("Kiln Control System"));
//Set the background mode to transparent.
pDC->SetBkMode(TRANSPARENT);
// HDC hDC = ::GetDC(AfxGetMainWnd()->m_hWnd);
char *sztemp[] = {"1700","1600", "1500","1400","1300",
"1200","1100","1000","900","800","700","600","500",
"400","300","200","100"};
char time[40][3];
for (int t = 0; t <= 40; t++)
{
sprintf(&time[t][0], "%d", t);
}
pDC->SetTextColor(RGB (0, 255, 0));
int x = rcView.Width()/2 - strTitle.GetLength()*3;
int y = 0;
pDC->TextOut(x,y, strTitle);
pDC->TextOut(0, 25, "1700");
// 選用藍色虛線筆 畫曲線坐標系內線
CPen pen(PS_DOT, 1, RGB(0,0,255));
pDC->SelectObject(&pen);
// 畫橫線并標注溫度值
for (int i = 35 , k = 0 ; i <= rcView.Height() - 25, k < 17; k++ ,i+= rcView.Height()/20)
{
pDC->MoveTo(40, i);
pDC->TextOut(0, i - 10, sztemp[k]);
pDC->LineTo(rcView.Width() - 40, i);
}
// 畫豎線并標注時間值
for (int j = 40 , l = 0 ; j <= rcView.Width() - 29 && l < 40; l++, j+= rcView.Height()/20)
{
pDC->MoveTo(j, 35);
pDC->LineTo(j, rcView.Height()*91/100);
pDC->TextOut(j -5 , rcView.Height()*91/100, time[l]);
}
// 選擇白色實線筆 畫坐標系X、Y軸
CPen penSolid(PS_SOLID, 1, RGB(255,255,255));
pDC->SelectObject(&penSolid);
pDC->MoveTo(40, 25);
pDC->LineTo(40, rcView.Height()*93/103);
pDC->LineTo(rcView.Width() - 20, rcView.Height()*93/103);
// 選用紅色字標注X、Y軸單位
pDC->SetTextColor(RGB(255,0,0));
pDC->TextOut(0, 10, "Temperature C°");
pDC->TextOut(rcView.Width() - 80, rcView.Height() -20, "Time");
}
/////////////////////////////////////////////////////////////////////////////
// CXFKILNView printing
BOOL CXFKILNView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CXFKILNView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CXFKILNView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CXFKILNView diagnostics
#ifdef _DEBUG
void CXFKILNView::AssertValid() const
{
CView::AssertValid();
}
void CXFKILNView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CXFKILNDoc* CXFKILNView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CXFKILNDoc)));
return (CXFKILNDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CXFKILNView message handlers
BOOL CXFKILNView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}
void CXFKILNView::OnCmdTestport()
{
// TODO: Add your command handler code here
m_CommMeter.WriteToPort("來個句子試試!");
m_CommMeter.ReadFromPort();
CDC *dc =GetDC();
dc->TextOut(0, 100, strList);
}
BOOL CXFKILNView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
// Create a pruple brush.
CBrush brush(RGB(0 , 0 , 0));
// Select the brush into the device context .
CBrush* pOldBrush = pDC->SelectObject(&brush);
// Get the area that needs to be erased .
CRect rcClip;
pDC->GetClipBox(&rcClip);
//Paint the area.
pDC->PatBlt(rcClip.left, rcClip.top, rcClip.Width(),
rcClip.Height(), PATCOPY);
//Unselect brush out of device context .
pDC->SelectObject(pOldBrush);
// Return nonzero to half fruther processing .
return TRUE;
return CView::OnEraseBkgnd(pDC);
}
LRESULT CXFKILNView::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
//WM_COMM_RXCHAR, (WPARAM) RXBuff, (LPARAM) port->m_nPortNr);
if (message == WM_COMM_RXCHAR && wParam != NULL)
strList[m_count++] = wParam;
strList[m_count] = '\0';
return CView::DefWindowProc(message, wParam, lParam);
}
void CXFKILNView::OnAddnode()
{
// TODO: Add your command handler code here
UINT uPort = 0;
UINT uBaud = 0;
UINT uStopBit = 1;
UINT uDataBit = 8;
char sParity = 'N';
CXFKILNDoc *pDoc = GetDocument();
pDoc->m_DevNode.DoModal();
int nLen = pDoc->m_DevNode.m_Baud.GetLength();
char *szBaud =pDoc->m_DevNode.m_Baud.GetBuffer(nLen);
int weight[] ={1, 10, 100, 1000, 10000, 100000};
char sTemp;
for (int i = 0; i < nLen; i++)
{
sTemp = szBaud[i];
uBaud += ((int)sTemp - 48) * weight[nLen - i -1];
}
char *szStopBit =pDoc->m_DevNode.m_StopBit.GetBuffer(1);
char s_stop = szStopBit[0];
uStopBit = (int)s_stop - 48;
char *szDataBit = pDoc->m_DevNode.m_DataBit.GetBuffer(1);
char s_data = szDataBit[0];
uDataBit = (int)s_data -48;
nLen = pDoc->m_DevNode.m_Parity.GetLength();
char *szParity = pDoc->m_DevNode.m_Parity.GetBuffer(nLen);
//AfxMessageBox(szParity);
if (szParity == "無校驗")
sParity = 'N';
else if (szParity == "奇校驗")
sParity = 'O';
else if (szParity == "偶校驗")
sParity = 'E';
/*
char rev[10];
sprintf(rev, "%d", uBaud);
AfxMessageBox(rev);
*/
char *szPort = pDoc->m_DevNode.m_Port.GetBuffer(4);
char s1 = szPort[3];
uPort =(int)s1 - 48;
if (m_CommMeter.InitPort(this,uPort, uBaud, sParity, uDataBit,
uStopBit))
{
m_CommMeter.StartMonitoring();
// pDoc->nNodeNum++;
}
}
void CXFKILNView::OnMeter1()
{
// TODO: Add your command handler code here
if (m_bSelectMeter1 != 1)
{
m_bSelectMeter1 = 1;
OnAddnode();
return;
}
else
m_bSelectMeter1 = 0;
//m_CommMeter.StopMonitoring();
}
void CXFKILNView::OnMeter2()
{
// TODO: Add your command handler code here
if (m_bSelectMeter2 != 1){
m_bSelectMeter2 = 1;
OnAddnode();
}
else
m_bSelectMeter2 = 0;
}
void CXFKILNView::OnMter3()
{
// TODO: Add your command handler code here
if (m_bSelectMeter3 != 1){
m_bSelectMeter3 = 1;
OnAddnode();
}
else
m_bSelectMeter3 = 0;
}
void CXFKILNView::OnMter4()
{
// TODO: Add your command handler code here
if (m_bSelectMeter4 != 1){
m_bSelectMeter4 = 1;
OnAddnode();
}
else
m_bSelectMeter4 = 0;
}
void CXFKILNView::OnUpdateMeter1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if (m_bSelectMeter1 == 1)
pCmdUI->SetRadio();
}
void CXFKILNView::OnUpdateMeter2(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
// if (this->GetDocument()->nNodeNum < 2)
// pCmdUI->Enable(FALSE);
if (m_bSelectMeter2 == 1)
pCmdUI->SetRadio();
}
void CXFKILNView::OnUpdateMter3(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
// if (this->GetDocument()->nNodeNum < 3)
// pCmdUI->Enable(FALSE);
if (m_bSelectMeter3 == 1)
pCmdUI->SetRadio();
}
void CXFKILNView::OnUpdateMter4(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if (m_bSelectMeter4 == 1)
pCmdUI->SetRadio();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -