www.pudn.com > DNC.rar > NCDlg.cpp
// NCDlg.cpp : implementation file // #include "stdafx.h" #include "NC.h" #include "NCDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #include "MySocket.h" #include "Com1Set.h" #include "Com2Set.h" #include "MachineAdd.h" #include "MachineEdit.h" #include#include ///////////////////////////////////////////////////////////////////////////// // 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() ///////////////////////////////////////////////////////////////////////////// // CNCDlg dialog CNCDlg::CNCDlg(CWnd* pParent /*=NULL*/) : CDialog(CNCDlg::IDD, pParent) { //{{AFX_DATA_INIT(CNCDlg) m_strEdit1 = _T(""); m_strEdit2 = _T(""); m=1; n=1; m_name = _T(""); m_com = _T(""); m_description = _T(""); //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CNCDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CNCDlg) DDX_Control(pDX, IDC_PROGRESS2, m_progress2); DDX_Control(pDX, IDC_PROGRESS1, m_progress1); DDX_Control(pDX, IDC_TREE, m_tree); DDX_Control(pDX, IDC_MSCOM1, m_ctrlComm1); DDX_Control(pDX, IDC_MSCOM2, m_ctrlComm2); DDX_Text(pDX, IDC_EDIT1, m_strEdit1); DDX_Text(pDX, IDC_EDIT2, m_strEdit2); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CNCDlg, CDialog) //{{AFX_MSG_MAP(CNCDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_COMMAND(ID_NCEDIT, OnNcedit) ON_COMMAND(ID_TOINTERNET, OnTointernet) ON_COMMAND(IDD_ABOUTBOX, OnAboutbox) ON_NOTIFY(NM_RCLICK, IDC_TREE, OnRclickTree) ON_COMMAND(ID_MACHINE_ADD, OnMachineAdd) ON_COMMAND(ID_MACHINE_DEL, OnMachineDel) ON_COMMAND(ID_COM_RECEIVE, OnComReceive) ON_COMMAND(ID_COM_SEND, OnComSend) ON_COMMAND(ID_MACHINE_EDIT, OnMachineEdit) ON_COMMAND(ID_NCSAVE1, OnNcsave1) ON_COMMAND(ID_NCSAVE2, OnNcsave2) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CNCDlg message handlers BOOL CNCDlg::OnInitDialog() { CDialog::OnInitDialog(); // 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 /*HICON hIcon = NULL; hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_KEBIAO), IMAGE_ICON, 24, 24, 0); m_iImageList.Add(hIcon); m_tree.SetImageList ( &m_iImageList,TVSIL_NORMAL );*/ DWORD dwStyle = GetWindowLong(m_tree.m_hWnd,GWL_STYLE); dwStyle |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT; SetWindowLong(m_tree.m_hWnd,GWL_STYLE,dwStyle); m_hRoot=m_tree.InsertItem( "数控机床管理器"); if(m_pSet.IsOpen()) m_pSet.Close(); m_pSet.Open(); m_pSet.MoveFirst(); int j=m_pSet.GetRecordCount();//AfxMessageBox((CString)j); /* for(int i=0;i Create(IDD_DIALOG1,NULL); dlg->ShowWindow(SW_SHOW); } void CNCDlg::OnAboutbox() { // TODO: Add your command handler code here CAboutDlg dlg; dlg.DoModal(); } BEGIN_EVENTSINK_MAP(CNCDlg, CDialog) //{{AFX_EVENTSINK_MAP(CNCDlg) ON_EVENT(CNCDlg, IDC_MSCOM1, 1 /* OnComm */, OnAcceptCom1, VTS_NONE) ON_EVENT(CNCDlg, IDC_MSCOM2, 1 /* OnComm */, OnAcceptCom2, VTS_NONE) //}}AFX_EVENTSINK_MAP END_EVENTSINK_MAP() //添加pop菜单 void CNCDlg::OnRclickTree(NMHDR* pNMHDR, LRESULT* pResult) { CMenu* menu; CMenu* pPopup; menu = new CMenu(); menu->LoadMenu(IDR_MENU1); pPopup=menu->GetSubMenu(0); CPoint Point; GetCursorPos(&Point); pPopup->TrackPopupMenu(TPM_LEFTALIGN,Point.x,Point.y, AfxGetMainWnd(),NULL); delete menu; *pResult = 0; } //线程 CWinThread *pThreadSendFile1; //发送文件线程-->_SendFileThread CWinThread *pThreadSendFile2; //发送文件线程-->_SendFileThread UINT _SendFileThread1(LPVOID lparam) { CNCDlg *pDlg=(CNCDlg *)lparam; CFile myFile; myFile.Open(pDlg->m_fileName1, CFile::modeRead ); int lent=myFile.GetLength(); char *pBuft = new char[lent+1]; memset(pBuft,'\0',lent+1); memset(pBuft,0,lent); myFile.Read(pBuft,lent); myFile.Close(); CString strt1 = pBuft; pDlg->SetDlgItemText(IDC_EDIT1,strt1); // pDlg->m_strEdit1=strt1; CByteArray array; int n,m; n=lent/256; m=lent%256; if(n!=0) { for(int j=0;j m_progress1.SetPos((j*256+i)*100/lent); } pDlg->m_ctrlComm1.SetOutput(COleVariant(array));//发送数据 } array.RemoveAll(); array.SetSize(m); for(int k=0;k m_progress1.SetPos((n*256+k)*100/lent); } pDlg->m_ctrlComm1.SetOutput(COleVariant(array));//发送数据 } else { array.RemoveAll(); array.SetSize(lent); for(int l=0;l m_progress1.SetPos(l*100/lent); } pDlg->m_ctrlComm1.SetOutput(COleVariant(array));//发送数据 } delete pBuft; return 0; } UINT _SendFileThread2(LPVOID lparam) { CNCDlg *pDlg=(CNCDlg *)lparam; CFile myFile; myFile.Open(pDlg->m_fileName2, CFile::modeRead ); int lent=myFile.GetLength(); char *pBuft = new char[lent+1]; memset(pBuft,'\0',lent+1); memset(pBuft,0,lent); myFile.Read(pBuft,lent); myFile.Close(); CString strt2 = pBuft; // pDlg->SetDlgItemText(IDC_EDIT2,""); pDlg->SetDlgItemText(IDC_EDIT2,strt2); // pDlg->m_strEdit2=strt2; CByteArray array; int n,m; n=lent/256; m=lent%256; if(n!=0) { for(int j=0;j m_progress2.SetPos((j*256+i)*100/lent); } pDlg->m_ctrlComm2.SetOutput(COleVariant(array));//发送数据 } array.RemoveAll(); array.SetSize(256); for(int k=0;k m_progress2.SetPos((n*256+k)*100/lent); } pDlg->m_ctrlComm2.SetOutput(COleVariant(array));//发送数据 } else { array.RemoveAll(); array.SetSize(lent); for(int l=0;l m_progress2.SetPos(l*100/lent); } pDlg->m_ctrlComm2.SetOutput(COleVariant(array));//发送数据 } delete pBuft; return 0; } //com1发送 void CNCDlg::OnCom1Send() { // SetDlgItemText(IDC_EDIT1,""); if(m_ctrlComm1.GetPortOpen()) m_ctrlComm1.SetPortOpen(false); m_ctrlComm1.SetCommPort(1); if( !m_ctrlComm1.GetPortOpen()) m_ctrlComm1.SetPortOpen(TRUE);//打开串口 else AfxMessageBox("不能打开!"); HTREEITEM m_hTreeItem = m_tree.GetSelectedItem(); CString s1 = m_tree.GetItemText(m_hTreeItem); SetDlgItemText(IDC_STATICCOM1,"COM1-"+s1); SetDlgItemText(IDC_STATICCOM11,"COM1-"+s1); CString m_jiaoyancode; CString m_set; CCom1Set dlg; if(dlg.DoModal()==IDOK) { if(dlg.m_jiaoyan=="缺省") m_jiaoyancode="n"; if(dlg.m_jiaoyan=="偶") m_jiaoyancode="e"; if(dlg.m_jiaoyan=="奇") m_jiaoyancode="o"; m_set=dlg.m_bit+","+m_jiaoyancode+","+dlg.m_tingzhi+","+dlg.m_shuju; m_ctrlComm1.SetSettings(m_set); //波特率9600,无校验,8个数据位,1个停止位 if(dlg.m_handshake=="NONE") { m_ctrlComm1.SetHandshaking(0);//无握手协议 } if(dlg.m_handshake=="XON/XOFF") { m_ctrlComm1.SetHandshaking(1);//XON/XOFF握手协议 } if(dlg.m_handshake=="RTS/CTS") { m_ctrlComm1.SetHandshaking(2);//RTS/CTS握手协议 } if(dlg.m_handshake=="BOTH") { m_ctrlComm1.SetHandshaking(3);//BOTH握手协议 } m_ctrlComm1.SetInputMode(0); //1:表示以二进制方式检取数据 m_ctrlComm1.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 m_ctrlComm1.SetInputLen(0); //设置当前接收区数据长度为0 m_ctrlComm1.GetInput();//先预读缓冲区以清除残留数据 CFileDialog Filedlg(true); Filedlg.m_ofn.lpstrTitle="选择要传输的NC代码"; if(Filedlg.DoModal()==IDOK) { m_fileName1=Filedlg.GetPathName(); // GetDlgItem(IDC_COM1)->EnableWindow(false); // GetDlgItem(IDC_ACCEPT1)->EnableWindow(false); pThreadSendFile1=::AfxBeginThread(_SendFileThread1,this); // GetDlgItem(IDC_COM1)->EnableWindow(true); // GetDlgItem(IDC_ACCEPT1)->EnableWindow(true); } } // UpdateData(FALSE);//编辑框赋值 // m_ctrlComm1.SetPortOpen(FALSE); } //com2发送 void CNCDlg::OnCom2Send() { // SetDlgItemText(IDC_EDIT2,""); if(m_ctrlComm2.GetPortOpen()) m_ctrlComm2.SetPortOpen(FALSE); m_ctrlComm2.SetCommPort(2); if( !m_ctrlComm2.GetPortOpen()) m_ctrlComm2.SetPortOpen(TRUE);//打开串口 else AfxMessageBox("cannot open serial port"); HTREEITEM m_hTreeItem = m_tree.GetSelectedItem(); CString s1 = m_tree.GetItemText(m_hTreeItem); SetDlgItemText(IDC_STATICCOM2,"COM2-"+s1); SetDlgItemText(IDC_STATICCOM22,"COM2-"+s1); CString m_jiaoyancode; CString m_set; CCom2Set dlg; if(dlg.DoModal()==IDOK) { if(dlg.m_jiaoyan=="缺省") m_jiaoyancode="n"; if(dlg.m_jiaoyan=="偶") m_jiaoyancode="e"; if(dlg.m_jiaoyan=="奇") m_jiaoyancode="o"; m_set=dlg.m_bit+","+m_jiaoyancode+","+dlg.m_tingzhi+","+dlg.m_shuju; m_ctrlComm1.SetSettings(m_set); //波特率9600,无校验,8个数据位,1个停止位 if(dlg.m_handshake=="NONE") { m_ctrlComm2.SetHandshaking(0);//无握手协议 } if(dlg.m_handshake=="XON/XOFF") { m_ctrlComm2.SetHandshaking(1);//XON/XOFF握手协议 } if(dlg.m_handshake=="RTS/CTS") { m_ctrlComm2.SetHandshaking(2);//RTS/CTS握手协议 } if(dlg.m_handshake=="BOTH") { m_ctrlComm2.SetHandshaking(3);//BOTH握手协议 } m_ctrlComm2.SetInputMode(0); //1:表示以二进制方式检取数据 m_ctrlComm2.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 m_ctrlComm2.SetInputLen(0); //设置当前接收区数据长度为0 m_ctrlComm2.GetInput();//先预读缓冲区以清除残留数据 CFileDialog Filedlg(true); Filedlg.m_ofn.lpstrTitle="选择要传输的NC代码"; if(Filedlg.DoModal()==IDOK) { m_fileName2=Filedlg.GetPathName(); pThreadSendFile2=::AfxBeginThread(_SendFileThread2,this); } } // UpdateData(FALSE);//编辑框赋值 } void CNCDlg::OnComSend() { // TODO: Add your command handler code here HTREEITEM m_hTreeItem = m_tree.GetSelectedItem(); CString str = m_tree.GetItemText(m_hTreeItem); CString com; if(m_pSet.IsOpen()) m_pSet.Close(); m_pSet.Open(); m_pSet.m_strFilter="name='"+str+"'"; m_pSet.Requery(); com=m_pSet.m_com; if(com=="COM1") { CNCDlg::OnCom1Send(); } else if(com=="COM2") { CNCDlg::OnCom2Send(); } } //com1接受函数 void CNCDlg::OnAcceptCom1() { VARIANT m_input; if(m_ctrlComm1.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符 { m_input=m_ctrlComm1.GetInput(); m_strEdit1+=(char*)(_bstr_t)m_input; } UpdateData(FALSE); //更新编辑框内容 } //com2接受函数 void CNCDlg::OnAcceptCom2() { VARIANT m_input; if(m_ctrlComm2.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符 { m_input=m_ctrlComm2.GetInput(); m_strEdit2+=(char*)(_bstr_t)m_input; } UpdateData(FALSE); //更新编辑框内容 } void CNCDlg::OnComReceive() { // TODO: Add your command handler code here HTREEITEM m_hTreeItem = m_tree.GetSelectedItem(); CString str = m_tree.GetItemText(m_hTreeItem); CString com; if(m_pSet.IsOpen()) m_pSet.Close(); m_pSet.Open(); m_pSet.m_strFilter="name='"+str+"'"; m_pSet.Requery(); com=m_pSet.m_com; if(com=="COM1") { m=0; if(m_ctrlComm1.GetPortOpen()) m_ctrlComm1.SetPortOpen(false); m_ctrlComm1.SetCommPort(1); if( !m_ctrlComm1.GetPortOpen()) m_ctrlComm1.SetPortOpen(TRUE);//打开串口 else AfxMessageBox("不能打开!"); HTREEITEM m_hTreeItem = m_tree.GetSelectedItem(); CString s1 = m_tree.GetItemText(m_hTreeItem); SetDlgItemText(IDC_STATICCOM1,s1); SetDlgItemText(IDC_STATICCOM11,s1); CString m_jiaoyancode; CString m_set; CCom1Set dlg; if(dlg.DoModal()==IDOK) { if(dlg.m_jiaoyan=="缺省") m_jiaoyancode="n"; if(dlg.m_jiaoyan=="偶") m_jiaoyancode="e"; if(dlg.m_jiaoyan=="奇") m_jiaoyancode="o"; m_set=dlg.m_bit+","+m_jiaoyancode+","+dlg.m_tingzhi+","+dlg.m_shuju; m_ctrlComm1.SetSettings(m_set); //波特率9600,无校验,8个数据位,1个停止位 if(dlg.m_handshake=="NONE") { m_ctrlComm1.SetHandshaking(0);//无握手协议 } if(dlg.m_handshake=="XON/XOFF") { m_ctrlComm1.SetHandshaking(1);//XON/XOFF握手协议 } if(dlg.m_handshake=="RTS/CTS") { m_ctrlComm1.SetHandshaking(2);//RTS/CTS握手协议 } if(dlg.m_handshake=="BOTH") { m_ctrlComm1.SetHandshaking(3);//BOTH握手协议 } m_ctrlComm1.SetInputMode(0); //1:表示以二进制方式检取数据 m_ctrlComm1.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 m_ctrlComm1.SetInputLen(0); //设置当前接收区数据长度为0 m_ctrlComm1.GetInput();//先预读缓冲区以清除残留数据 CNCDlg::OnAcceptCom1(); // m_ctrlComm1.SetPortOpen(false); } } else if(com=="COM2") { n=0; if(m_ctrlComm2.GetPortOpen()) m_ctrlComm2.SetPortOpen(FALSE); m_ctrlComm2.SetCommPort(2); if( !m_ctrlComm2.GetPortOpen()) m_ctrlComm2.SetPortOpen(TRUE);//打开串口 else AfxMessageBox("cannot open serial port"); HTREEITEM m_hTreeItem = m_tree.GetSelectedItem(); CString s1 = m_tree.GetItemText(m_hTreeItem); SetDlgItemText(IDC_STATICCOM2,s1); SetDlgItemText(IDC_STATICCOM22,s1); CString m_jiaoyancode; CString m_set; CCom2Set dlg; if(dlg.DoModal()==IDOK) { if(dlg.m_jiaoyan=="缺省") m_jiaoyancode="n"; if(dlg.m_jiaoyan=="偶") m_jiaoyancode="e"; if(dlg.m_jiaoyan=="奇") m_jiaoyancode="o"; m_set=dlg.m_bit+","+m_jiaoyancode+","+dlg.m_tingzhi+","+dlg.m_shuju; m_ctrlComm1.SetSettings(m_set); //波特率9600,无校验,8个数据位,1个停止位 if(dlg.m_handshake=="NONE") { m_ctrlComm2.SetHandshaking(0);//无握手协议 } if(dlg.m_handshake=="XON/XOFF") { m_ctrlComm2.SetHandshaking(1);//XON/XOFF握手协议 } if(dlg.m_handshake=="RTS/CTS") { m_ctrlComm2.SetHandshaking(2);//RTS/CTS握手协议 } if(dlg.m_handshake=="BOTH") { m_ctrlComm2.SetHandshaking(3);//BOTH握手协议 } m_ctrlComm2.SetInputMode(0); //1:表示以二进制方式检取数据 m_ctrlComm2.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 m_ctrlComm2.SetInputLen(0); //设置当前接收区数据长度为0 m_ctrlComm2.GetInput();//先预读缓冲区以清除残留数据 CNCDlg::OnAcceptCom2(); // m_ctrlComm2.SetPortOpen(false); } } } void CNCDlg::OnMachineAdd() { // TODO: Add your command handler code here CMachineAdd dlg; if(dlg.DoModal()==IDOK) { if(m_pSet.IsOpen()) m_pSet.Close(); m_pSet.Open(); m_pSet.AddNew(); m_pSet.m_name=dlg.m_name; m_pSet.m_com=dlg.m_com; m_pSet.m_description=dlg.m_description; m_pSet.Update(); } m_tree.DeleteAllItems(); DWORD dwStyle = GetWindowLong(m_tree.m_hWnd,GWL_STYLE); dwStyle |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT; SetWindowLong(m_tree.m_hWnd,GWL_STYLE,dwStyle); m_hRoot=m_tree.InsertItem( "数控机床管理器"); if(m_pSet.IsOpen()) m_pSet.Close(); m_pSet.Open(); m_pSet.MoveFirst(); int j=m_pSet.GetRecordCount(); /* for(int i=0;i