| 
					
				 | 
			
			
				@@ -99,6 +99,9 @@ BEGIN_MESSAGE_MAP(CIRControlWnd, CDockablePane) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	ON_WM_PAINT() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	ON_MESSAGE(WM_IR_SHOT_IMG, OnIRShotImg) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	ON_CBN_SELCHANGE(ID_COMBOBOX_SIGNAL_FILE, &CIRControlWnd::OnCbnSelchangeSignal) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	ON_CBN_SELCHANGE(ID_COMBOBOX_SIGNAL_FILE + 1, &CIRControlWnd::OnCbnSelchangeTree1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	ON_CBN_SELCHANGE(ID_COMBOBOX_SIGNAL_FILE + 2, &CIRControlWnd::OnCbnSelchangeTree2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	ON_CBN_SELCHANGE(ID_COMBOBOX_SIGNAL_FILE + 3, &CIRControlWnd::OnCbnSelchangeTree3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 信号按钮; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	ON_COMMAND_RANGE(BTNID, BTNID + 100, OnSignalBtnClick) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	ON_UPDATE_COMMAND_UI_RANGE(BTNID, BTNID + 100, OnUpdateSignalBtn) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -242,6 +245,9 @@ int CIRControlWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	LoadSignals(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	SetPropListFont(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	LoadMenuTreePath(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	ReadResourceRunCfg(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	InitMenuTreeCombobox(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	CRect rectCombo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	m_wndSignalCombo.GetClientRect(&rectCombo); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -387,6 +393,126 @@ void CIRControlWnd::OnCbnSelchangeSignal() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	ReLoadSignalXml(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CIRControlWnd::OnCbnSelchangeTree1() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// UI下拉框; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CString strTree1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int nCurSel = m_cbTree1.GetCurSel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (nCurSel != CB_ERR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		m_cbTree1.GetLBText(nCurSel, strTree1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_cbTree2.ResetContent(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for (auto it : m_map_tree.find(strTree1.GetString())->second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		m_cbTree2.AddString(it.ui.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_cbTree2.SetCurSel(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// SUBUI下拉框; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CString strTree2 = _T(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	nCurSel = m_cbTree2.GetCurSel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (nCurSel != CB_ERR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		m_cbTree2.GetLBText(nCurSel, strTree2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_cbTree3.ResetContent(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	std::vector<UITree>& ui = m_map_tree.find(strTree1.GetString())->second; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for (std::vector<UITree>::iterator it = ui.begin(); it != ui.end(); it++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (_tcsicmp(strTree2.GetString(), it->ui.c_str()) == 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (it->vtSubUI.size() == 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (auto SubUI : it->vtSubUI) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				m_cbTree3.AddString(SubUI.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			m_cbTree3.SetCurSel(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 保存结果; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchip"), strTree1, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedstyle"), strTree2, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CString strTree3 = _T(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	nCurSel = m_cbTree3.GetCurSel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (nCurSel != CB_ERR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		m_cbTree3.GetLBText(nCurSel, strTree3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strTree3, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_stprintf_s(g_pMainFrame->m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strTree1.GetString(), strTree2.GetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CIRControlWnd::OnCbnSelchangeTree2() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CString strTree1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int nCurSel = m_cbTree1.GetCurSel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (nCurSel == CB_ERR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_cbTree1.GetLBText(nCurSel, strTree1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// SUBUI下拉框; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CString strTree2 = _T(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	nCurSel = m_cbTree2.GetCurSel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (nCurSel == CB_ERR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_cbTree2.GetLBText(nCurSel, strTree2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 清空tree3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_cbTree3.ResetContent(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	std::vector<UITree>& ui = m_map_tree.find(strTree1.GetString())->second; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for (std::vector<UITree>::iterator it = ui.begin(); it != ui.end(); it++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (_tcsicmp(strTree2.GetString(), it->ui.c_str()) == 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (it->vtSubUI.size() == 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (auto SubUI : it->vtSubUI) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				m_cbTree3.AddString(SubUI.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			m_cbTree3.SetCurSel(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 保存结果; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedstyle"), strTree2, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CString strTree3 = _T(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	nCurSel = m_cbTree3.GetCurSel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (nCurSel != CB_ERR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		m_cbTree3.GetLBText(nCurSel, strTree3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strTree3, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_stprintf_s(g_pMainFrame->m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strTree1.GetString(), strTree2.GetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CIRControlWnd::OnCbnSelchangeTree3() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// UI下拉框; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CString strTree3 = _T(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int nCurSel = m_cbTree3.GetCurSel(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (nCurSel != CB_ERR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		m_cbTree3.GetLBText(nCurSel, strTree3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		WritePrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), strTree3, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void CIRControlWnd::SetPropListFont() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	::DeleteObject(m_fntPropList.Detach()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -596,7 +722,7 @@ void CIRControlWnd::LoadSignals() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	AutoSetDroppedWidth(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	AutoSetDroppedWidth(&m_wndSignalCombo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void CIRControlWnd::Loadlayout(std::vector<BtnInfo>& vt) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -773,7 +899,7 @@ void CIRControlWnd::OnCheckBoxClicked() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				m_wndSignalCombo.AddString(filehelper::getfilename(it).c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		AutoSetDroppedWidth(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		AutoSetDroppedWidth(&m_wndSignalCombo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		DisableSignalBtn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		ReLoadSignalXml(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -821,9 +947,9 @@ void CIRControlWnd::UpdateSignalBtnStatus() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void CIRControlWnd::AutoSetDroppedWidth() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CIRControlWnd::AutoSetDroppedWidth(CComboBox *pCombobox) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return AddHScroll(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return AddHScroll(pCombobox); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// Set the height of every item so the item 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    // is completely visible. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	CString str; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -850,16 +976,18 @@ void CIRControlWnd::AutoSetDroppedWidth() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	m_wndSignalCombo.ReleaseDC(pDC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void CIRControlWnd::AddHScroll() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CIRControlWnd::AddHScroll(CComboBox* pCombobox) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (!pCombobox) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// Find the longest string in the combo box. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	CString str; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	CSize sz; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	int dx = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	TEXTMETRIC tm = { 0 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	CDC* pDC = m_wndSignalCombo.GetDC(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	CFont* pFont = m_wndSignalCombo.GetFont(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CDC* pDC = pCombobox->GetDC(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CFont* pFont = pCombobox->GetFont(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// Select the listbox font, save the old font 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	CFont* pOldFont = pDC->SelectObject(pFont); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -867,9 +995,9 @@ void CIRControlWnd::AddHScroll() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// Get the text metrics for avg char width 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	pDC->GetTextMetrics(&tm); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (int i = 0; i < m_wndSignalCombo.GetCount(); i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for (int i = 0; i < pCombobox->GetCount(); i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		m_wndSignalCombo.GetLBText(i, str); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		pCombobox->GetLBText(i, str); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		sz = pDC->GetTextExtent(str); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		// Add the avg width to prevent clipping 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -881,11 +1009,171 @@ void CIRControlWnd::AddHScroll() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// Select the old font back into the DC 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	pDC->SelectObject(pOldFont); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	m_wndSignalCombo.ReleaseDC(pDC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pCombobox->ReleaseDC(pDC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// Set the horizontal extent so every character of all strings can 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// be scrolled to. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	m_wndSignalCombo.SetHorizontalExtent(dx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pCombobox->SetHorizontalExtent(dx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CIRControlWnd::ReadResourceRunCfg() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	TCHAR szValue[MAX_PATH] = { 0 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	GetPrivateProfileString(_T("COMM"), _T("issendkeytakepicture_tester"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_rscfg.full_cut = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	GetPrivateProfileString(_T("COMM"), _T("tg39_port"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_rscfg.tg39_port = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	GetPrivateProfileString(_T("COMM"), _T("serial_communicator_port"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_rscfg.tv_port = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	GetPrivateProfileString(_T("COMM"), _T("sat_home"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_rscfg.sat_home = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	GetPrivateProfileString(_T("COMM"), _T("sat_result_dir"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_rscfg.sat_result_dir = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	GetPrivateProfileString(_T("COMM"), _T("chroma22293"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_rscfg.chroma22293 = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	//... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	GetPrivateProfileString(_T("MenuTree"), _T("menutreeselectedchip"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_rscfg.menutree_chip = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	GetPrivateProfileString(_T("MenuTree"), _T("menutreeselectedstyle"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_rscfg.menutree_style = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	GetPrivateProfileString(_T("MenuTree"), _T("menutreeselectedchannel"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_rscfg.menutree_channel = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CIRControlWnd::LoadMenuTreePath() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	TCHAR szValue[MAX_PATH] = {0}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	TCHAR szRootDir[MAX_PATH] = { 0 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	GetPrivateProfileString(_T("COMM"), _T("sat_home"), NULL, szValue, MAX_PATH, Global::g_szResuorceCfg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_stprintf_s(szRootDir, _T("%s%s"), szValue, _T("resource\\MenuTree\\")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	auto _get_dir = [](std::string dir) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		int nIndex = dir.find_last_of('\\'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (nIndex != std::string::npos) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return dir.substr(nIndex + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return dir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	auto _get_name = [](std::string dir) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		int pos1 = dir.find_last_of('\\'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (pos1 != std::string::npos) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			dir = dir.substr(pos1 + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			int pos2 = dir.find_last_of('.'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (pos2 != std::string::npos) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				dir = dir.substr(0, pos2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				int pos3 = dir.find("MenuTree_"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (pos3 != std::string::npos) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return dir.substr(strlen("MenuTree_")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return std::string(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 查找根目录下的目录; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	filehelper fh; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	STR_VEC vt_dir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fh.getsubfolder(szRootDir, &vt_dir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for (auto it : vt_dir) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		STR_VEC vt_subdir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		std::vector<UITree> vtTree; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fh.getsubfolder(it.c_str(), &vt_subdir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (auto ui : vt_subdir) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// 查找xls文件; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			UITree uitree; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			uitree.ui = ui; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fh.getfiles_findout_subfolder(ui.c_str(), _T("*.xls"), &uitree.vtSubUI); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			vtTree.push_back(uitree); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		m_map_tree.insert(std::pair<std::string, std::vector<UITree>>(_get_dir(it), vtTree)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 去除目录级; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for (std::map<std::string, std::vector<UITree>>::iterator it = m_map_tree.begin(); it != m_map_tree.end(); it++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (std::vector<UITree>::iterator ui = it->second.begin(); ui != it->second.end(); ui++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			ui->ui = _get_dir(ui->ui); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (std::vector<std::string>::iterator xls = ui->vtSubUI.begin(); xls != ui->vtSubUI.end();) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				*xls = _get_name(xls->c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (xls->size() == 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					xls = ui->vtSubUI.erase(xls); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					xls++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CIRControlWnd::InitMenuTreeCombobox() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if ( m_map_tree.size()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (auto it : m_map_tree) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			m_cbTree1.AddString(it.first.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 选择默认项; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		m_cbTree1.SelectString(0, m_rscfg.menutree_chip.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// UI下拉框; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		int nIndex = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		CString curText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if ((nIndex = m_cbTree1.GetCurSel()) != CB_ERR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			m_cbTree1.GetLBText(nIndex, curText); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			std::map<std::string, std::vector<UITree>>::iterator itTree = m_map_tree.find(curText.GetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (itTree != m_map_tree.end()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				for (auto it : itTree->second) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					m_cbTree2.AddString(it.ui.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		CString strCurChip = _T(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		CString strCurStyle = _T(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		m_cbTree2.SelectString(0, m_rscfg.menutree_style.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if ((nIndex = m_cbTree2.GetCurSel() ) != CB_ERR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			m_cbTree2.GetLBText(nIndex, strCurChip); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if ((nIndex = m_cbTree3.GetCurSel()) != CB_ERR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			m_cbTree3.GetLBText(nIndex, strCurStyle); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_stprintf_s(m_szCurMenuTreeDir, _T("%s%s%s\\%s\\"), m_rscfg.sat_home.c_str(), _T("resource\\MenuTree\\"), strCurChip.GetString(), strCurStyle.GetString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	AutoSetDroppedWidth(&m_cbTree1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	AutoSetDroppedWidth(&m_cbTree2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	AutoSetDroppedWidth(&m_cbTree3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 LRESULT CIRControlWnd::OnIRShotImg(WPARAM wparam, LPARAM lparam) 
			 |