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

📄 地面测控dlg.cpp

📁 用VC++6.0与单片机通过RS232通信程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 地面测控Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "地面测控.h"
#include "地面测控Dlg.h"


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

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();
	
	// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA
	
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL
	
	// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMyDlg)
	m_RevData = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	bj1=302;
	bj2=1;
	bj3=1;
	bj4=0;
	bj5=0;
	bj6=0;
}

void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMyDlg)
	DDX_Control(pDX, IDC_SLIDER1, m_slider1);
	DDX_Control(pDX, IDC_METER, m_meter);
	DDX_Control(pDX, IDC_BUTZRIG, m_butzrig);
	DDX_Control(pDX, IDC_BUTZLEFT, m_butzleft);
	DDX_Control(pDX, IDC_BUTXSTOP, m_butxstop);
	DDX_Control(pDX, IDC_BUTXRIG, m_butxrig);
	DDX_Control(pDX, IDC_BUTXLEFT, m_butxleft);
	DDX_Control(pDX, IDC_BUTQH, m_butqh);
	DDX_Control(pDX, IDC_BUTCJ, m_butcj);
	DDX_Control(pDX, IDC_BUTBG, m_butbg);
	DDX_Control(pDX, IDC_BUTBD, m_butbd);
	DDX_Control(pDX, IDC_BUTDOWN, m_butdown);
	DDX_Control(pDX, IDC_BUTLEFT, m_butleft);
	DDX_Control(pDX, IDC_BUTRIG, m_butrig);
	DDX_Control(pDX, IDC_BUTUP, m_butup);
	DDX_Control(pDX, IDC_MSCOMM1, m_comm);
	DDX_Text(pDX, IDC_EDIT2, m_RevData);
	DDX_Control(pDX, IDC_MDRAW3DCTRL1, m_ocx);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTLEDH, OnButledh)
ON_BN_CLICKED(IDC_BUTLEDE, OnButlede)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, OnCustomdrawSlider1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers

BOOL CMyDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	
	m_comm.SetCommPort(1);//使用串口1
	m_comm.SetRThreshold(1); //每接收10个字符就触发1次接收事件
	m_comm.SetSThreshold(0); //不触发发送事件	
	m_comm.SetInputLen(5); //每次读操作从缓冲区中取10个字符
	m_comm.SetInputMode(0); //二进制数据传输形式
	if(!m_comm.GetPortOpen()) 
		m_comm.SetPortOpen(TRUE); //打开串口
	
	
	// Add "About..." menu item to system menu.
	
	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);
	
	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}
	
	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	SetTimer(1,1000,NULL);
	SetTimer(2,500,NULL);
	CTime tm=CTime::GetCurrentTime();
    CString str=tm.Format("%Y年%m月%d日 %H:%M:%S");
	SetDlgItemText(IDC_TIME,str);
    
	m_meter.SetRange(-140,140);
	m_meter.SetTicks(14);
	m_meter.SetAngleRange(230,310);
	CString Sdu="度";
	m_meter.SetUnits(Sdu);
	m_meter.SetValueDecimals(0);
	m_meter.UpdateNeedle(0);
    m_slider1.SetRange(10,90);
    m_slider1.SetTicFreq(10); 
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMyDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting
		
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
		
		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;
		
		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMyDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}


BEGIN_EVENTSINK_MAP(CMyDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CMyDlg)
ON_EVENT(CMyDlg, IDC_MSCOMM1, 1 /* OnComm */, OnOnCommMscomm1, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void  CMyDlg::OnOnCommMscomm1() 
{
	// TODO: Add your control notification handler code here
    VARIANT   Input;   
    if(m_comm.GetCommEvent()==2)//接收缓冲区内有字符   
	{   
		Input=m_comm.GetInput();//读取缓冲区内的数据   
		CString   msg=Input.bstrVal;
		m_RevData="";
		unsigned char * pC = (unsigned char*)(LPCTSTR)msg; 
		int num1=int(pC[0]); 
		int num2=int(pC[1]);
		num2=num1*256+num2;
        CString msgg;
		msgg.Format("%ld",num2); 
		m_RevData+=msgg;
	}
	UpdateData(FALSE);
}

BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
    if(pMsg->message == WM_KEYDOWN)
	{
		switch(pMsg->wParam)
		{
			
		case VK_UP:
			GetDlgItem(IDC_BUTUP)->SendMessage(BM_SETSTATE, 1,0);
			m_SendData="8";
			m_comm.SetOutput(COleVariant(m_SendData));//发送数据
			return   true;  
		case VK_LEFT:
			GetDlgItem(IDC_BUTLEFT)->SendMessage(BM_SETSTATE, 1,0);	
			m_SendData="6";
			m_comm.SetOutput(COleVariant(m_SendData));//发送数据	  
			return   true;  
		case VK_RIGHT:
			m_SendData="4";
			GetDlgItem(IDC_BUTRIG)->SendMessage(BM_SETSTATE, 1,0);  
			m_comm.SetOutput(COleVariant(m_SendData));//发送数据	  
			return   true;  
		case VK_DOWN:
			m_SendData="2";
			GetDlgItem(IDC_BUTDOWN)->SendMessage(BM_SETSTATE, 1,0);  
			m_comm.SetOutput(COleVariant(m_SendData));//发送数据	  
			return   true; 
		case 'W':
			m_SendData="C";
			bj4=1;
			GetDlgItem(IDC_BUTZLEFT)->SendMessage(BM_SETSTATE, 1,0);  
			m_comm.SetOutput(COleVariant(m_SendData));//发送数据	 
			return   true; 	
		case 'R':
			m_SendData="A";
			bj5=1;
			GetDlgItem(IDC_BUTZRIG)->SendMessage(BM_SETSTATE, 1,0);  
			m_comm.SetOutput(COleVariant(m_SendData));//发送数据	  
			return   true; 	
		case 'S':
			GetDlgItem(IDC_BUTXLEFT)->SendMessage(BM_SETSTATE, 1,0);
			m_SendData="E";
			m_comm.SetOutput(COleVariant(m_SendData));//发送数据
			return   true;  
		case 'D':
			GetDlgItem(IDC_BUTXSTOP)->SendMessage(BM_SETSTATE, 1,0);	
			m_SendData="J";
			m_comm.SetOutput(COleVariant(m_SendData));//发送数据	  
			return   true;  
		case 'F':
			m_SendData="F";
			GetDlgItem(IDC_BUTXRIG)->SendMessage(BM_SETSTATE, 1,0);  
			m_comm.SetOutput(COleVariant(m_SendData));//发送数据	  
			return   true;  
		case 'X':
			m_SendData="G";
			GetDlgItem(IDC_BUTBG)->SendMessage(BM_SETSTATE, 1,0);  
			m_comm.SetOutput(COleVariant(m_SendData));//发送数据	  
			return   true; 
        case 'V':
			m_SendData="H";
			GetDlgItem(IDC_BUTBD)->SendMessage(BM_SETSTATE, 1,0);  
			m_comm.SetOutput(COleVariant(m_SendData));//发送数据	  
			return   true; 
		case VK_NUMPAD1:
			bj2++;
			if(bj2%2==0)
			{
				GetDlgItem(IDC_BUTLEDH)->SendMessage(BM_SETSTATE, 1,0);
				SetDlgItemText(IDC_BUTLEDH,"关前灯");
				m_SendData="L";
				m_comm.SetOutput(COleVariant(m_SendData));//发送数据
				return   true;  
			}
			else
			{
				m_SendData="K";
				SetDlgItemText(IDC_BUTLEDH,"开前灯");
				GetDlgItem(IDC_BUTLEDH)->SendMessage(BM_SETSTATE, 1,0);  
				m_comm.SetOutput(COleVariant(m_SendData));//发送数据	  
				return   true; 
			}
		case VK_NUMPAD2:
			bj3++;
			if(bj3%2==0)
			{
				m_SendData="N";
				GetDlgItem(IDC_BUTLEDE)->SendMessage(BM_SETSTATE, 1,0);
				SetDlgItemText(IDC_BUTLEDE,"关后灯");			
				m_comm.SetOutput(COleVariant(m_SendData));//发送数据	  
				return   true;  
			}

⌨️ 快捷键说明

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