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

📄 frmmain.cpp

📁 AutoNetFidelio酒店管理系统增加智能门锁进行入住发卡及退房收卡。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	}
	else if(StrData.Find("KR")>=0)
	{
		KRCard();	//发钥匙卡
	}
	else if(StrData.Find("KD")>=0)
	{
		KDCard();  //删除钥匙卡
	}
	else if(StrData.Find("LE")>=0)
	{
		IsStop=true;//服务器要求暂停
	}
	else if(StrData.Find("LA")>=0)
	{
		CheckRunStat();//检查是否全面运行状态
	}
}

//建立网络连接
BOOL  CFrmMain::SetUpConnect()
{
	UpdateData(TRUE);
	m_SocketAddr.sin_addr.s_addr=inet_addr(m_FidelioIP);
	m_SocketAddr.sin_family=AF_INET;
	if (m_HostIPAddress==m_FidelioIP)
	{   //服务器IP地址和本机IP地址相同
		m_SocketAddr.sin_port=m_ServPort;//服务器端口m_ServPort
	}
	else
	{   //服务器IP地址和本机IP地址不同
		m_SocketAddr.sin_port=htons(m_ServPort);//服务器端口m_ServPort
	}

	IsLink=true;
	//启动线程
	m_pThread=AfxBeginThread(ThreadFunc,0);	

	return TRUE;
}

//断开网络连接
BOOL CFrmMain::DisConnect()
{
	if (IsLink)
	{
		HANDLE hThread=m_pThread->m_hThread;
		IsLink=false;//关闭线程,断开连接
		//结束线程
		::WaitForSingleObject(hThread,5000);
	}

	return TRUE;
}

//通过网络发送数据
BOOL   __fastcall CFrmMain::SendData(CString StrData)
{
	CString szSendData=StrData;

	CString szBegain;//贞头
	CString szEnd;   //贞尾	

	szBegain.Format("%c",0x02);
	szEnd.Format("%c",0x03);

	szSendData=szBegain+szSendData;
	szSendData=szSendData+szEnd;

	send(m_Socket,szSendData,szSendData.GetLength()+1,0);

	::Sleep(100);
	return TRUE;
}

BOOL CFrmMain::IPStrToByteArry(CString str)
{
	int i=0;
	int j,z=0;
	char  SubArry[3];
	int f=str.GetLength();
	while (i<str.GetLength())
	{
		j=0;
		memset(SubArry, 0,sizeof(SubArry));
		while ((i<f)&&(str[i]!='.'))
		{
			SubArry[j]=str[i];
			i++;
			j++;
		}
		m_nField[z++]=(BYTE)atoi(SubArry);
		i++;
	}
	
	return TRUE;
}

CString  CFrmMain::ByteArryToIPStr(BYTE ByteArry[4])
{
	CString IPstr="";
	
	TCHAR  buffer[10]="\0";
	//进行IP地址转化
	IPstr = _itoa(ByteArry[0],buffer,10);
	IPstr += _T('.');
	IPstr += _itoa(ByteArry[1],buffer,10);
	IPstr += _T('.');
	IPstr += _itoa(ByteArry[2],buffer,10);
	IPstr += _T('.');
	IPstr += _itoa(ByteArry[3],buffer,10);
	
	return IPstr;
}

LPBYTE CFrmMain::CString_To_LPBYTE(CString str)
{
	LPBYTE lpb=new BYTE[str.GetLength()+1];

	for(int i=0;i<str.GetLength();i++)
		lpb[i]=str[i];
	lpb[str.GetLength()]=0;
	
	return lpb;
}

int  CFrmMain::StringToInt(CString String)
{
	int Strlen=String.GetLength();
	int iResult=0;

	for (int i=0;i<Strlen;i++)
	{
		int iRadix=1;
		for (int j=0;j<Strlen-i-1;j++)
		{
			iRadix=iRadix*10;
		}
		
		iResult+=(ChToShort(String[i]))*iRadix;
	}

	return iResult;
}

UINT  ThreadFunc(LPVOID pParam)
{
	int s=1;
	char pBuff[1000];
	CFrmMain *pSocketPort=(CFrmMain*) AfxGetApp()->GetMainWnd();

	while (pSocketPort&&pSocketPort->IsLink)
	{
		//创建socket
		pSocketPort->m_Socket=socket(AF_INET,SOCK_STREAM,0);
		s=1;

		while(connect(pSocketPort->m_Socket,(sockaddr*)(&pSocketPort->m_SocketAddr),sizeof(pSocketPort->m_SocketAddr)))
		{
		}
		//服务器连接成功,循环获得数据
		
		while((s!=SOCKET_ERROR)&&(s!=0)&&(pSocketPort->IsLink))
		{
			memset(pBuff, 0,sizeof(pBuff));
			//调用recv函数接收数据
			s=recv(pSocketPort->m_Socket,pBuff,sizeof(pBuff),0);

			if((s==0) | (s== SOCKET_ERROR))
			break;

			CString ReceiveData;
			ReceiveData.Format("%s",pBuff);
			//分析接收到的数据
			pSocketPort->AnalyseRecData(ReceiveData);
		}

		closesocket(pSocketPort->m_Socket);
	}
	
	return 0;
}

void CFrmMain::OnOsCheck() 
{
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",NULL,KEY_ALL_ACCESS,&m_hKey)!=ERROR_SUCCESS)
	{
		AfxMessageBox(Translate(m_InfoFilePath,"打开注册表项失败!"),MB_OK|MB_ICONINFORMATION);
		return;	 
	}
	if (IsDlgButtonChecked(IDC_OS_CHECK))
	{
		LPBYTE lpRegistPath=CString_To_LPBYTE(m_RegistPath);
		::RegSetValueEx(m_hKey,"HsyFdLServer",NULL,REG_SZ,lpRegistPath,100);
	}
	else
	{
		::RegDeleteValue(m_hKey,"HsyFdLServer");
	}
	RegCloseKey(m_hKey);
}

void CFrmMain::OnClose() 
{
	if (m_bShutdown)
	{
		if(IsLink)
		{
			//发送结束命令
			//CStop();
			if (m_pThread)
			{
				HANDLE hThread=m_pThread->m_hThread;
				//断开网络连接,结束线程
				IsLink = false;
				//结束线程
				::WaitForSingleObject(hThread,5000);
			}		
		}
		
		//关闭串口端口
		typedef short  (__stdcall *pMakeCardClosePort)(short);
		pMakeCardClosePort pFuncMakeCardClosePort= (pMakeCardClosePort)GetProcAddress (hInstCard,"MakeCardClosePort");
		pFuncMakeCardClosePort(Port);

		CDialog::OnClose();
	}
	else
	{
		ShowWindow(SW_HIDE);
	}
}

//系统主动跟服务器申请暂停
void CFrmMain::OnStop() 
{
	CStop(); //给服务器发送暂停命令暂停
}

//系统主动跟服务器申请重新连接
void CFrmMain::OnLinkagain() 
{
	CString  Str;
	CString TimeStr,DateStr;
	CTime tCurrentTime;
	tCurrentTime=CTime::GetCurrentTime();
    DateStr=tCurrentTime.Format("%y%m%d");
	TimeStr=tCurrentTime.Format("%H%M%S");
	
	Str="";
	Str="LS|DA"+DateStr+"|";
	Str+="TI"+ TimeStr+ "|";
	if(SendData(Str))//发送重新启动命令
	return;
}

//托盘程序消息处理函数
LRESULT CFrmMain::OnTrayNotification(WPARAM uID, LPARAM lEvent)
{
	if (m_bShowTrayNotifications) {
		static LPCSTR MouseMessages[] = { "WM_MOUSEMOVE",
			"WM_LBUTTONDOWN", "WM_LBUTTONUP", "WM_LBUTTONDBLCLK",
			"WM_RBUTTONDOWN", "WM_RBUTTONUP", "WM_RBUTTONDBLCLK",
			"WM_MBUTTONDOWN", "WM_MBUTTONUP", "WM_MBUTTONDBLCLK" };

		CString s;
		s.Format("托盘通知消息: ID=%d, lEvent=0x%04x %s\r\n", 
			uID, lEvent, WM_MOUSEFIRST<=lEvent && lEvent<=WM_MOUSELAST ? 
			MouseMessages[lEvent-WM_MOUSEFIRST] : "(未知消息)");

		m_wndEdit.SetSel(-1, -1);		
		m_wndEdit.ReplaceSel(s);	
		m_wndEdit.SendMessage(EM_SCROLLCARET);
	}

	return 0;
}

void CFrmMain::OnTrayExit() 
{
	m_bShutdown = TRUE;	
	SendMessage(WM_CLOSE);
}

void CFrmMain::OnShowAutoNetFdl() 
{
	ShowWindow(SW_NORMAL);	
	SetForegroundWindow();
}

void CFrmMain::OnSysCommand(UINT nID, LPARAM lParam)
{
	// 屏蔽最大化(MFC Bug),将最小化重定向至隐藏窗口
	if (nID == SC_MAXIMIZE)
		return;
	if (nID == SC_MINIMIZE)
		ShowWindow(SW_HIDE);
	else
		CWnd::OnSysCommand(nID, lParam);
}

void CFrmMain::OnSelchangeDoortypeCombo() 
{
	IsEdit=true;
}

void CFrmMain::OnSelchangePortCombo() 
{
	IsEdit=true;
}

void CFrmMain::OnKillfocusServportEdit() 
{
	UpdateData(TRUE);
	//读取Fidelio服务器端口
	int iIniServPort=GetPrivateProfileInt("IsIni","FidelioPort",5000,ConfigureFile);
	if (iIniServPort!=m_ServPort)
		IsEdit=true;
}

BOOL CFrmMain::IsIPAddressChanged()
{
	CString szIniFidelioIP;
	//保存设置
	((CIPAddressCtrl *)GetDlgItem(IDC_ADDR_COMBO))->GetAddress(m_nField[0],m_nField[1],m_nField[2],m_nField[3]);
	szIniFidelioIP=ByteArryToIPStr(m_nField);
	if(m_FidelioIP!=szIniFidelioIP)
	{
		IsEdit=true;
		return TRUE;
	}
	return FALSE;
}

void   CFrmMain::OnThreadExcute()
{
	SetUpConnect();
}

//调用系统使用帮助
void CFrmMain::OnHelp() 
{
	
}

//取得本机IP地址
void CFrmMain::GetHostIPAddress() 
{
	char szHostName[256];
	int  nRetCode;
	CString sHostName;
	nRetCode = gethostname(szHostName, sizeof(szHostName));

	if (nRetCode != 0) 
	{
		// An error has occurred
		sHostName = _T("");;
	}
	struct hostent FAR *lpHostEnt = gethostbyname (sHostName);
	if (lpHostEnt == NULL) 
	{
		m_HostIPAddress = _T("");
	}
	
	LPSTR lpAddr = lpHostEnt->h_addr_list[0];
	if (lpAddr) {
		struct in_addr  inAddr;
		memmove (&inAddr, lpAddr, 4);
		m_HostIPAddress = inet_ntoa (inAddr);
		if (m_HostIPAddress.IsEmpty())
			m_HostIPAddress = _T("");
	}			
}

void CFrmMain::OnOsCheck2() 
{
	UpdateData();
	if(!m_IsTongxing)
		m_RefCount=0;
}

⌨️ 快捷键说明

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