LRESULT CBacnetVariable::Fresh_Variable_Item(WPARAM wParam,LPARAM lParam) { int cmp_ret ;//compare if match it will 0; int Changed_Item = (int)wParam; int Changed_SubItem = (int)lParam; CString temp_task_info; CString New_CString = m_variable_list.GetItemText(Changed_Item,Changed_SubItem); CString cstemp_value; memcpy_s(&m_temp_variable_data[Changed_Item],sizeof(Str_variable_point),&m_Variable_data.at(Changed_Item),sizeof(Str_variable_point)); if(Changed_SubItem == VARIABLE_LABLE) { CString cs_temp = m_variable_list.GetItemText(Changed_Item,Changed_SubItem); if(cs_temp.GetLength()>= STR_VARIABLE_LABEL) //长度不能大于结构体定义的长度; { MessageBox(_T("Length can not higher than 9"),_T("Warning")); PostMessage(WM_REFRESH_BAC_VARIABLE_LIST,NULL,NULL); return 0; } char cTemp1[255]; memset(cTemp1,0,255); WideCharToMultiByte( CP_ACP, 0, cs_temp.GetBuffer(), -1, cTemp1, 255, NULL, NULL ); memcpy_s(m_Variable_data.at(Changed_Item).label,STR_VARIABLE_LABEL,cTemp1,STR_VARIABLE_LABEL); } if(Changed_SubItem == VARIABLE_FULL_LABLE) { CString cs_temp = m_variable_list.GetItemText(Changed_Item,Changed_SubItem); if(cs_temp.GetLength()>= STR_VARIABLE_DESCRIPTION_LENGTH) //长度不能大于结构体定义的长度; { MessageBox(_T("Length can not higher than 20"),_T("Warning")); PostMessage(WM_REFRESH_BAC_VARIABLE_LIST,NULL,NULL); return 0; } char cTemp1[255]; memset(cTemp1,0,255); WideCharToMultiByte( CP_ACP, 0, cs_temp.GetBuffer(), -1, cTemp1, 255, NULL, NULL ); memcpy_s(m_Variable_data.at(Changed_Item).description,STR_VARIABLE_DESCRIPTION_LENGTH,cTemp1,STR_VARIABLE_DESCRIPTION_LENGTH); } if(Changed_SubItem == VARIABLE_AUTO_MANUAL) { CString temp_cs = m_variable_list.GetItemText(Changed_Item,Changed_SubItem); if(temp_cs.CompareNoCase(_T("Auto"))==0) { m_variable_list.SetCellEnabled(Changed_Item,VARIABLE_VALUE,0); m_Variable_data.at(Changed_Item).auto_manual = BAC_AUTO; } else { m_variable_list.SetCellEnabled(Changed_Item,VARIABLE_VALUE,1); m_Variable_data.at(Changed_Item).auto_manual = BAC_MANUAL; } } if(Changed_SubItem == VARIABLE_VALUE)//这里只用处理 ANALOG 的值就看要了, DIGITAL 的值在Click 事件中处理过了; { CString temp_cs = m_variable_list.GetItemText(Changed_Item,Changed_SubItem); int temp_int = (int)(_wtof(temp_cs) * 1000); m_Variable_data.at(Changed_Item).value = temp_int; //int temp_int = _wtoi(temp_cs); //m_Variable_data.at(Changed_Item).value = temp_int; } if(Changed_SubItem == VARIABLE_UNITE) { BacnetRange dlg; CString temp_cs = m_variable_list.GetItemText(Changed_Item,Changed_SubItem); if(temp_cs.CompareNoCase(Units_Type[UNITS_TYPE_ANALOG])==0) { bac_ranges_type = VARIABLE_RANGE_ANALOG_TYPE; dlg.DoModal(); if(range_cancel) { PostMessage(WM_REFRESH_BAC_VARIABLE_LIST,Changed_Item,REFRESH_ON_ITEM);//这里调用 刷新线程重新刷新会方便一点; return 0; } m_Variable_data.at(Changed_Item).digital_analog = BAC_UNITS_ANALOG; m_Variable_data.at(Changed_Item).range = bac_range_number_choose; m_variable_list.SetItemText(Changed_Item,Changed_SubItem,Variable_Analog_Units_Array[bac_range_number_choose]); if(m_Variable_data.at(Changed_Item).range == 20) //如果是时间; { char temp_char[50]; int time_seconds = m_Variable_data.at(Changed_Item).value / 1000; intervaltotext(temp_char,time_seconds,0,0); CString temp_11; MultiByteToWideChar( CP_ACP, 0, temp_char, strlen(temp_char) + 1, temp_11.GetBuffer(MAX_PATH), MAX_PATH ); temp_11.ReleaseBuffer(); m_variable_list.SetItemText(Changed_Item,VARIABLE_VALUE,temp_11); } else { CString cstemp_value; float temp_float_value; temp_float_value = ((float)m_Variable_data.at(Changed_Item).value) / 1000; cstemp_value.Format(_T("%.3f"),temp_float_value); m_variable_list.SetItemText(Changed_Item,VARIABLE_VALUE,cstemp_value); /* cstemp_value.Format(_T("%d"),m_Variable_data.at(Changed_Item).value); m_variable_list.SetItemText(Changed_Item,VARIABLE_VALUE,cstemp_value);*/ } } else if(temp_cs.CompareNoCase(Units_Type[UNITS_TYPE_DIGITAL])==0) { bac_ranges_type = VARIABLE_RANGE_DIGITAL_TYPE; dlg.DoModal(); if(range_cancel) { PostMessage(WM_REFRESH_BAC_VARIABLE_LIST,Changed_Item,REFRESH_ON_ITEM);//这里调用 刷新线程重新刷新会方便一点; return 0; } m_Variable_data.at(Changed_Item).digital_analog = BAC_UNITS_DIGITAL; m_Variable_data.at(Changed_Item).range = bac_range_number_choose; CString temp1; CStringArray temparray; temp1 = Digital_Units_Array[bac_range_number_choose];//22 is the sizeof the array SplitCStringA(temparray,temp1,_T("/")); if(m_Variable_data.at(Changed_Item).control == 1) { if((temparray.GetSize()==2)&&(!temparray.GetAt(1).IsEmpty())) { m_variable_list.SetItemText(Changed_Item,VARIABLE_VALUE,temparray.GetAt(1)); } } else { if((temparray.GetSize()==2)&&(!temparray.GetAt(0).IsEmpty())) { m_variable_list.SetItemText(Changed_Item,VARIABLE_VALUE,temparray.GetAt(0)); } } m_variable_list.SetItemText(Changed_Item,VARIABLE_UNITE,temp1); } else if(temp_cs.CompareNoCase(Units_Type[UNITS_TYPE_CUSTOM])==0) { bac_ranges_type = VARIABLE_RANGE_CUSTOM_DIG_TYPE; } } cmp_ret = memcmp(&m_temp_variable_data[Changed_Item],&m_Variable_data.at(Changed_Item),sizeof(Str_variable_point)); if(cmp_ret!=0) { m_variable_list.SetItemBkColor(Changed_Item,Changed_SubItem,LIST_ITEM_CHANGED_BKCOLOR); temp_task_info.Format(_T("Write Variable List Item%d .Changed to \"%s\" "),Changed_Item + 1,New_CString); Post_Write_Message(g_bac_instance,WRITEVARIABLE_T3000,Changed_Item,Changed_Item,sizeof(Str_variable_point),m_variable_dlg_hwnd ,temp_task_info,Changed_Item,Changed_SubItem); } return 0; }
LRESULT CBacnetInput::Fresh_Input_Item(WPARAM wParam,LPARAM lParam) { int cmp_ret ;//compare if match it will 0; int Changed_Item = (int)wParam; int Changed_SubItem = (int)lParam; memcpy_s(&m_temp_Input_data[Changed_Item],sizeof(Str_in_point),&m_Input_data.at(Changed_Item),sizeof(Str_in_point)); CString temp_task_info; CString New_CString = m_input_list.GetItemText(Changed_Item,Changed_SubItem); CString cstemp_value; if(Changed_SubItem == INPUT_LABLE) { CString cs_temp = m_input_list.GetItemText(Changed_Item,Changed_SubItem); if(cs_temp.GetLength()>= STR_IN_LABEL) //长度不能大于结构体定义的长度; { MessageBox(_T("Length can not higher than 8"),_T("Warning")); PostMessage(WM_REFRESH_BAC_INPUT_LIST,NULL,NULL); return 0; } char cTemp1[255]; memset(cTemp1,0,255); WideCharToMultiByte( CP_ACP, 0, cs_temp.GetBuffer(), -1, cTemp1, 255, NULL, NULL ); memcpy_s(m_Input_data.at(Changed_Item).label,STR_IN_LABEL,cTemp1,STR_IN_LABEL); } if(Changed_SubItem == INPUT_FULL_LABLE) { CString cs_temp = m_input_list.GetItemText(Changed_Item,Changed_SubItem); if(cs_temp.GetLength()>= STR_IN_DESCRIPTION_LENGTH) //长度不能大于结构体定义的长度; { MessageBox(_T("Length can not higher than 20"),_T("Warning")); PostMessage(WM_REFRESH_BAC_INPUT_LIST,NULL,NULL); return 0; } char cTemp1[255]; memset(cTemp1,0,255); WideCharToMultiByte( CP_ACP, 0, cs_temp.GetBuffer(), -1, cTemp1, 255, NULL, NULL ); memcpy_s(m_Input_data.at(Changed_Item).description,STR_IN_DESCRIPTION_LENGTH,cTemp1,STR_IN_DESCRIPTION_LENGTH); } if(Changed_SubItem == INPUT_AUTO_MANUAL) { CString temp_cs = m_input_list.GetItemText(Changed_Item,Changed_SubItem); if(temp_cs.CompareNoCase(_T("Auto"))==0) { m_input_list.SetCellEnabled(Changed_Item,INPUT_VALUE,0); m_Input_data.at(Changed_Item).auto_manual = BAC_AUTO ; } else { m_input_list.SetCellEnabled(Changed_Item,INPUT_VALUE,1); m_Input_data.at(Changed_Item).auto_manual = BAC_MANUAL ; } } if(Changed_SubItem == INPUT_VALUE) { CString temp_cs = m_input_list.GetItemText(Changed_Item,Changed_SubItem); int temp_int = (int)(_wtof(temp_cs) * 1000); //int temp_int = _wtoi(temp_cs); m_Input_data.at(Changed_Item).value = temp_int; } if(Changed_SubItem == INPUT_RANGE) { CString temp_cs = m_input_list.GetItemText(Changed_Item,Changed_SubItem); BacnetRange dlg; if(temp_cs.CompareNoCase(Units_Type[UNITS_TYPE_ANALOG])==0) { bac_ranges_type = INPUT_RANGE_ANALOG_TYPE; dlg.DoModal(); if(range_cancel) { PostMessage(WM_REFRESH_BAC_INPUT_LIST,Changed_Item,REFRESH_ON_ITEM);//这里调用 刷新线程重新刷新会方便一点; return 0; } m_Input_data.at(Changed_Item).digital_analog = BAC_UNITS_ANALOG; m_Input_data.at(Changed_Item).range = bac_range_number_choose; m_input_list.SetItemText(Changed_Item,INPUT_RANGE,Input_Analog_Units_Array[bac_range_number_choose]); m_input_list.SetItemText(Changed_Item,INPUT_UNITE,Input_List_Analog_Units[bac_range_number_choose]); cstemp_value.Format(_T("%d"),m_Input_data.at(Changed_Item).calibration); m_input_list.SetItemText(Changed_Item,INPUT_CAL,cstemp_value); m_input_list.SetCellEnabled(Changed_Item,INPUT_CAL,1); m_input_list.SetCellEnabled(Changed_Item,INPUT_UNITE,1); //m_input_list.SetItemText(Changed_Item,OUTPUT_100_PERSENT,_T("10")); //m_input_list.SetCellEnabled(Changed_Item,OUTPUT_100_PERSENT,1); CString cstemp_value; float temp_float_value; temp_float_value = ((float)m_Input_data.at(Changed_Item).value) / 1000; cstemp_value.Format(_T("%.2f"),temp_float_value); m_input_list.SetItemText(Changed_Item,INPUT_VALUE,cstemp_value); //cstemp_value.Format(_T("%d"),m_Input_data.at(Changed_Item).value); //m_input_list.SetItemText(Changed_Item,INPUT_VALUE,cstemp_value); } else if(temp_cs.CompareNoCase(Units_Type[UNITS_TYPE_DIGITAL])==0) { bac_range_number_choose = m_Input_data.at(Changed_Item).range; bac_ranges_type = INPUT_RANGE_DIGITAL_TYPE; dlg.DoModal(); if(range_cancel) { PostMessage(WM_REFRESH_BAC_INPUT_LIST,Changed_Item,REFRESH_ON_ITEM);//这里调用 刷新线程重新刷新会方便一点; return 0; } m_Input_data.at(Changed_Item).digital_analog = BAC_UNITS_DIGITAL; m_Input_data.at(Changed_Item).range = bac_range_number_choose; //m_input_list.SetItemText(Changed_Item,INPUT_RANGE,INPUT_Digital_Units_Show[bac_range_number_choose]); m_input_list.SetItemText(Changed_Item,INPUT_CAL,_T("")); m_input_list.SetCellEnabled(Changed_Item,INPUT_CAL,0); m_input_list.SetItemText(Changed_Item,INPUT_UNITE,_T("")); m_input_list.SetCellEnabled(Changed_Item,INPUT_UNITE,0); CString temp1; CStringArray temparray; temp1 = Digital_Units_Array[bac_range_number_choose];//22 is the sizeof the array SplitCStringA(temparray,temp1,_T("/")); if(m_Input_data.at(Changed_Item).control == 1) { if((temparray.GetSize()==2)&&(!temparray.GetAt(1).IsEmpty())) { m_input_list.SetItemText(Changed_Item,INPUT_VALUE,temparray.GetAt(1)); } } else { if((temparray.GetSize()==2)&&(!temparray.GetAt(0).IsEmpty())) { m_input_list.SetItemText(Changed_Item,INPUT_VALUE,temparray.GetAt(0)); } } m_input_list.SetItemText(Changed_Item,INPUT_RANGE,temp1); } else if(temp_cs.CompareNoCase(Units_Type[UNITS_TYPE_CUSTOM])==0) { bac_ranges_type = OUTPUT_RANGE_CUSTOM_DIG_TYPE; //dlg.DoModal(); } else { PostMessage(WM_REFRESH_BAC_INPUT_LIST,Changed_Item,REFRESH_ON_ITEM);//这里调用 刷新线程重新刷新会方便一点; //m_input_list.SetItemText(Changed_Item,INPUT_RANGE,temp_cs); } } //if(Changed_SubItem==INPUT_RANGE) //{ // CString temp_cs = m_input_list.GetItemText(Changed_Item,Changed_SubItem); // if(temp_cs.CompareNoCase(_T("Not Used"))==0) // { // m_input_list.SetItemText(Changed_Item,INPUT_UNITE,Input_Unit[_unused]); // } // else if(temp_cs.CompareNoCase(_T("10K(-40->120)"))==0) // { // ListCtrlEx::CStrList strlist; // strlist.clear(); // strlist.push_back(Input_Unit[degC]); // //strlist.push_back(Input_Unit[degF]); // m_input_list.SetCellStringList(Changed_Item, INPUT_UNITE, strlist); // m_input_list.SetItemText(Changed_Item,INPUT_UNITE,Input_Unit[degC]); // } // else if(temp_cs.CompareNoCase(_T("I 4->20ma"))==0) // { // ListCtrlEx::CStrList strlist; // strlist.clear(); // TRACE(Input_Unit[ma]); // strlist.push_back(Input_Unit[ma]); // m_input_list.SetCellStringList(Changed_Item, INPUT_UNITE, strlist); // m_input_list.SetItemText(Changed_Item,INPUT_UNITE,Input_Unit[ma]); // } // else if(temp_cs.CompareNoCase(_T("V 0->10V"))==0) // { // ListCtrlEx::CStrList strlist; // strlist.clear(); // TRACE(Input_Unit[Volts]); // strlist.push_back(Input_Unit[Volts]); // m_input_list.SetCellStringList(Changed_Item, INPUT_UNITE, strlist); // m_input_list.SetItemText(Changed_Item,INPUT_UNITE,Input_Unit[Volts]); // } // else if(temp_cs.CompareNoCase(_T("V 0->5V"))==0) // { // ListCtrlEx::CStrList strlist; // strlist.clear(); // TRACE(Input_Unit[Volts]); // strlist.push_back(Input_Unit[Volts]); // m_input_list.SetCellStringList(Changed_Item, INPUT_UNITE, strlist); // m_input_list.SetItemText(Changed_Item,INPUT_UNITE,Input_Unit[Volts]); // } // else if(temp_cs.CompareNoCase(_T("V 0->24AC"))==0) // { // ListCtrlEx::CStrList strlist; // strlist.clear(); // strlist.push_back(_T("ON/OFF")); // m_input_list.SetCellStringList(Changed_Item, INPUT_UNITE, strlist); // m_input_list.SetItemText(Changed_Item,INPUT_UNITE,_T("ON/OFF")); // } // else if(temp_cs.CompareNoCase(_T("TST Normal"))==0) // { // ListCtrlEx::CStrList strlist; // strlist.clear(); // strlist.push_back(_T("ON/OFF")); // m_input_list.SetCellStringList(Changed_Item, INPUT_UNITE, strlist); // m_input_list.SetItemText(Changed_Item,INPUT_UNITE,_T("ON/OFF")); // } //} if(Changed_SubItem==INPUT_CAL) { CString cs_temp=m_input_list.GetItemText(Changed_Item,INPUT_CAL); int cal_value = _wtoi(cs_temp); m_Input_data.at(Changed_Item).calibration = cal_value; } else if(Changed_SubItem==INPUT_FITLER) { CString cs_temp=m_input_list.GetItemText(Changed_Item,INPUT_FITLER); int temp2 = _wtoi(cs_temp); m_Input_data.at(Changed_Item).filter = (int8_t)(log((double)temp2)/log((double)2)); } else if(Changed_SubItem==INPUT_DECOM) { CString cs_temp = m_input_list.GetItemText(Changed_Item,INPUT_DECOM); int dec_index=-1; for (int m=0; m<(int)sizeof(Decom_Array)/sizeof(Decom_Array[0]); m++) { if(cs_temp.CompareNoCase(Decom_Array[m])==0) { dec_index = m; break; } } m_Input_data.at(Changed_Item).decom = dec_index; } cmp_ret = memcmp(&m_temp_Input_data[Changed_Item],&m_Input_data.at(Changed_Item),sizeof(Str_in_point)); if(cmp_ret!=0) { m_input_list.SetItemBkColor(Changed_Item,Changed_SubItem,LIST_ITEM_CHANGED_BKCOLOR); temp_task_info.Format(_T("Write Input List Item%d .Changed to \"%s\" "),Changed_Item + 1,New_CString); Post_Write_Message(g_bac_instance,WRITEINPUT_T3000,Changed_Item,Changed_Item,sizeof(Str_in_point),m_input_dlg_hwnd ,temp_task_info,Changed_Item,Changed_SubItem); } //m_input_list.Invalidate(); return 0; }
void CBacnetOutput::OnNMClickListOutput(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: Add your control notification handler code here long lRow,lCol; m_output_list.Set_Edit(true); DWORD dwPos=GetMessagePos();//Get which line is click by user.Set the check box, when user enter Insert it will jump to program dialog CPoint point( LOWORD(dwPos), HIWORD(dwPos)); m_output_list.ScreenToClient(&point); LVHITTESTINFO lvinfo; lvinfo.pt=point; lvinfo.flags=LVHT_ABOVE; int nItem=m_output_list.SubItemHitTest(&lvinfo); if((nItem!=-1) && (nItem < BAC_OUTPUT_ITEM_COUNT)) { output_list_line = nItem; if((m_Output_data.at(output_list_line).sub_id !=0) && //(m_Output_data.at(output_list_line).sub_number !=0) && (m_Output_data.at(output_list_line).sub_product !=0)) { unsigned char temp_pid = m_Output_data.at(output_list_line).sub_product; if((temp_pid == PM_T3PT10) || (temp_pid == PM_T3IOA) || (temp_pid == PM_T332AI) || (temp_pid == PM_T38AI16O) || (temp_pid == PM_T38I13O) || (temp_pid == PM_T34AO) || (temp_pid == PM_T36CT) || (temp_pid == PM_T322AI) || (temp_pid == PM_T38AI8AO6DO)) { m_output_item_info.ShowWindow(true); CString temp_name; temp_name = GetProductName(m_Output_data.at(output_list_line).sub_product); CString show_info; CString temp_id; CString temp_number; temp_id.Format(_T(" Sub ID: %u "),(unsigned char)m_Output_data.at(output_list_line).sub_id); temp_number.Format(_T("Output%d"),(unsigned char)m_Output_data.at(output_list_line).sub_number+1); show_info = _T("Module:") + temp_name +_T(" ") + temp_id + temp_number; m_output_item_info.SetWindowTextW(show_info); } else { m_output_item_info.ShowWindow(false); } } else { m_output_item_info.ShowWindow(false); } } lRow = lvinfo.iItem; lCol = lvinfo.iSubItem; if(lRow>= OUTPUT_LIMITE_ITEM_COUNT) return; if(lRow>m_output_list.GetItemCount()) //如果点击区超过最大行号,则点击是无效的 return; if(lRow<0) return; CString New_CString; CString temp_task_info; CString temp1; CStringArray temparray; if(lCol == OUTPUT_VALUE) { if(m_Output_data.at(lRow).auto_manual == BAC_AUTO) //If it is auto mode, disable to change the value. { m_output_list.Set_Edit(false); return; } if(m_Output_data.at(lRow).digital_analog != BAC_UNITS_DIGITAL) return; memcpy_s(&m_temp_output_data[lRow],sizeof(Str_out_point),&m_Output_data.at(lRow),sizeof(Str_out_point)); if((m_Output_data.at(lRow).range < 23) &&(m_Output_data.at(lRow).range !=0)) temp1 = Digital_Units_Array[m_Output_data.at(lRow).range]; else if((m_Output_data.at(lRow).range >=23) && (m_Output_data.at(lRow).range <= 30)) { if(receive_customer_unit) temp1 = temp_unit_no_index[m_Output_data.at(lRow).range - 23]; else { m_output_list.Set_Edit(false); return; } } else return; //if(m_Output_data.at(lRow).range > 11) // temp1 = Digital_Units_Array[m_Output_data.at(lRow).range - 11];//11 is the sizeof the array //else // temp1 = Digital_Units_Array[m_Output_data.at(lRow).range]; SplitCStringA(temparray,temp1,_T("/")); if(m_Output_data.at(lRow).control == 0) { m_Output_data.at(lRow).control = 1; m_output_list.SetItemText(lRow,OUTPUT_VALUE,temparray.GetAt(1)); New_CString = temparray.GetAt(1); } else { m_Output_data.at(lRow).control = 0; m_output_list.SetItemText(lRow,OUTPUT_VALUE,temparray.GetAt(0)); New_CString = temparray.GetAt(0); } } else if(lCol == OUTPUT_AUTO_MANUAL) { memcpy_s(&m_temp_output_data[lRow],sizeof(Str_out_point),&m_Output_data.at(lRow),sizeof(Str_out_point)); if(m_Output_data.at(lRow).auto_manual == 0) { m_Output_data.at(lRow).auto_manual = 1; m_output_list.SetItemText(lRow,OUTPUT_AUTO_MANUAL,_T("Manual")); //m_output_list.SetCellEnabled(lRow,OUTPUT_VALUE,TRUE); New_CString = _T("Manual"); } else { m_Output_data.at(lRow).auto_manual = 0; m_output_list.SetItemText(lRow,OUTPUT_AUTO_MANUAL,_T("Auto")); //m_output_list.SetCellEnabled(lRow,OUTPUT_VALUE,FALSE); New_CString = _T("Auto"); } } else if(lCol == OUTPUT_RANGE) { //CString temp_cs = m_output_list.GetItemText(Changed_Item,Changed_SubItem); BacnetRange dlg; //点击产品的时候 需要读customer units,老的产品firmware 说不定没有 这些,所以不强迫要读到; if(!read_customer_unit) { int temp_invoke_id = -1; int send_status = true; int resend_count = 0; for (int z=0;z<3;z++) { do { resend_count ++; if(resend_count>5) { send_status = false; break; } temp_invoke_id = GetPrivateData( g_bac_instance, READUNIT_T3000, 0, BAC_CUSTOMER_UNITS_COUNT - 1, sizeof(Str_Units_element)); Sleep(SEND_COMMAND_DELAY_TIME); } while (g_invoke_id<0); if(send_status) { for (int z=0;z<1000;z++) { Sleep(1); if(tsm_invoke_id_free(temp_invoke_id)) { read_customer_unit = true; break; } else continue; } } if(read_customer_unit) break; } } if(m_Output_data.at(lRow).digital_analog == BAC_UNITS_ANALOG) { bac_ranges_type = OUTPUT_RANGE_ANALOG_TYPE; if(m_Output_data.at(lRow).range > (sizeof(Output_Analog_Units_Array) / sizeof(Output_Analog_Units_Array[0]))) { m_Output_data.at(lRow).range = 0; bac_range_number_choose = 0; } } else { bac_ranges_type = OUTPUT_RANGE_DIGITAL_TYPE; if(m_Output_data.at(lRow).range > 30) { m_Output_data.at(lRow).range = 0; bac_range_number_choose = 0; } } //if(temp_cs.CompareNoCase(Units_Type[UNITS_TYPE_ANALOG])==0) //{ initial_dialog = 3; bac_range_number_choose = m_Output_data.at(lRow).range; //bac_ranges_type = OUTPUT_RANGE_ANALOG_TYPE; dlg.DoModal(); if(range_cancel) { PostMessage(WM_REFRESH_BAC_OUTPUT_LIST,lRow,REFRESH_ON_ITEM);//这里调用 刷新线程重新刷新会方便一点; return ; } if(bac_range_number_choose == 0) //如果选择的是 unused 就认为是analog 的unused;这样 能显示对应的value; { m_Output_data.at(lRow).digital_analog = BAC_UNITS_ANALOG; bac_ranges_type = OUTPUT_RANGE_ANALOG_TYPE; } if(bac_ranges_type == OUTPUT_RANGE_ANALOG_TYPE) { m_Output_data.at(lRow).digital_analog = BAC_UNITS_ANALOG; m_Output_data.at(lRow).range = bac_range_number_choose; m_output_list.SetItemText(lRow,OUTPUT_UNITE,Output_Analog_Units_Show[bac_range_number_choose]); m_output_list.SetItemText(lRow,OUTPUT_RANGE,OutPut_List_Analog_Range[bac_range_number_choose]); //m_output_list.SetItemText(lRow,OUTPUT_0_PERSENT,_T("0")); //m_output_list.SetCellEnabled(lRow,OUTPUT_0_PERSENT,1); //m_output_list.SetItemText(lRow,OUTPUT_100_PERSENT,_T("10")); //m_output_list.SetCellEnabled(lRow,OUTPUT_100_PERSENT,1); #if 0 CString cstemp_value; float temp_float_value; temp_float_value = m_Output_data.at(Changed_Item).value / 1000; cstemp_value.Format(_T("%.2f"),temp_float_value); m_output_list.SetItemText(Changed_Item,OUTPUT_VALUE,cstemp_value); #endif CString cstemp_value; cstemp_value.Format(_T("%d"),m_Output_data.at(lRow).value); m_output_list.SetItemText(lRow,OUTPUT_VALUE,cstemp_value); } else if((bac_ranges_type == VARIABLE_RANGE_DIGITAL_TYPE) || (bac_ranges_type == INPUT_RANGE_DIGITAL_TYPE) || (bac_ranges_type == OUTPUT_RANGE_DIGITAL_TYPE)) { m_Output_data.at(lRow).digital_analog = BAC_UNITS_DIGITAL; m_Output_data.at(lRow).range = bac_range_number_choose; //m_output_list.SetItemText(lRow,OUTPUT_0_PERSENT,_T("")); //m_output_list.SetCellEnabled(lRow,OUTPUT_0_PERSENT,0); //m_output_list.SetItemText(lRow,OUTPUT_100_PERSENT,_T("")); //m_output_list.SetCellEnabled(lRow,OUTPUT_100_PERSENT,0); CStringArray temparray; if((bac_range_number_choose >= 23) && (bac_range_number_choose <= 30)) { //temp1.Format(_T("%s"), temp_unit_no_index[bac_range_number_choose - 23]); temp1 = temp_unit_no_index[bac_range_number_choose - 23]; } else temp1 = Digital_Units_Array[bac_range_number_choose];//22 is the sizeof the array SplitCStringA(temparray,temp1,_T("/")); if(m_Output_data.at(lRow).control == 1) { if((temparray.GetSize()==2)&&(!temparray.GetAt(1).IsEmpty())) { m_output_list.SetItemText(lRow,OUTPUT_VALUE,temparray.GetAt(1)); } } else { if((temparray.GetSize()==2)&&(!temparray.GetAt(0).IsEmpty())) { m_output_list.SetItemText(lRow,OUTPUT_VALUE,temparray.GetAt(0)); } } m_output_list.SetItemText(lRow,OUTPUT_RANGE,temp1); m_output_list.SetItemText(lRow,OUTPUT_UNITE,_T(""));//如果是数字单位 Unit 要清空; } } else { return; } //return; m_output_list.Set_Edit(false); int cmp_ret = memcmp(&m_temp_output_data[lRow],&m_Output_data.at(lRow),sizeof(Str_out_point)); if(cmp_ret!=0) { m_output_list.SetItemBkColor(lRow,lCol,LIST_ITEM_CHANGED_BKCOLOR); temp_task_info.Format(_T("Write Output List Item%d .Changed to \"%s\" "),lRow + 1,New_CString); Post_Write_Message(g_bac_instance,WRITEOUTPUT_T3000,lRow,lRow,sizeof(Str_out_point),m_output_dlg_hwnd,temp_task_info,lRow,lCol); } *pResult = 0; }
void CBacnetVariable::OnNMClickListVariable(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: Add your control notification handler code here long lRow,lCol; m_variable_list.Set_Edit(true); DWORD dwPos=GetMessagePos();//Get which line is click by user.Set the check box, when user enter Insert it will jump to program dialog CPoint point( LOWORD(dwPos), HIWORD(dwPos)); m_variable_list.ScreenToClient(&point); LVHITTESTINFO lvinfo; lvinfo.pt=point; lvinfo.flags=LVHT_ABOVE; int nItem=m_variable_list.SubItemHitTest(&lvinfo); lRow = lvinfo.iItem; lCol = lvinfo.iSubItem; if(lRow>m_variable_list.GetItemCount()) //如果点击区超过最大行号,则点击是无效的 return; if(lRow<0) return; CString temp1; m_row = lRow; m_col = lCol; memcpy_s(&m_temp_variable_data[lRow],sizeof(Str_variable_point),&m_Variable_data.at(lRow),sizeof(Str_variable_point)); CString New_CString; CString temp_task_info; if((lCol == VARIABLE_VALUE) &&(m_Variable_data.at(lRow).digital_analog == BAC_UNITS_DIGITAL ) && (m_Variable_data.at(lRow).auto_manual != BAC_AUTO)) { CString temp1; CStringArray temparray; if((m_Variable_data.at(lRow).range < 23) &&(m_Variable_data.at(lRow).range !=0)) temp1 = Digital_Units_Array[m_Variable_data.at(lRow).range]; else if((m_Variable_data.at(lRow).range >=23) && (m_Variable_data.at(lRow).range <= 30)) { if(receive_customer_unit) temp1 = temp_unit_no_index[m_Variable_data.at(lRow).range - 23]; else { m_variable_list.Set_Edit(false); return; } } else return; SplitCStringA(temparray,temp1,_T("/")); if(m_Variable_data.at(lRow).control == 0) { m_Variable_data.at(lRow).control = 1; m_variable_list.SetItemText(lRow,VARIABLE_VALUE,temparray.GetAt(1)); New_CString = temparray.GetAt(1); } else { m_Variable_data.at(lRow).control = 0; m_variable_list.SetItemText(lRow,VARIABLE_VALUE,temparray.GetAt(0)); New_CString = temparray.GetAt(0); } m_variable_list.Set_Edit(false); temp_task_info.Format(_T("Write Variable List Item%d .Changed to \"%s\" "),lRow + 1,New_CString); } else if((lCol == VARIABLE_VALUE) &&(m_Variable_data.at(lRow).digital_analog == BAC_UNITS_ANALOG ) && (m_Variable_data.at(lRow).auto_manual == BAC_MANUAL) && (m_Variable_data.at(lRow).range == 20)) { m_variable_list.Set_Edit(false); m_variable_time_picker.ShowWindow(SW_SHOW); CRect list_rect,win_rect; m_variable_list.GetWindowRect(list_rect); GetWindowRect(win_rect); CRect myrect; m_variable_list.GetSubItemRect(lRow,lCol,LVIR_BOUNDS,myrect); myrect.left = myrect.left + list_rect.left - win_rect.left +2 ; myrect.right = myrect.right + list_rect.left - win_rect.left + 2; myrect.top = myrect.top + 24; myrect.bottom = myrect.bottom + 26; m_variable_time_picker.BringWindowToTop(); m_variable_time_picker.MoveWindow(myrect); CString Temp_CString = m_variable_list.GetItemText(lRow,lCol); CStringArray TEMPCS; int temp_hour,temp_minute,temp_second; SplitCStringA(TEMPCS, Temp_CString, _T(":")); if((int)TEMPCS.GetSize() <3) { temp_hour = 0; temp_minute = 0; temp_second = 0; CTime TimeTemp(2016,1,1,temp_hour,temp_minute,0); m_variable_time_picker.SetFormat(_T("HH:mm:ss")); m_variable_time_picker.SetTime(&TimeTemp); m_variable_time_picker.SetFocus(); } else { temp_hour = _wtoi(TEMPCS.GetAt(0)); temp_minute = _wtoi(TEMPCS.GetAt(1)); temp_second = _wtoi(TEMPCS.GetAt(2)); if(temp_hour >=24) temp_hour = 0; if(temp_minute >=60) temp_minute = 0; if(temp_second >= 60) temp_second = 0; CTime TimeTemp(2016,1,1,temp_hour,temp_minute,temp_second); m_variable_time_picker.SetFormat(_T("HH:mm:ss")); m_variable_time_picker.SetTime(&TimeTemp); m_variable_time_picker.SetFocus(); } m_variable_list.SetItemText(lRow,lCol,_T("")); m_variable_time_picker.Invalidate(); SetTimer(2,100,NULL); } else if(lCol == VARIABLE_VALUE) { if(m_Variable_data.at(lRow).auto_manual == BAC_AUTO) { m_variable_list.Set_Edit(false); return; } } else if(lCol == VARIABLE_AUTO_MANUAL) { if(m_Variable_data.at(lRow).auto_manual == 0) { m_Variable_data.at(lRow).auto_manual = 1; m_variable_list.SetItemText(lRow,VARIABLE_AUTO_MANUAL,_T("Manual")); New_CString = _T("Manual"); } else { m_Variable_data.at(lRow).auto_manual = 0; m_variable_list.SetItemText(lRow,VARIABLE_AUTO_MANUAL,_T("Auto")); New_CString = _T("Auto"); } temp_task_info.Format(_T("Write Variable List Item%d .Changed to \"%s\" "),lRow + 1,New_CString); } else if(lCol == VARIABLE_UNITE) { BacnetRange dlg; //点击产品的时候 需要读customer units,老的产品firmware 说不定没有 这些,所以不强迫要读到; if(!read_customer_unit) { int temp_invoke_id = -1; int send_status = true; int resend_count = 0; for (int z=0;z<3;z++) { do { resend_count ++; if(resend_count>5) { send_status = false; break; } temp_invoke_id = GetPrivateData( g_bac_instance, READUNIT_T3000, 0, BAC_CUSTOMER_UNITS_COUNT - 1, sizeof(Str_Units_element)); Sleep(SEND_COMMAND_DELAY_TIME); } while (g_invoke_id<0); if(send_status) { for (int z=0;z<1000;z++) { Sleep(1); if(tsm_invoke_id_free(temp_invoke_id)) { read_customer_unit = true; break; } else continue; } } if(read_customer_unit) break; } } if(m_Variable_data.at(lRow).digital_analog == BAC_UNITS_ANALOG) { bac_ranges_type = VARIABLE_RANGE_ANALOG_TYPE; if(m_Variable_data.at(lRow).range > (sizeof(Variable_Analog_Units_Array) / sizeof(Variable_Analog_Units_Array[0]))) { m_Variable_data.at(lRow).range = 0; bac_range_number_choose = 0; } } else { bac_ranges_type = VARIABLE_RANGE_DIGITAL_TYPE; if(m_Variable_data.at(lRow).range > 30) { m_Variable_data.at(lRow).range = 0; bac_range_number_choose = 0; } } initial_dialog = 1; bac_range_number_choose = m_Variable_data.at(lRow).range; dlg.DoModal(); if(range_cancel) { PostMessage(WM_REFRESH_BAC_VARIABLE_LIST,lRow,REFRESH_ON_ITEM);//这里调用 刷新线程重新刷新会方便一点; return ; } if(bac_range_number_choose == 0) //如果选择的是 unused 就认为是analog 的unused;这样 能显示对应的value; { m_Variable_data.at(lRow).digital_analog = BAC_UNITS_ANALOG; bac_ranges_type = VARIABLE_RANGE_ANALOG_TYPE; } if(bac_ranges_type == VARIABLE_RANGE_ANALOG_TYPE) { m_Variable_data.at(lRow).digital_analog = BAC_UNITS_ANALOG; m_Variable_data.at(lRow).range = bac_range_number_choose; m_variable_list.SetItemText(lRow,lCol,Variable_Analog_Units_Array[bac_range_number_choose]); if(m_Variable_data.at(lRow).range == 20) //如果是时间; { char temp_char[50]; int time_seconds = m_Variable_data.at(lRow).value / 1000; intervaltotextfull(temp_char,time_seconds,0,0); CString temp_11; MultiByteToWideChar( CP_ACP, 0, temp_char, strlen(temp_char) + 1, temp_11.GetBuffer(MAX_PATH), MAX_PATH ); temp_11.ReleaseBuffer(); m_variable_list.SetItemText(lRow,VARIABLE_VALUE,temp_11); } else { CString cstemp_value; float temp_float_value; temp_float_value = ((float)m_Variable_data.at(lRow).value) / 1000; cstemp_value.Format(_T("%.3f"),temp_float_value); m_variable_list.SetItemText(lRow,VARIABLE_VALUE,cstemp_value); /* cstemp_value.Format(_T("%d"),m_Variable_data.at(Changed_Item).value); m_variable_list.SetItemText(Changed_Item,VARIABLE_VALUE,cstemp_value);*/ } } else if((bac_ranges_type == VARIABLE_RANGE_DIGITAL_TYPE) || (bac_ranges_type == INPUT_RANGE_DIGITAL_TYPE) || (bac_ranges_type == OUTPUT_RANGE_DIGITAL_TYPE)) { m_Variable_data.at(lRow).digital_analog = BAC_UNITS_DIGITAL; m_Variable_data.at(lRow).range = bac_range_number_choose; CStringArray temparray; if((bac_range_number_choose >= 23) && (bac_range_number_choose <= 30)) { //temp1.Format(_T("%s"), temp_unit_no_index[bac_range_number_choose - 23]); temp1 = temp_unit_no_index[bac_range_number_choose - 23]; } else temp1 = Digital_Units_Array[bac_range_number_choose];//22 is the sizeof the array SplitCStringA(temparray,temp1,_T("/")); if(m_Variable_data.at(lRow).control == 1) { if((temparray.GetSize()==2)&&(!temparray.GetAt(1).IsEmpty())) { m_variable_list.SetItemText(lRow,VARIABLE_VALUE,temparray.GetAt(1)); } } else { if((temparray.GetSize()==2)&&(!temparray.GetAt(0).IsEmpty())) { m_variable_list.SetItemText(lRow,VARIABLE_VALUE,temparray.GetAt(0)); } } m_variable_list.SetItemText(lRow,VARIABLE_UNITE,temp1); } } else { return; } int cmp_ret = memcmp(&m_temp_variable_data[lRow],&m_Variable_data.at(lRow),sizeof(Str_variable_point)); if(cmp_ret!=0) { m_variable_list.SetItemBkColor(lRow,lCol,LIST_ITEM_CHANGED_BKCOLOR); Post_Write_Message(g_bac_instance,WRITEVARIABLE_T3000,lRow,lRow,sizeof(Str_variable_point),m_variable_dlg_hwnd,temp_task_info,lRow,lCol); } *pResult = 0; }