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

📄 querydecstate.cpp

📁 实时监控
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// QueryDecState.cpp : implementation file
//

#include "stdafx.h"
#include "../resource.h"
#include "../utils/common.h"
#include "UserChangeI.h"
#include "fileoperation.h"
#include "QueryDecState.h"

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_DYNCREATE(CQueryDecState, CPropertyPage)
IMPLEMENT_DYNCREATE(CUpdateDecFile, CPropertyPage)


/////////////////////////////////////////////////////////////////////////////
// CQueryDecState property page
CQueryDecState* CQueryDecState::sel = NULL;
CQueryDecState* CQueryDecState::the_one() { return sel;}

extern CString m_login_client_name;
extern char m_remote_station_directory[50];
extern char m_inspect_date_query_directory[50];


CQueryDecState::CQueryDecState() : CPropertyPage(CQueryDecState::IDD)
{
	//{{AFX_DATA_INIT(CQueryDecState)
		// NOTE: the ClassWizard will add member initialization here
	Oninitdata();
	//}}AFX_DATA_INIT
	sel = this;
}

CQueryDecState::~CQueryDecState()
{
}

void CQueryDecState::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CQueryDecState)
	DDX_Control(pDX, IDC_TREE, m_tree);
	DDX_Text(pDX, IDC_SWITCH4, m_switch4);
	DDX_Text(pDX, IDC_SWITCH2, m_switch2);
	DDX_Text(pDX, IDC_SWITCH3, m_switch3);
	DDX_Text(pDX, IDC_SWITCH1, m_switch1);

	DDX_Text(pDX, IDC_NAME1_SHOW, m_name_show1);
	DDX_Text(pDX, IDC_NAME3_SHOW, m_name_show3);
	DDX_Text(pDX, IDC_NAME2_SHOW, m_name_show2);
	DDX_Text(pDX, IDC_NAME4_SHOW, m_name_show4);

	DDX_Text(pDX, IDC_NAME1_VALUE, m_name_value1);
	DDX_Text(pDX, IDC_NAME2_VALUE, m_name_value2);
	DDX_Text(pDX, IDC_NAME3_VALUE, m_name_value3);
	DDX_Text(pDX, IDC_NAME4_VALUE, m_name_value4);

	DDX_Text(pDX, IDC_SWITCH_NAME1, m_switch_name1);
	DDX_Text(pDX, IDC_SWITCH_NAME2, m_switch_name2);
	DDX_Text(pDX, IDC_SWITCH_NAME3, m_switch_name3);
	DDX_Text(pDX, IDC_SWITCH_NAME4, m_switch_name4);

	DDX_Text(pDX, IDC_TEMPERATURE, m_temperature);
	DDX_Text(pDX, IDC_HUMIDITY, m_humidity);
	DDX_Text(pDX, IDC_STATION_STATE, m_station_state);
	
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CQueryDecState, CPropertyPage)
	//{{AFX_MSG_MAP(CQueryDecState)
		// NOTE: the ClassWizard will add message map macros here
		ON_BN_CLICKED(ID_QUERY, OnQuery)
		ON_NOTIFY(NM_DBLCLK, IDC_TREE, OnDblclkTree)
	//}}AFX_MSG_MAP
		ON_MESSAGE(NTM_ZH_DECSTATE_GET_OK, get_decstate)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CQueryDecState::Oninitdata()
{
	m_temperature = _T("");
	m_humidity = _T("");
	
	m_switch1 = _T("");
	m_switch2 = _T("");
	m_switch3 = _T("");
	m_switch4 = _T("");
	
	m_name_value1 = _T("");
	m_name_value2 = _T("");
	m_name_value3 = _T("");
	m_name_value4 = _T("");

	CString m_str;
    m_str.Format(IDS_DIRECT_CURRENT_VALUE, 1);
	m_name_show1 = m_str;
	m_str.Format(IDS_DIRECT_CURRENT_VALUE, 2);
	m_name_show2 = m_str;
	m_str.Format(IDS_DIRECT_CURRENT_VALUE, 3);
	m_name_show3 = m_str;
	m_str.Format(IDS_DIRECT_CURRENT_VALUE, 4);
	m_name_show4 = m_str;

	m_str.Format(IDS_SWITCH_VALUE, 1);
	m_switch_name1 = m_str;
	m_str.Format(IDS_SWITCH_VALUE, 2);
	m_switch_name2 = m_str;
	m_str.Format(IDS_SWITCH_VALUE, 3);
	m_switch_name3 = m_str;
	m_str.Format(IDS_SWITCH_VALUE, 4);
	m_switch_name4 = m_str;
    
    m_str.Format(IDS_STATION_DECODE_STATE, "","", 0);
	m_station_state = m_str;
}

BOOL CQueryDecState::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CQueryDecState::OnDblclkTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	OnQuery() ;
	*pResult = 0;
}

BOOL CQueryDecState::OnSetActive() 
{
	on_list();
	return CPropertyPage::OnSetActive();
}

void CQueryDecState::on_list()
{
	if(m_tree.GetCount())
		m_tree.DeleteAllItems();
    Cfileoperation <inspect_date_query> *m_fileoperation;
    m_file_length = m_fileoperation->openfile(m_inspect_date_query_directory,"rb",m_station_data);

	HTREEITEM  htreem;

	for(int i=0; i<m_file_length; i++)
	{
		inspect_date_query *pk = &m_station_data[i];
		if(!strcmp(pk->name, m_login_client_name))
		{
			if(i ==0)
			{
				htreem = m_tree.InsertItem(pk->dvrname);
				m_tree.InsertItem(pk->decodename, htreem);
				continue;
			}

			inspect_date_query *p = &m_station_data[i-1];
			if(!strcmp(p->dvrname, pk->dvrname) && !strcmp(p->name, pk->name))
				m_tree.InsertItem(pk->decodename, htreem);
			else
			{
				htreem = m_tree.InsertItem(pk->dvrname);
				m_tree.InsertItem(pk->decodename, htreem);
			}
		}
	}

}

int CQueryDecState::get_sel_address(CString m_station, CString m_decname)
{
	for(int i=0; i<m_file_length; i++)
	{
		inspect_date_query *p = &m_station_data[i];
		if(!strcmp(p->name, m_login_client_name))
			if(!strcmp(p->dvrname, m_station) && !strcmp(p->decodename, m_decname))
				return p->address;
	}
	return -1;
}

BOOL CQueryDecState::Onget_query_info(CString & m_station, CString & m_decname, int & address)
{
	HTREEITEM  htree = m_tree.GetSelectedItem();
	if(!htree)	return FALSE;
	m_decname = m_tree.GetItemText(htree);
	htree = m_tree.GetParentItem(htree);
	if(!htree)	return FALSE;
	m_station = m_tree.GetItemText(htree);
	address = get_sel_address(m_station, m_decname);
	if(address == -1) return FALSE;
	return TRUE;
}

void CQueryDecState::OnQuery() 
{
	Oninitdata();
	UpdateData(FALSE);
	int m_address;
	CString m_station, m_decname;
	if(!Onget_query_info(m_station, m_decname, m_address))
		return ;

	bool m_status = get_station_state(m_station, m_address);
	if(!m_status)  AfxMessageBox(IDS_NOT_LOGIN_STATION);

	CString m_str;
	m_str.Format(IDS_STATION_DECODE_STATE, m_station, m_decname, m_address);
	m_station_state = m_str;
	UpdateData(FALSE);
}

void CQueryDecState::get_decstate(WPARAM w, LPARAM l)
{
	ZH_DECODE_STATE *p = (ZH_DECODE_STATE *)w;
	CString m_str = *(CString*) l;

	int m_address;
	CString m_station, m_decname;
	if(!Onget_query_info(m_station, m_decname, m_address))
		return ;
	if(m_str != m_station || m_address != p->address)
		return;

    update_th_value(p->sign1, p->temperature, p->humidity);
	update_all_value(m_station, m_decname, m_address, p->switch1, p->direct_value1, p->direct_value2, p->direct_value3, p->direct_value4);
}
void CQueryDecState::update_th_value(int sign, float m_temperature_sh, float m_humidity_sh)
{
	CString m_str;
	float m_temperature_value,m_humidity_value;
	if(sign == 0x32)
		 m_temperature_value = m_temperature_sh/100; 
    else 
		m_temperature_value = - (m_temperature_sh/100);
    m_str.Format("%.2f ℃", m_temperature_value);
    m_temperature = m_str;

	m_humidity_value = m_humidity_sh/100;
    m_str.Format("%.2f %%", m_humidity_value);
    m_humidity = m_str;
	UpdateData(FALSE);
}

void CQueryDecState::update_all_value(CString m_station, CString m_decname, int m_address, int state, USHORT m_value1, USHORT m_value2, USHORT m_value3, USHORT m_value4)
{
	for(int i=0; i<m_file_length; i++)
	{
		inspect_date_query *p = &m_station_data[i];
		if(!strcmp(p->dvrname, m_station) && !strcmp(p->name, m_login_client_name))
		if(!strcmp(p->decodename, m_decname) && (p->address == m_address))
		{
			update_switch_value(state, p->m_switch);
			update_direct_all_value(p->m_value, m_value1, m_value2, m_value3, m_value4);
			break;
		}
	}	
	UpdateData(FALSE);
}

void CQueryDecState::update_switch_value(int state, switch_value value[]) 
{
	BOOL m_bool;
	int m_temstate = state;
    m_bool = m_temstate & 1;
	m_switch1 = get_switch_value(m_bool, value[0].m_switch_type);

	m_temstate = state;
	m_bool = (m_temstate >> 1) & 1;
	m_switch2 = get_switch_value(m_bool, value[1].m_switch_type);

	m_temstate = state;
	m_bool = (m_temstate >> 2) & 1;
	m_switch3 = get_switch_value(m_bool, value[2].m_switch_type);

	m_temstate = state;
	m_bool = (m_temstate >> 3) & 1;
	m_switch4 = get_switch_value(m_bool, value[3].m_switch_type);

	m_switch_name1 = value[0].m_switch_name;
	m_switch_name2 = value[1].m_switch_name;
	m_switch_name3 = value[2].m_switch_name;
	m_switch_name4 = value[3].m_switch_name;
	UpdateData(FALSE);
}

CString CQueryDecState::get_switch_value(BOOL m_bool, int type)
{
	CString m_str;
	switch(type)
	{
		case 0:
			if(!m_bool) m_str.Format(IDS_SWITCH_OPENED);
			else m_str.Format(IDS_SWITCH_CLOSED);
			break;
		case 1:
			if(!m_bool) m_str.Format(IDS_SWITCH_CONNECTED);
			else m_str.Format(IDS_SWITCH_DISCONNECTED);
			break;
		case 2:
			if(!m_bool) m_str.Format(IDS_SWITCH_TOGETHERED);
			else m_str.Format(IDS_SWITCH_DISPARTED);
			break;
		case 3:
			if(!m_bool) m_str.Format(IDS_SWITCH_ACTED);
			else m_str.Format(IDS_SWITCH_REVERTED);
			break;
		default:
			break;
	}
	return m_str;
}


void CQueryDecState::update_direct_all_value(direct_current_value value[], USHORT m_value1, USHORT m_value2, USHORT m_value3, USHORT m_value4) 
{
	m_name_show1 = value[0].m_name;
	m_name_show2 = value[1].m_name;
	m_name_show3 = value[2].m_name;
	m_name_show4 = value[3].m_name;

	m_name_value1 = update_direct_value(m_value1, &value[0]) ;
	m_name_value2 = update_direct_value(m_value2, &value[1]) ;
	m_name_value3 = update_direct_value(m_value3, &value[2]) ;
	m_name_value4 = update_direct_value(m_value4, &value[3]) ;	
}

CString CQueryDecState::update_direct_value(USHORT m_value, direct_current_value *p) 
{
	CString m_str;
    float m_true_value;
    m_true_value = (m_value - p->m_zero_value) * p->quotiwty;
    m_str.Format(" %.2f %s", m_true_value, p->m_unit);
	return m_str;
}
			



/////////////////////////////////////////////////////////////////////////////








CUpdateDecFile::CUpdateDecFile() : CPropertyPage(CUpdateDecFile::IDD)
{
	//{{AFX_DATA_INIT(CUpdateDecFile)
	On_initidata();
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}

CUpdateDecFile::~CUpdateDecFile()
{
}

void CUpdateDecFile::On_initidata()
{
	m_zero_value1 = 0;
	m_zero_value2 = 0;
	m_zero_value3 = 0;
	m_zero_value4 = 0;

	m_nuit_str1 = _T("");
	m_nuit_str2 = _T("");
	m_nuit_str3 = _T("");
	m_nuit_str4 = _T("");

	m_quotiwty1 = 0.0f;
	m_quotiwty2 = 0.0f;
	m_quotiwty3 = 0.0f;
	m_quotiwty4 = 0.0f;

	m_name1 = _T("");
	m_name2 = _T("");
	m_name3 = _T("");
	m_name4 = _T("");
	
	m_switch_name1 = _T("");
	m_switch_name2 = _T("");
	m_switch_name3 = _T("");
	m_switch_name4 = _T("");
    m_comname = _T("");
	m_dec_add = _T("");
	m_dec_name = _T("");
	
	m_switch_type1 = 0;
	m_switch_type2 = 0;
	m_switch_type3 = 0;
	m_switch_type4 = 0;

	CString m_str;
	m_str.Format(IDS_STATION_DECODE_SET, "","");
	m_statoin_param = m_str;
}
void CUpdateDecFile::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUpdateDecFile)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	DDX_Text(pDX, IDC_STATION_PARA_SET, m_statoin_param);
	DDX_Text(pDX, IDC_DECODE_NAME, m_dec_name);
	DDX_Text(pDX, IDC_DECODE_ADD, m_dec_add);

    DDX_Text(pDX, IDC_TEM_STATION, m_comname);
	DDX_Text(pDX, IDC_ZERO_VALUE1, m_zero_value1);
	DDV_MinMaxInt(pDX, m_zero_value1, 0, 4095);
	DDX_Text(pDX, IDC_ZERO_VALUE2, m_zero_value2);
	DDV_MinMaxInt(pDX, m_zero_value2, 0, 4095);
	DDX_Text(pDX, IDC_ZERO_VALUE3, m_zero_value3);
	DDV_MinMaxInt(pDX, m_zero_value3, 0, 4095);
	DDX_Text(pDX, IDC_ZERO_VALUE4, m_zero_value4);
	DDV_MinMaxInt(pDX, m_zero_value4, 0, 4095);

	DDX_Text(pDX, IDC_UNIT1, m_nuit_str1);
	DDX_Text(pDX, IDC_UNIT2, m_nuit_str2);
	DDX_Text(pDX, IDC_UNIT3, m_nuit_str3);
	DDX_Text(pDX, IDC_UNIT4, m_nuit_str4);

	DDX_Text(pDX, IDC_QUOTIWTY1, m_quotiwty1);

⌨️ 快捷键说明

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