// Dlg_Controller.cpp : 实现文件 // #include "stdafx.h" #include "StoneU_Door.h" #include "Dlg_Frame.h" #include "Dlg_Controller.h" #include ".\dlg_controller.h" #include "Global.h" #include "mdlProject.h" #include "Dlg_ControllerProperty.h" #include "DBConnection.h" // CDlg_Controller 对话框 IMPLEMENT_DYNAMIC(CDlg_Controller, CDialog) CDlg_Controller::CDlg_Controller(CWnd* pParent /*=NULL*/) : CDialog(CDlg_Controller::IDD, pParent) , m_sEdit_ControlName(_T("")) , m_sEdit_ControlSN(_T("")) , m_sEdit_Door1Name(_T("")) , m_sEdit_Door2Name(_T("")) , m_sEdit_Door3Name(_T("")) , m_sEdit_Door4Name(_T("")) , m_sComb_Port(_T("")) , m_sEdit_IP(_T("")) , m_nEdit_Port(0) , m_nComb_WordMode(0) { memset( m_nDoorDelayTime,0,4*sizeof( int ) ); } CDlg_Controller::~CDlg_Controller() { } void CDlg_Controller::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_NAME, m_sEdit_ControlName); DDX_Text(pDX, IDC_EDIT_SN, m_sEdit_ControlSN); DDX_Text(pDX, IDC_EDIT_DOOR1NAME, m_sEdit_Door1Name); DDX_Text(pDX, IDC_EDIT_DOOR2NAME, m_sEdit_Door2Name); DDX_Text(pDX, IDC_EDIT_DOOR3NAME, m_sEdit_Door3Name); DDX_Text(pDX, IDC_EDIT_DOOR4NAME, m_sEdit_Door4Name); DDX_CBString(pDX, IDC_COMBO_COM, m_sComb_Port); DDX_Control(pDX, IDC_COMBO_COM, m_Comb_Port); DDX_Control(pDX, IDC_LIST_CONTROL, m_List_Controller); DDX_Control(pDX, IDC_BTN_ADD, m_Btn_Add); DDX_Control(pDX, IDC_BTN_SAVE, m_Btn_Modify); DDX_Control(pDX, IDC_BTN_DEl, m_Btn_Delete); DDX_Text(pDX, IDC_EDIT_IP, m_sEdit_IP); DDX_Text(pDX, IDC_EDIT_PORT, m_nEdit_Port); DDX_Control(pDX, IDC_COMBO_WORDMDOE, m_Comb_WordMode); DDX_CBIndex(pDX, IDC_COMBO_WORDMDOE, m_nComb_WordMode); DDX_Control(pDX, IDC_COMBO_DOORNUMBER, m_Comb_DoorNumber); } BEGIN_MESSAGE_MAP(CDlg_Controller, CDialog) ON_EN_CHANGE(IDC_EDIT_SN, OnEnChangeEditSn) ON_BN_CLICKED(IDC_BTN_ADD, OnBnClickedBtnAdd) ON_BN_CLICKED(IDC_BTN_SAVE, OnBnClickedBtnSave) ON_BN_CLICKED(IDC_BTN_DEl, OnBnClickedBtnDel) ON_NOTIFY(NM_CLICK, IDC_LIST_CONTROL, OnNMClickListControl) ON_WM_CTLCOLOR() ON_WM_ERASEBKGND() ON_CBN_SELCHANGE(IDC_COMBO_WORDMDOE, OnCbnSelchangeComboWordmdoe) ON_CBN_SELCHANGE(IDC_COMBO_DOORNUMBER, OnCbnSelchangeComboDoornumber) ON_WM_TIMER() ON_NOTIFY(NM_DBLCLK, IDC_LIST_CONTROL, OnNMDblclkListControl) END_MESSAGE_MAP() // CDlg_Controller 消息处理程序 BOOL CDlg_Controller::OnInitDialog() { CDialog::OnInitDialog(); // TODO: 在此添加额外的初始化 m_Comb_Port.SetCurSel( 0 ); m_Comb_WordMode.SetCurSel( 0 ); m_Comb_DoorNumber.SetCurSel( 0 ); GetDlgItem( IDC_STATIC2 )->ShowWindow( SW_HIDE ); GetDlgItem( IDC_EDIT_DOOR2NAME )->ShowWindow( SW_HIDE ); GetDlgItem( IDC_STATIC3 )->ShowWindow( SW_HIDE ); GetDlgItem( IDC_EDIT_DOOR3NAME )->ShowWindow( SW_HIDE ); GetDlgItem( IDC_STATIC4 )->ShowWindow( SW_HIDE ); GetDlgItem( IDC_EDIT_DOOR4NAME )->ShowWindow( SW_HIDE ); //m_List_Controller.InsertColumn( 0, "编号" ); //m_List_Controller.InsertColumn( 1, "名称" ); //m_List_Controller.InsertColumn( 2, "SN" ); //m_List_Controller.InsertColumn( 3, "信息" ); //m_List_Controller.SetColumnWidth( 0, 60 ); //m_List_Controller.SetColumnWidth( 1, 120); //m_List_Controller.SetColumnWidth( 2, 100); //m_List_Controller.SetColumnWidth( 3, 690); //m_List_Controller.SetExtendedStyle(m_List_Controller.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); InitList(); ReadController( &m_List_Controller ); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } int CDlg_Controller::InitList(void) { //m_List_Info.InsertColumn( 0, "执行时刻" ); //m_List_Info.InsertColumn( 1, "人员信息" ); //m_List_Info.InsertColumn( 2, "描述" ); //m_List_Info.InsertColumn( 3, "信息" ); //m_List_Info.SetColumnWidth( 0, 120 ); //m_List_Info.SetColumnWidth( 1, 200); //m_List_Info.SetColumnWidth( 2, 200); //m_List_Info.SetColumnWidth( 3, 650); //m_List_Info.SetExtendedStyle(m_List_Info.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); //m_List_Rule.SetColColor(0,RGB(10,150,20)); //设置列背景色 //m_List_Rule.SetColColor(2,RGB(30,100,90)); //设置列背景色 //m_List_Rule.SetBkColor(RGB(50,10,10)); //设置背景色 //m_List_Rule.SetItemColor(1,1,RGB(100,100,10)); //设置指定单元背景色 //m_List_Rule.SetRowHeigt(25); //设置行高度 //m_List_Rule.SetHeaderHeight(1.5); //设置头部高度 //m_List_Rule.SetHeaderFontHW(16,0); //设置头部字体高度,和宽度,0表示缺省,自适应 //m_List_Record.SetHeaderTextColor(RGB(0,0,0)); //设置头部字体颜色 //m_List_Rule.SetTextColor(RGB(0,255,255)); //设置文本颜色 m_List_Controller.SetHeaderBKColor(213,222,242,8); //设置头部背景色 ////m_List_Rule.SetFontHW(15,0); //设置字体高度,和宽度,0表示缺省宽度 //m_List_Rule.SetColTextColor(2,RGB(255,255,100)); //设置列文本颜色 //m_List_Rule.SetItemTextColor(3,1,RGB(255,0,0)); //设置单元格字体颜色 m_List_Controller.InsertColumn(0,g_strIndex,LVCFMT_LEFT,40); m_List_Controller.InsertColumn(1,g_strName,LVCFMT_LEFT,120); m_List_Controller.InsertColumn(2,"监控开关",LVCFMT_LEFT,65); m_List_Controller.InsertColumn(3,g_strInfomation,LVCFMT_LEFT,800); SetWindowLong(m_List_Controller.m_hWnd ,GWL_EXSTYLE,WS_EX_CLIENTEDGE); m_List_Controller.SetExtendedStyle(LVS_EX_GRIDLINES); //设置扩展风格为网格 ::SendMessage(m_List_Controller.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT); m_List_Controller.SetRowHeigt( 20 ); return 0; } void CDlg_Controller::SetPos( CRect rect ) { CRect rc1; rc1.left = 0; rc1.right = rc1.left+rect.Width(); rc1.top = 0; rc1.bottom = rc1.top+rect.Height()-4; this->MoveWindow( rc1 ); CRect rc2; rc2.left = rc1.left + 10; rc2.right = rc1.right - 10; rc2.top = 10; rc2.bottom = rc1.bottom - 40; m_List_Controller.MoveWindow( rc2 ); CRect rc17; rc17.right = rc2.right-20; rc17.left = rc17.right-120; rc17.top = rc2.bottom+5; rc17.bottom = rc1.bottom-5; m_Btn_Delete.MoveWindow( rc17 ); CRect rc18; rc18.right = rc17.left-5; rc18.left = rc18.right-120; rc18.top = rc2.bottom+5; rc18.bottom = rc1.bottom-5; m_Btn_Modify.MoveWindow( rc18 ); CRect rc19; rc19.right = rc18.left-5; rc19.left = rc19.right-120; rc19.top = rc2.bottom+5; rc19.bottom = rc1.bottom-5; m_Btn_Add.MoveWindow( rc19 ); } void CDlg_Controller::OnEnChangeEditSn() { // TODO: 如果该控件是 RICHEDIT 控件,则它将不会 // 发送该通知,除非重写 CDialog::OnInitDialog() // 函数并调用 CRichEditCtrl().SetEventMask(), // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO: 在此添加控件通知处理程序代码 //UpdateData(); //GetDlgItem( IDC_STATIC2 )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_EDIT_DOOR2NAME )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_STATIC3 )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_EDIT_DOOR3NAME )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_STATIC4 )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_EDIT_DOOR4NAME )->ShowWindow( SW_HIDE ); //if( m_sEdit_ControlSN.Left(1)=="1" ) //{ //} //else if( m_sEdit_ControlSN.Left(1)=="2" ) //{ // GetDlgItem( IDC_STATIC2 )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_EDIT_DOOR2NAME )->ShowWindow( SW_SHOW ); //} //else if( m_sEdit_ControlSN.Left(1)=="4" ) //{ // GetDlgItem( IDC_STATIC2 )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_EDIT_DOOR2NAME )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_STATIC3 )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_EDIT_DOOR3NAME )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_STATIC4 )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_EDIT_DOOR4NAME )->ShowWindow( SW_SHOW ); //} } void CDlg_Controller::OnBnClickedBtnAdd() { CString sTemp; CDlg_ControllerProperty dlg; dlg.m_nOperate = ADD; if( dlg.DoModal()==IDOK ) { CString sIndex; sIndex.Format("%d",dlg.m_Controller.nID ); m_List_Controller.InsertItem( 0,sIndex ); sTemp.Format(" %s",dlg.m_Controller.sName ); m_List_Controller.SetItemText( 0,1,sTemp ); sTemp.Format(" %s",dlg.m_Controller.bForbid==0?"启用":"禁用" ); m_List_Controller.SetItemText( 0,2,sTemp ); CString sWordMode; if( dlg.m_Controller.nWordMode==0 ) sWordMode.Format( "COM%d",dlg.m_Controller.nComPort ); else sWordMode.Format( "IP:%s,Port:%s",dlg.m_Controller.sIP,dlg.m_Controller.sPort ); if( dlg.m_Controller.nBrandType==0 ) sTemp.Format( " 微耕 【SN:%s】【%s】",dlg.m_Controller.sSN,sWordMode ); else if( dlg.m_Controller.nBrandType==1 ) sTemp.Format( " 中控 【SN:%s】【%s】",dlg.m_Controller.sSN,sWordMode ); m_List_Controller.SetItemText( 0,3,sTemp ); //m_List_Controller.SetItemText( 0,3,m_sComb_Port ); //m_List_Controller.SetItemText( 0,4,m_sEdit_Door1Name ); //m_List_Controller.SetItemText( 0,5,m_sEdit_Door2Name ); //m_List_Controller.SetItemText( 0,6,m_sEdit_Door3Name ); //m_List_Controller.SetItemText( 0,7,m_sEdit_Door4Name ); //CString s1,sInfo; //if( m_nComb_WordMode==0 ) // s1.Format("%s:485【%s:%s】 ",g_strConnectType,g_strConnectCom,m_sComb_Port ); //else // s1.Format("%s:TCP【IP:%s Port:%d】 ",g_strConnectType,m_sEdit_IP,m_nEdit_Port ); //if( nDoorCur==0 ) // sInfo.Format(" 【%s-%s-%s-3%s】",g_strDoor1,m_sEdit_Door1Name,g_strControl_Online,g_strSecond ); //else if( nDoorCur==1 ) // sInfo.Format(" 【%s-%s-%s-3%s】 【%s-%s-%s-3%s】", // g_strDoor1,m_sEdit_Door1Name,g_strControl_Online,g_strSecond, // g_strDoor2,m_sEdit_Door2Name,g_strControl_Online,g_strSecond ); //else if( nDoorCur==2 ) // sInfo.Format(" 【%s-%s-%s-3%s】 【%s-%s-%s-3%s】 【%s-%s-%s-3%s】 【%s-%s-%s-3%s】", // g_strDoor1,m_sEdit_Door1Name,g_strControl_Online,g_strSecond, // g_strDoor2,m_sEdit_Door2Name,g_strControl_Online,g_strSecond, // g_strDoor3,m_sEdit_Door3Name,g_strControl_Online,g_strSecond, // g_strDoor4,m_sEdit_Door4Name,g_strControl_Online,g_strSecond ); //sInfo = s1+sInfo; //m_List_Controller.SetItemText( 0,3,sInfo ); for( int i=0;im_pThread_Controller[i]==NULL ) { g_pDlgMain->m_pThread_Controller[i] = new CThread_Controller( g_Controller[i] ); g_pDlgMain->m_pThread_Controller[i]->StartThread(); } } break; } } //改变门的信息 SetCombDoor( &g_pDlgMain->m_pDlg_Record->m_Comb_Door ); ////改变权限界面的控制器 //g_pDlgMain->m_pDlg_Permit->InitTreeInfo(); } } void CDlg_Controller::OnBnClickedBtnSave() { int iListCount = m_List_Controller.GetItemCount(); POSITION pos = m_List_Controller.GetFirstSelectedItemPosition(); int nListSel = m_List_Controller.GetNextSelectedItem(pos); if(nListSel>=iListCount || nListSel==-1) { return; } CString sTemp = m_List_Controller.GetItemText( nListSel,0 ); CDlg_ControllerProperty dlg; dlg.m_nOperate = EDIT; dlg.m_Controller.nID = atoi(sTemp); if( dlg.DoModal()==IDOK ) { sTemp.Format(" %s",dlg.m_Controller.sName ); m_List_Controller.SetItemText( nListSel,1,sTemp ); sTemp.Format(" %s",dlg.m_Controller.bForbid==0?"启用":"禁用" ); m_List_Controller.SetItemText( nListSel,2,sTemp ); CString sWordMode; if( dlg.m_Controller.nWordMode==0 ) sWordMode.Format( "COM%d",dlg.m_Controller.nComPort ); else sWordMode.Format( "IP:%s,Port:%s",dlg.m_Controller.sIP,dlg.m_Controller.sPort ); if( dlg.m_Controller.nBrandType==0 ) sTemp.Format( " 微耕 【SN:%s】【%s】",dlg.m_Controller.sSN,sWordMode ); else if( dlg.m_Controller.nBrandType==1 ) sTemp.Format( " 中控 【SN:%s】【%s】",dlg.m_Controller.sSN,sWordMode ); m_List_Controller.SetItemText(nListSel,3,sTemp ); } else return; for( int i=0;im_pThread_Controller[i] ) { g_pDlgMain->m_pThread_Controller[i]->StopThread(); delete g_pDlgMain->m_pThread_Controller[i]; g_pDlgMain->m_pThread_Controller[i] = NULL; g_pDlgMain->m_pDlg_Moniter->DelDoorFromList( dlg.m_Controller.sName.Trim() ); g_pDlgMain->m_pDlg_Moniter->OnDoorSort(); } for( int n=1;n<9;n++ ) g_Controller[i].sDoorName[n] = dlg.m_Controller.sDoorName[n]; if( g_pDlgMain->m_pThread_Controller[i]==NULL && !g_Controller[i].bForbid ) { g_pDlgMain->m_pThread_Controller[i] = new CThread_Controller( g_Controller[i] ); g_pDlgMain->m_pThread_Controller[i]->StartThread(); } } else if( g_Controller[i].bForbid!=dlg.m_Controller.bForbid || g_Controller[i].nDoorCount!=dlg.m_Controller.nDoorCount ) { int nDelDoor = -1;//-1表示没删 0表示删除但没有添加 2表示已经添加 if( dlg.m_Controller.bForbid )//禁用的删除 { g_pDlgMain->m_pDlg_Moniter->DelDoorFromList( g_Controller[i].sName ); } else if( g_Controller[i].nDoorCount!=dlg.m_Controller.nDoorCount )//门的个数改变 { nDelDoor = 0; g_pDlgMain->m_pDlg_Moniter->DelDoorFromList( g_Controller[i].sName ); } if( g_pDlgMain->m_pThread_Controller[i] && !g_Controller[i].bForbid && !g_pDlgMain->m_pThread_Controller[i]->m_bExitFinish )//已经创建类,并且原来是启用的和在线的,暂停线程 { SuspendThread( g_pDlgMain->m_pThread_Controller[i]->m_Thread ); } g_Controller[i].nID = dlg.m_Controller.nID; g_Controller[i].sName = dlg.m_Controller.sName; g_Controller[i].nBrandType = dlg.m_Controller.nBrandType; g_Controller[i].sSN = dlg.m_Controller.sSN; g_Controller[i].nWordMode = dlg.m_Controller.nWordMode; g_Controller[i].nComPort = dlg.m_Controller.nComPort; g_Controller[i].sIP = dlg.m_Controller.sIP; g_Controller[i].sPort = dlg.m_Controller.sPort; g_Controller[i].bForbid = dlg.m_Controller.bForbid; g_Controller[i].nDoorCount = dlg.m_Controller.nDoorCount; for( int n=1;n<9;n++ ) g_Controller[i].sDoorName[n] = dlg.m_Controller.sDoorName[n]; if( g_pDlgMain->m_pThread_Controller[i] && !g_Controller[i].bForbid && !g_pDlgMain->m_pThread_Controller[i]->m_bExitFinish )//已经创建类,并且现在是启用的和在线的,启用线程 { nDelDoor = 2; g_pDlgMain->m_pDlg_Moniter->AddDoorToList( g_Controller[i].sName,2 ); ResumeThread( g_pDlgMain->m_pThread_Controller[i]->m_Thread ); } else if( g_pDlgMain->m_pThread_Controller[i]==NULL && !g_Controller[i].bForbid )//以前没有创建类,并且现在是启用的,创建类并创建线程 { g_pDlgMain->m_pThread_Controller[i] = new CThread_Controller( g_Controller[i] ); g_pDlgMain->m_pThread_Controller[i]->StartThread(); } else if( g_pDlgMain->m_pThread_Controller[i] && !g_Controller[i].bForbid )//以前创建类,但连接失败,并且现在是启用的,创建类并创建线程 { g_pDlgMain->m_pThread_Controller[i] = new CThread_Controller( g_Controller[i] ); g_pDlgMain->m_pThread_Controller[i]->StartThread(); } if( nDelDoor==0 ) { g_pDlgMain->m_pDlg_Moniter->AddDoorToList( g_Controller[i].sName,2 ); } } else { g_Controller[i].nID = dlg.m_Controller.nID; g_Controller[i].sName = dlg.m_Controller.sName; g_Controller[i].nBrandType = dlg.m_Controller.nBrandType; g_Controller[i].sSN = dlg.m_Controller.sSN; g_Controller[i].nWordMode = dlg.m_Controller.nWordMode; g_Controller[i].nComPort = dlg.m_Controller.nComPort; g_Controller[i].sIP = dlg.m_Controller.sIP; g_Controller[i].sPort = dlg.m_Controller.sPort; g_Controller[i].bForbid = dlg.m_Controller.bForbid; g_Controller[i].nDoorCount = dlg.m_Controller.nDoorCount; for( int n=1;n<9;n++ ) g_Controller[i].sDoorName[n] = dlg.m_Controller.sDoorName[n]; if( !g_Controller[i].bForbid ) g_pDlgMain->m_pThread_Controller[i]->SetController( g_Controller[i] ); } break; } } //改变门的信息 SetCombDoor( &g_pDlgMain->m_pDlg_Record->m_Comb_Door ); //改变权限界面的控制器 //g_pDlgMain->m_pDlg_Permit->InitTreeInfo(); } void CDlg_Controller::OnBnClickedBtnDel() { int iListCount = m_List_Controller.GetItemCount(); POSITION pos = m_List_Controller.GetFirstSelectedItemPosition(); int nListSel = m_List_Controller.GetNextSelectedItem(pos); if(nListSel>=iListCount || nListSel==-1) { MessageBox( g_strChooseThenDel, g_strTip, MB_ICONINFORMATION); return; } CString str,sControlName; str = m_List_Controller.GetItemText( nListSel,0 ); sControlName = m_List_Controller.GetItemText( nListSel,1 ); if( MessageBox( "确定要删除此控制器相关信息?", g_strTip, MB_YESNO|MB_ICONINFORMATION)!=IDYES ) return; if( DelItemFromTable( "t_door_control","id",atoi( str ) ) ) m_List_Controller.DeleteItem( nListSel ); g_pDlgMain->m_pDlg_Moniter->DelDoorFromList( sControlName.Trim() ); g_pDlgMain->m_pDlg_Moniter->OnDoorSort(); for( int i=0;im_pThread_Controller[i] ) { g_pDlgMain->m_pThread_Controller[i]->StopThread(); delete g_pDlgMain->m_pThread_Controller[i]; g_pDlgMain->m_pThread_Controller[i] = NULL; } g_Controller[i].nID = -1; break; } } //改变门的信息 SetCombDoor( &g_pDlgMain->m_pDlg_Record->m_Comb_Door ); //改变权限界面的控制器 //g_pDlgMain->m_pDlg_Permit->InitTreeInfo(); } void CDlg_Controller::OnNMClickListControl(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 int iListCount = m_List_Controller.GetItemCount(); POSITION pos = m_List_Controller.GetFirstSelectedItemPosition(); int nListSel = m_List_Controller.GetNextSelectedItem(pos); if(nListSel>=iListCount || nListSel==-1) { return; } //CString str; //str = m_List_Controller.GetItemText( nListSel,0 ); //int nDoorNum=0; // //ADOCtrl.ReadController( atoi(str),m_sEdit_ControlName,m_sEdit_ControlSN,m_nComb_WordMode,m_sEdit_IP,m_nEdit_Port,m_sComb_Port, // m_sEdit_Door1Name,m_sEdit_Door2Name,m_sEdit_Door3Name,m_sEdit_Door4Name, // m_nDoorDelayTime[0],m_nDoorDelayTime[1],m_nDoorDelayTime[2],m_nDoorDelayTime[3], // m_sDoorControlType[0],m_sDoorControlType[1],m_sDoorControlType[2],m_sDoorControlType[3],nDoorNum ); //UpdateData( false ); //m_Comb_DoorNumber.SetCurSel( nDoorNum ); //GetDlgItem( IDC_STATIC2 )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_EDIT_DOOR2NAME )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_STATIC3 )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_EDIT_DOOR3NAME )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_STATIC4 )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_EDIT_DOOR4NAME )->ShowWindow( SW_HIDE ); //if( nDoorNum==0 ) //{ //} //else if( nDoorNum==1 ) //{ // GetDlgItem( IDC_STATIC2 )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_EDIT_DOOR2NAME )->ShowWindow( SW_SHOW ); //} //else if( nDoorNum==2 ) //{ // GetDlgItem( IDC_STATIC2 )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_EDIT_DOOR2NAME )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_STATIC3 )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_EDIT_DOOR3NAME )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_STATIC4 )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_EDIT_DOOR4NAME )->ShowWindow( SW_SHOW ); //} //if( m_nComb_WordMode==1 ) //{ // GetDlgItem(IDC_STATIC_3)->ShowWindow( SW_HIDE ); // GetDlgItem(IDC_COMBO_COM)->ShowWindow( SW_HIDE ); // GetDlgItem(IDC_STATIC_6)->ShowWindow( SW_SHOW ); // GetDlgItem(IDC_EDIT_IP)->ShowWindow( SW_SHOW ); // GetDlgItem(IDC_STATIC_7)->ShowWindow( SW_SHOW ); // GetDlgItem(IDC_EDIT_PORT)->ShowWindow( SW_SHOW ); //} //else //{ // GetDlgItem(IDC_STATIC_3)->ShowWindow( SW_SHOW ); // GetDlgItem(IDC_COMBO_COM)->ShowWindow( SW_SHOW ); // GetDlgItem(IDC_STATIC_6)->ShowWindow( SW_HIDE ); // GetDlgItem(IDC_EDIT_IP)->ShowWindow( SW_HIDE ); // GetDlgItem(IDC_STATIC_7)->ShowWindow( SW_HIDE ); // GetDlgItem(IDC_EDIT_PORT)->ShowWindow( SW_HIDE ); //} *pResult = 0; } HBRUSH CDlg_Controller::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何属性 int nID = pWnd->GetDlgCtrlID(); //HBRUSH B1 = CreateSolidBrush( g_ColorGround ); HBRUSH B1 = CreateSolidBrush( g_Color3 ); if(nCtlColor == CTLCOLOR_STATIC) { // pOldFont = pDC->SelectObject(&m_font1); pDC->SetTextColor(RGB(0, 0, 0)); pDC->SetBkMode( TRANSPARENT ); //pDC->SelectObject(pOldFont); DeleteObject(B1); return B1; } //if( nID == IDC_STATIC_MSG) // { // pOldFont = pDC->SelectObject(&m_font3); // pDC->SetTextColor(RGB(0, 0, 255)); // pDC->SetBkMode( TRANSPARENT ); // //pDC->SelectObject(pOldFont); // return B1; // } DeleteObject(B1); // TODO: 如果默认的不是所需画笔,则返回另一个画笔 return hbr; } BOOL CDlg_Controller::OnEraseBkgnd(CDC* pDC) { CBrush br1; CRect rect; GetWindowRect(&rect); ScreenToClient(&rect); br1.CreateSolidBrush(g_Color3); pDC->FillRect(rect,&br1); DeleteObject( br1 ); return TRUE; //return CDialog::OnEraseBkgnd(pDC); } void CDlg_Controller::OnCbnSelchangeComboWordmdoe() { // TODO: 在此添加控件通知处理程序代码 UpdateData(); if( m_nComb_WordMode==1 ) { GetDlgItem(IDC_STATIC_3)->ShowWindow( SW_HIDE ); GetDlgItem(IDC_COMBO_COM)->ShowWindow( SW_HIDE ); GetDlgItem(IDC_STATIC_6)->ShowWindow( SW_SHOW ); GetDlgItem(IDC_EDIT_IP)->ShowWindow( SW_SHOW ); GetDlgItem(IDC_STATIC_7)->ShowWindow( SW_SHOW ); GetDlgItem(IDC_EDIT_PORT)->ShowWindow( SW_SHOW ); } else { GetDlgItem(IDC_STATIC_3)->ShowWindow( SW_SHOW ); GetDlgItem(IDC_COMBO_COM)->ShowWindow( SW_SHOW ); GetDlgItem(IDC_STATIC_6)->ShowWindow( SW_HIDE ); GetDlgItem(IDC_EDIT_IP)->ShowWindow( SW_HIDE ); GetDlgItem(IDC_STATIC_7)->ShowWindow( SW_HIDE ); GetDlgItem(IDC_EDIT_PORT)->ShowWindow( SW_HIDE ); } } void CDlg_Controller::OnCbnSelchangeComboDoornumber() { // TODO: 在此添加控件通知处理程序代码 //int nDoorCur = m_Comb_DoorNumber.GetCurSel(); //GetDlgItem( IDC_STATIC2 )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_EDIT_DOOR2NAME )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_STATIC3 )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_EDIT_DOOR3NAME )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_STATIC4 )->ShowWindow( SW_HIDE ); //GetDlgItem( IDC_EDIT_DOOR4NAME )->ShowWindow( SW_HIDE ); //switch( nDoorCur ) //{ //case 0://1 // { // m_sEdit_Door2Name = ""; // m_sEdit_Door3Name = ""; // m_sEdit_Door4Name = ""; // } // break; //case 1://2 // { // m_sEdit_Door3Name = ""; // m_sEdit_Door4Name = ""; // GetDlgItem( IDC_STATIC2 )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_EDIT_DOOR2NAME )->ShowWindow( SW_SHOW ); // } // break; //case 2://4 // { // GetDlgItem( IDC_STATIC2 )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_EDIT_DOOR2NAME )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_STATIC3 )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_EDIT_DOOR3NAME )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_STATIC4 )->ShowWindow( SW_SHOW ); // GetDlgItem( IDC_EDIT_DOOR4NAME )->ShowWindow( SW_SHOW ); // } // break; //} //UpdateData( false ); } void CDlg_Controller::OnTimer(UINT nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 //static bool f = false; //if( nIDEvent==1 ) //{ //} CDialog::OnTimer(nIDEvent); } void CDlg_Controller::OnNMDblclkListControl(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 int iListCount = m_List_Controller.GetItemCount(); POSITION pos = m_List_Controller.GetFirstSelectedItemPosition(); int nListSel = m_List_Controller.GetNextSelectedItem(pos); if(nListSel>=iListCount || nListSel==-1) { return; } CString sTemp = m_List_Controller.GetItemText( nListSel,0 ); CDlg_ControllerProperty dlg; dlg.m_nOperate = EDIT; dlg.m_Controller.nID = atoi(sTemp); if( dlg.DoModal()==IDOK ) { sTemp.Format(" %s",dlg.m_Controller.sName ); m_List_Controller.SetItemText( nListSel,1,sTemp ); sTemp.Format(" %s",dlg.m_Controller.bForbid==0?"启用":"禁用" ); m_List_Controller.SetItemText( nListSel,2,sTemp ); CString sWordMode; if( dlg.m_Controller.nWordMode==0 ) sWordMode.Format( "COM%d",dlg.m_Controller.nComPort ); else sWordMode.Format( "IP:%s,Port:%s",dlg.m_Controller.sIP,dlg.m_Controller.sPort ); if( dlg.m_Controller.nBrandType==0 ) sTemp.Format( " 微耕 【SN:%s】【%s】",dlg.m_Controller.sSN,sWordMode ); else if( dlg.m_Controller.nBrandType==1 ) sTemp.Format( " 中控 【SN:%s】【%s】",dlg.m_Controller.sSN,sWordMode ); m_List_Controller.SetItemText(nListSel,3,sTemp ); } else return; for( int i=0;im_pThread_Controller[i] ) { g_pDlgMain->m_pThread_Controller[i]->StopThread(); delete g_pDlgMain->m_pThread_Controller[i]; g_pDlgMain->m_pThread_Controller[i] = NULL; g_pDlgMain->m_pDlg_Moniter->DelDoorFromList( dlg.m_Controller.sName.Trim() ); g_pDlgMain->m_pDlg_Moniter->OnDoorSort(); } for( int n=1;n<9;n++ ) g_Controller[i].sDoorName[n] = dlg.m_Controller.sDoorName[n]; if( g_pDlgMain->m_pThread_Controller[i]==NULL && !g_Controller[i].bForbid ) { g_pDlgMain->m_pThread_Controller[i] = new CThread_Controller( g_Controller[i] ); g_pDlgMain->m_pThread_Controller[i]->StartThread(); } } else if( g_Controller[i].bForbid!=dlg.m_Controller.bForbid || g_Controller[i].nDoorCount!=dlg.m_Controller.nDoorCount ) { int nDelDoor = -1;//-1表示没删 0表示删除但没有添加 2表示已经添加 if( dlg.m_Controller.bForbid )//禁用的删除 { g_pDlgMain->m_pDlg_Moniter->DelDoorFromList( g_Controller[i].sName ); } else if( g_Controller[i].nDoorCount!=dlg.m_Controller.nDoorCount )//门的个数改变 { nDelDoor = 0; g_pDlgMain->m_pDlg_Moniter->DelDoorFromList( g_Controller[i].sName ); } if( g_pDlgMain->m_pThread_Controller[i] && !g_Controller[i].bForbid && !g_pDlgMain->m_pThread_Controller[i]->m_bExitFinish )//已经创建类,并且原来是启用的和在线的,暂停线程 { SuspendThread( g_pDlgMain->m_pThread_Controller[i]->m_Thread ); } g_Controller[i].nID = dlg.m_Controller.nID; g_Controller[i].sName = dlg.m_Controller.sName; g_Controller[i].nBrandType = dlg.m_Controller.nBrandType; g_Controller[i].sSN = dlg.m_Controller.sSN; g_Controller[i].nWordMode = dlg.m_Controller.nWordMode; g_Controller[i].nComPort = dlg.m_Controller.nComPort; g_Controller[i].sIP = dlg.m_Controller.sIP; g_Controller[i].sPort = dlg.m_Controller.sPort; g_Controller[i].bForbid = dlg.m_Controller.bForbid; g_Controller[i].nDoorCount = dlg.m_Controller.nDoorCount; for( int n=1;n<9;n++ ) g_Controller[i].sDoorName[n] = dlg.m_Controller.sDoorName[n]; if( g_pDlgMain->m_pThread_Controller[i] && !g_Controller[i].bForbid && !g_pDlgMain->m_pThread_Controller[i]->m_bExitFinish )//已经创建类,并且现在是启用的和在线的,启用线程 { nDelDoor = 2; g_pDlgMain->m_pDlg_Moniter->AddDoorToList( g_Controller[i].sName,2 ); g_pDlgMain->m_pThread_Controller[i]->SetController( g_Controller[i] ); ResumeThread( g_pDlgMain->m_pThread_Controller[i]->m_Thread ); } else if( g_pDlgMain->m_pThread_Controller[i]==NULL && !g_Controller[i].bForbid )//以前没有创建类,并且现在是启用的,创建类并创建线程 { g_pDlgMain->m_pThread_Controller[i] = new CThread_Controller( g_Controller[i] ); g_pDlgMain->m_pThread_Controller[i]->StartThread(); } else if( g_pDlgMain->m_pThread_Controller[i] && !g_Controller[i].bForbid )//以前创建类,但连接失败,并且现在是启用的,创建类并创建线程 { g_pDlgMain->m_pThread_Controller[i] = new CThread_Controller( g_Controller[i] ); g_pDlgMain->m_pThread_Controller[i]->StartThread(); } if( nDelDoor==0 ) { g_pDlgMain->m_pDlg_Moniter->AddDoorToList( g_Controller[i].sName,2 ); } } else { g_Controller[i].nID = dlg.m_Controller.nID; g_Controller[i].sName = dlg.m_Controller.sName; g_Controller[i].nBrandType = dlg.m_Controller.nBrandType; g_Controller[i].sSN = dlg.m_Controller.sSN; g_Controller[i].nWordMode = dlg.m_Controller.nWordMode; g_Controller[i].nComPort = dlg.m_Controller.nComPort; g_Controller[i].sIP = dlg.m_Controller.sIP; g_Controller[i].sPort = dlg.m_Controller.sPort; g_Controller[i].bForbid = dlg.m_Controller.bForbid; g_Controller[i].nDoorCount = dlg.m_Controller.nDoorCount; for( int n=1;n<9;n++ ) g_Controller[i].sDoorName[n] = dlg.m_Controller.sDoorName[n]; if( !g_Controller[i].bForbid ) g_pDlgMain->m_pThread_Controller[i]->SetController( g_Controller[i] ); } break; } } //改变门的信息 SetCombDoor( &g_pDlgMain->m_pDlg_Record->m_Comb_Door ); //改变权限界面的控制器 //g_pDlgMain->m_pDlg_Permit->InitTreeInfo(); *pResult = 0; } CString CDlg_Controller::GetDoorNameFromDoorInfo( CString sDoorInfo ) { CString sRet; int nPos1=0,nPos2=0; nPos2 = sDoorInfo.Find( "*",nPos1 ); sRet = sDoorInfo.Mid( nPos1,nPos2-nPos1); return sRet; } void CDlg_Controller::ReadController( CListCtrl *pListCtrl ) { int m=0; CHAR strSQLText[MAX_SQL_LENGTH + 1] = ""; list list1,list2,list3,list4,list5,list6,list7,list8,list9,list10; list list11,list12,list13,list14,list15,list16,list17,list18,list19,list20; list list21,list22,list23,list24,list25,list26,list27,list28,list29,list30; list::iterator it_list1,it_list2,it_list3,it_list4,it_list5,it_list6,it_list7,it_list8,it_list9,it_list10; list::iterator it_list11,it_list12,it_list13,it_list14,it_list15,it_list16,it_list17,it_list18,it_list19,it_list20; list::iterator it_list21,it_list22,it_list23,it_list24,it_list25,it_list26,it_list27,it_list28,it_list29,it_list30; if(!_stricmp(g_strDBType, "PGSQL")) { sprintf(strSQLText, "select id, nbrandtype, scontrolname,ssn,nwordmode,ncomport,sip,sport,nforbid,ndoorconut,sdoor1,sdoor2,sdoor3,sdoor4,sdoor5,sdoor6,sdoor7,sdoor8, "\ "intreserved1,intreserved2,intreserved3,intreserved4,intreserved5,intreserved6,strreserved1,strreserved2,strreserved3,strreserved4,strreserved5,strreserved6 "\ "from t_door_control order by id"); } else { sprintf(strSQLText, "select id, nbrandtype, scontrolname,ssn,nwordmode,ncomport,sip,sport,nforbid,ndoorconut,sdoor1,sdoor2,sdoor3,sdoor4,sdoor5,sdoor6,sdoor7,sdoor8, "\ "intreserved1,intreserved2,intreserved3,intreserved4,intreserved5,intreserved6,strreserved1,strreserved2,strreserved3,strreserved4,strreserved5,strreserved6 "\ "from t_door_control order by id"); } int nRet = GetFieldValueList30( strSQLText,list1,list2,list3,list4,list5,list6,list7,list8,list9,list10 ,list11,list12,list13,list14,list15,list16,list17,list18,list19,list20 ,list21,list22,list23,list24,list25,list26,list27,list28,list29,list30); if( 0 == list1.size() || 0 == list2.size() ) { return ; } if( nRet != -1 ) { int nIndex = 0; CString sID,sBrandType,sControlName,sSn,sWordMode,sComPort,sIP,sPort,sForbid,sDoorCount; CString sDoor1,sDoor2,sDoor3,sDoor4,sDoor5,sDoor6,sDoor7,sDoor8; CString sTemp; for( it_list1=list1.begin(),it_list2=list2.begin(),it_list3=list3.begin(), it_list4=list4.begin(),it_list5=list5.begin(),it_list6=list6.begin(), it_list7=list7.begin(),it_list8=list8.begin(),it_list9=list9.begin(), it_list10=list10.begin(),it_list11=list11.begin(),it_list12=list12.begin(), it_list13=list13.begin(),it_list14=list14.begin(),it_list15=list15.begin(), it_list16=list16.begin(),it_list17=list17.begin(),it_list18=list18.begin(); it_list1!=list1.end() && it_list2!=list2.end() && it_list3!=list3.end() && it_list4!=list4.end() && it_list5!=list5.end() && it_list6!=list6.end() && it_list7!=list7.end() && it_list8!=list8.end() && it_list9!=list9.end() && it_list10!=list10.end() && it_list11!=list11.end() && it_list12!=list12.end() && it_list13!=list13.end() && it_list14!=list14.end() && it_list15!=list15.end() && it_list16!=list16.end() && it_list17!=list17.end() && it_list18!=list18.end(); it_list1++,it_list2++,it_list3++, it_list4++,it_list5++,it_list6++, it_list7++,it_list8++,it_list9++, it_list10++,it_list11++,it_list12++, it_list13++,it_list14++,it_list15++, it_list16++,it_list17++,it_list18++ ) { sID = (*it_list1).c_str(); sBrandType = (*it_list2).c_str(); sControlName = (*it_list3).c_str(); sSn = (*it_list4).c_str(); sWordMode = (*it_list5).c_str(); sComPort = (*it_list6).c_str(); sIP = (*it_list7).c_str(); sPort = (*it_list8).c_str(); sForbid = (*it_list9).c_str(); sDoorCount = (*it_list10).c_str(); sDoor1 = (*it_list11).c_str(); sDoor2 = (*it_list12).c_str(); sDoor3 = (*it_list13).c_str(); sDoor4 = (*it_list14).c_str(); sDoor5 = (*it_list15).c_str(); sDoor6 = (*it_list16).c_str(); sDoor7 = (*it_list17).c_str(); sDoor8 = (*it_list18).c_str(); g_Controller[nIndex].nID = atoi( sID ); g_Controller[nIndex].nBrandType = atoi( sBrandType ); g_Controller[nIndex].sName = sControlName; g_Controller[nIndex].sSN = sSn; g_Controller[nIndex].nWordMode = atoi( sWordMode ); g_Controller[nIndex].nComPort = atoi( sComPort ); g_Controller[nIndex].sIP = sIP; g_Controller[nIndex].sPort = sPort; g_Controller[nIndex].bForbid = atoi( sForbid ); g_Controller[nIndex].nDoorCount = atoi( sDoorCount ); g_Controller[nIndex].sDoorName[1] = GetDoorNameFromDoorInfo( sDoor1 ); g_Controller[nIndex].sDoorName[2] = GetDoorNameFromDoorInfo( sDoor2 ); g_Controller[nIndex].sDoorName[3] = GetDoorNameFromDoorInfo( sDoor3 ); g_Controller[nIndex].sDoorName[4] = GetDoorNameFromDoorInfo( sDoor4 ); g_Controller[nIndex].sDoorName[5] = GetDoorNameFromDoorInfo( sDoor5 ); g_Controller[nIndex].sDoorName[6] = GetDoorNameFromDoorInfo( sDoor6 ); g_Controller[nIndex].sDoorName[7] = GetDoorNameFromDoorInfo( sDoor7 ); g_Controller[nIndex].sDoorName[8] = GetDoorNameFromDoorInfo( sDoor8 ); g_Controller[nIndex].sDoorAll[1] = sDoor1; g_Controller[nIndex].sDoorAll[2] = sDoor2; g_Controller[nIndex].sDoorAll[3] = sDoor3; g_Controller[nIndex].sDoorAll[4] = sDoor4; g_Controller[nIndex].sDoorAll[5] = sDoor5; g_Controller[nIndex].sDoorAll[6] = sDoor6; g_Controller[nIndex].sDoorAll[7] = sDoor7; g_Controller[nIndex].sDoorAll[8] = sDoor8; int n=0; pListCtrl->InsertItem( n,sID ); pListCtrl->SetItemText( n,1," "+sControlName ); sTemp.Format( " %s",sForbid=="0"?"启用":"禁用" ); pListCtrl->SetItemText( n,2,sTemp ); CString sWordMode; if( g_Controller[nIndex].nWordMode==0 ) sWordMode.Format( "COM%d",g_Controller[nIndex].nComPort ); else sWordMode.Format( "IP:%s,Port:%s",g_Controller[nIndex].sIP,g_Controller[nIndex].sPort ); if( g_Controller[nIndex].nBrandType==0 ) sTemp.Format( " 微耕 【SN:%s】【%s】",g_Controller[nIndex].sSN,sWordMode ); else if( g_Controller[nIndex].nBrandType==1 ) sTemp.Format( " 中控 【SN:%s】【%s】",g_Controller[nIndex].sSN,sWordMode ); pListCtrl->SetItemText(n,3,sTemp ); nIndex++; } } for( it_list1=list1.begin(),it_list2=list2.begin(),it_list3=list3.begin(),it_list4=list4.begin(),it_list5=list5.begin(),it_list6=list6.begin(), it_list7=list7.begin(),it_list8=list8.begin(),it_list9=list9.begin(),it_list10=list10.begin(),it_list11=list11.begin(),it_list12=list12.begin(), it_list13=list13.begin(),it_list14=list14.begin(),it_list15=list15.begin(),it_list16=list16.begin(),it_list17=list17.begin(),it_list18=list18.begin(), it_list19=list19.begin(),it_list20=list20.begin(),it_list21=list21.begin(),it_list22=list22.begin(),it_list23=list23.begin(),it_list24=list24.begin(), it_list25=list25.begin(),it_list26=list26.begin(),it_list27=list27.begin(),it_list28=list28.begin(),it_list29=list29.begin(),it_list30=list30.begin(); it_list1!=list1.end(),it_list2!=list2.end(),it_list3!=list3.end(),it_list4!=list4.end(),it_list5!=list5.end(),it_list6!=list6.end(), it_list7!=list7.end(),it_list8!=list8.end(),it_list9!=list9.end(),it_list10!=list10.end(),it_list11!=list11.end(),it_list12!=list12.end(), it_list13!=list13.end(),it_list14!=list14.end(),it_list15!=list15.end(),it_list16!=list16.end(),it_list17!=list17.end(),it_list18!=list18.end(), it_list19!=list19.end(),it_list20!=list20.end(),it_list21!=list21.end(),it_list22!=list22.end(),it_list23!=list23.end(),it_list24!=list24.end(), it_list25!=list25.end(),it_list26!=list26.end(),it_list27!=list27.end(),it_list28!=list28.end(),it_list29!=list29.end(),it_list30!=list30.end();) { list1.erase(it_list1++); list2.erase(it_list2++); list3.erase(it_list3++); list4.erase(it_list4++); list5.erase(it_list5++); list6.erase(it_list6++); list7.erase(it_list7++); list8.erase(it_list8++); list9.erase(it_list9++); list10.erase(it_list10++); list11.erase(it_list11++); list12.erase(it_list12++); list13.erase(it_list13++); list14.erase(it_list14++); list15.erase(it_list15++); list16.erase(it_list16++); list17.erase(it_list17++); list18.erase(it_list18++); list19.erase(it_list19++); list20.erase(it_list20++); list21.erase(it_list21++); list22.erase(it_list22++); list23.erase(it_list23++); list24.erase(it_list24++); list25.erase(it_list25++); list26.erase(it_list26++); list27.erase(it_list27++); list28.erase(it_list28++); list29.erase(it_list29++); list30.erase(it_list30++); } }