?? querydecstate.cpp
字號:
// 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 + -