|  | @@ -35,60 +35,60 @@ const UINT uiFirstUserToolBarId = AFX_IDW_CONTROLBAR_FIRST + 40;
 | 
	
		
			
				|  |  |  const UINT uiLastUserToolBarId = uiFirstUserToolBarId + iMaxUserToolbars - 1;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
 | 
	
		
			
				|  |  | -    ON_WM_CREATE()
 | 
	
		
			
				|  |  | -    ON_WM_DEVICECHANGE()
 | 
	
		
			
				|  |  | -    ON_COMMAND(ID_WINDOW_MANAGER, &CMainFrame::OnWindowManager)
 | 
	
		
			
				|  |  | -    ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnApplicationLook)
 | 
	
		
			
				|  |  | -    ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnUpdateApplicationLook)
 | 
	
		
			
				|  |  | +	ON_WM_CREATE()
 | 
	
		
			
				|  |  | +	ON_WM_DEVICECHANGE()
 | 
	
		
			
				|  |  | +	ON_COMMAND(ID_WINDOW_MANAGER, &CMainFrame::OnWindowManager)
 | 
	
		
			
				|  |  | +	ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnApplicationLook)
 | 
	
		
			
				|  |  | +	ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_OFF_2007_AQUA, &CMainFrame::OnUpdateApplicationLook)
 | 
	
		
			
				|  |  |  #ifndef DISABLE_CAPTIONBAR
 | 
	
		
			
				|  |  | -    ON_COMMAND(ID_VIEW_CAPTION_BAR, &CMainFrame::OnViewCaptionBar)
 | 
	
		
			
				|  |  | -    ON_UPDATE_COMMAND_UI(ID_VIEW_CAPTION_BAR, &CMainFrame::OnUpdateViewCaptionBar)
 | 
	
		
			
				|  |  | +	ON_COMMAND(ID_VIEW_CAPTION_BAR, &CMainFrame::OnViewCaptionBar)
 | 
	
		
			
				|  |  | +	ON_UPDATE_COMMAND_UI(ID_VIEW_CAPTION_BAR, &CMainFrame::OnUpdateViewCaptionBar)
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  | -    // 摄像头;
 | 
	
		
			
				|  |  | -    ON_COMMAND(ID_RIBBON_CAMERA_COMBOBOX, &CMainFrame::OnCameraCombobox)
 | 
	
		
			
				|  |  | -    ON_UPDATE_COMMAND_UI(ID_RIBBON_CAMERA_COMBOBOX, &CMainFrame::OnUpdateCameraCombobox)
 | 
	
		
			
				|  |  | -    // 摄像头刷新;
 | 
	
		
			
				|  |  | -    ON_COMMAND(ID_RIBBON_CAMERA_FLUSH, &CMainFrame::OnCameraFlush)
 | 
	
		
			
				|  |  | -    ON_UPDATE_COMMAND_UI(ID_RIBBON_CAMERA_FLUSH, &CMainFrame::OnUpdateCameraFlush)
 | 
	
		
			
				|  |  | -    // 红外:测试精灵;
 | 
	
		
			
				|  |  | -    ON_COMMAND(ID_RIBBON_INFRAED_COMBOBOX, &CMainFrame::OnInfraedCombobox)
 | 
	
		
			
				|  |  | -    ON_UPDATE_COMMAND_UI(ID_RIBBON_INFRAED_COMBOBOX, &CMainFrame::OnUpdateInfraedCombobox)
 | 
	
		
			
				|  |  | -    ON_COMMAND(ID_RIBBON_INFRAED_CHECKBOX, &CMainFrame::OnInfraedCheckbox)
 | 
	
		
			
				|  |  | -    ON_UPDATE_COMMAND_UI(ID_RIBBON_INFRAED_CHECKBOX, &CMainFrame::OnUpdateInfraedCheckbox)
 | 
	
		
			
				|  |  | -    // 红外版本选择;
 | 
	
		
			
				|  |  | -    ON_COMMAND(ID_RIBBON_INFRAED_VERSION_COMBOBOX, &CMainFrame::OnInfraedVersionCombobox)
 | 
	
		
			
				|  |  | -    ON_UPDATE_COMMAND_UI(ID_RIBBON_INFRAED_VERSION_COMBOBOX, &CMainFrame::OnUpdateInfraedVersionCombobox)
 | 
	
		
			
				|  |  | -    // USB切换器;
 | 
	
		
			
				|  |  | -    ON_COMMAND(ID_RIBBON_SWITCHER_COMBOBOX, &CMainFrame::OnSwitcherCombobox)
 | 
	
		
			
				|  |  | -    ON_UPDATE_COMMAND_UI(ID_RIBBON_SWITCHER_COMBOBOX, &CMainFrame::OnUpdateSwitcherCombobox)
 | 
	
		
			
				|  |  | -    // 打开USB切换器;
 | 
	
		
			
				|  |  | -    ON_COMMAND(ID_RIBBON_SWITCHER_CHECKBOX, &CMainFrame::OnSwitcherCheckbox)
 | 
	
		
			
				|  |  | -    ON_UPDATE_COMMAND_UI(ID_RIBBON_SWITCHER_CHECKBOX, &CMainFrame::OnUpdateSwitcherCheckbox)
 | 
	
		
			
				|  |  | -    // Switch A;
 | 
	
		
			
				|  |  | -    ON_COMMAND(ID_RIBBON_SWITCHER_CHECKBOXA, &CMainFrame::OnSwitcherCheckboxA)
 | 
	
		
			
				|  |  | -    ON_UPDATE_COMMAND_UI(ID_RIBBON_SWITCHER_CHECKBOXA, &CMainFrame::OnUpdateSwitcherCheckboxA)
 | 
	
		
			
				|  |  | -    // Switch B;
 | 
	
		
			
				|  |  | -    ON_COMMAND(ID_RIBBON_SWITCHER_CHECKBOXB, &CMainFrame::OnSwitcherCheckboxB)
 | 
	
		
			
				|  |  | -    ON_UPDATE_COMMAND_UI(ID_RIBBON_SWITCHER_CHECKBOXB, &CMainFrame::OnUpdateSwitcherCheckboxB)
 | 
	
		
			
				|  |  | -    // 计时器;
 | 
	
		
			
				|  |  | -    ON_WM_TIMER()
 | 
	
		
			
				|  |  | -    ON_WM_CLOSE()
 | 
	
		
			
				|  |  | +	// 摄像头;
 | 
	
		
			
				|  |  | +	ON_COMMAND(ID_RIBBON_CAMERA_COMBOBOX, &CMainFrame::OnCameraCombobox)
 | 
	
		
			
				|  |  | +	ON_UPDATE_COMMAND_UI(ID_RIBBON_CAMERA_COMBOBOX, &CMainFrame::OnUpdateCameraCombobox)
 | 
	
		
			
				|  |  | +	// 摄像头刷新;
 | 
	
		
			
				|  |  | +	ON_COMMAND(ID_RIBBON_CAMERA_FLUSH, &CMainFrame::OnCameraFlush)
 | 
	
		
			
				|  |  | +	ON_UPDATE_COMMAND_UI(ID_RIBBON_CAMERA_FLUSH, &CMainFrame::OnUpdateCameraFlush)
 | 
	
		
			
				|  |  | +	// 红外:测试精灵;
 | 
	
		
			
				|  |  | +	ON_COMMAND(ID_RIBBON_INFRAED_COMBOBOX, &CMainFrame::OnInfraedCombobox)
 | 
	
		
			
				|  |  | +	ON_UPDATE_COMMAND_UI(ID_RIBBON_INFRAED_COMBOBOX, &CMainFrame::OnUpdateInfraedCombobox)
 | 
	
		
			
				|  |  | +	ON_COMMAND(ID_RIBBON_INFRAED_CHECKBOX, &CMainFrame::OnInfraedCheckbox)
 | 
	
		
			
				|  |  | +	ON_UPDATE_COMMAND_UI(ID_RIBBON_INFRAED_CHECKBOX, &CMainFrame::OnUpdateInfraedCheckbox)
 | 
	
		
			
				|  |  | +	// 红外版本选择;
 | 
	
		
			
				|  |  | +	ON_COMMAND(ID_RIBBON_INFRAED_VERSION_COMBOBOX, &CMainFrame::OnInfraedVersionCombobox)
 | 
	
		
			
				|  |  | +	ON_UPDATE_COMMAND_UI(ID_RIBBON_INFRAED_VERSION_COMBOBOX, &CMainFrame::OnUpdateInfraedVersionCombobox)
 | 
	
		
			
				|  |  | +	// USB切换器;
 | 
	
		
			
				|  |  | +	ON_COMMAND(ID_RIBBON_SWITCHER_COMBOBOX, &CMainFrame::OnSwitcherCombobox)
 | 
	
		
			
				|  |  | +	ON_UPDATE_COMMAND_UI(ID_RIBBON_SWITCHER_COMBOBOX, &CMainFrame::OnUpdateSwitcherCombobox)
 | 
	
		
			
				|  |  | +	// 打开USB切换器;
 | 
	
		
			
				|  |  | +	ON_COMMAND(ID_RIBBON_SWITCHER_CHECKBOX, &CMainFrame::OnSwitcherCheckbox)
 | 
	
		
			
				|  |  | +	ON_UPDATE_COMMAND_UI(ID_RIBBON_SWITCHER_CHECKBOX, &CMainFrame::OnUpdateSwitcherCheckbox)
 | 
	
		
			
				|  |  | +	// Switch A;
 | 
	
		
			
				|  |  | +	ON_COMMAND(ID_RIBBON_SWITCHER_CHECKBOXA, &CMainFrame::OnSwitcherCheckboxA)
 | 
	
		
			
				|  |  | +	ON_UPDATE_COMMAND_UI(ID_RIBBON_SWITCHER_CHECKBOXA, &CMainFrame::OnUpdateSwitcherCheckboxA)
 | 
	
		
			
				|  |  | +	// Switch B;
 | 
	
		
			
				|  |  | +	ON_COMMAND(ID_RIBBON_SWITCHER_CHECKBOXB, &CMainFrame::OnSwitcherCheckboxB)
 | 
	
		
			
				|  |  | +	ON_UPDATE_COMMAND_UI(ID_RIBBON_SWITCHER_CHECKBOXB, &CMainFrame::OnUpdateSwitcherCheckboxB)
 | 
	
		
			
				|  |  | +	// 计时器;
 | 
	
		
			
				|  |  | +	ON_WM_TIMER()
 | 
	
		
			
				|  |  | +	ON_WM_CLOSE()
 | 
	
		
			
				|  |  |  END_MESSAGE_MAP()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // CMainFrame 构造/析构
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  CMainFrame::CMainFrame()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    // TODO: 在此添加成员初始化代码
 | 
	
		
			
				|  |  | -    m_pDoc = NULL;
 | 
	
		
			
				|  |  | -    m_pDocTemplate = NULL;
 | 
	
		
			
				|  |  | -    m_bFindTestWizardPort = false;
 | 
	
		
			
				|  |  | -    m_bFindSwitcherPort = false;
 | 
	
		
			
				|  |  | -    m_bSwitcherCheckA = false;
 | 
	
		
			
				|  |  | -    m_bSwitcherCheckB = false;
 | 
	
		
			
				|  |  | -    m_pActiveView = NULL;
 | 
	
		
			
				|  |  | -    m_pChildFrame = NULL;
 | 
	
		
			
				|  |  | -    theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_OFF_2007_BLUE);
 | 
	
		
			
				|  |  | +	// TODO: 在此添加成员初始化代码
 | 
	
		
			
				|  |  | +	m_pDoc = NULL;
 | 
	
		
			
				|  |  | +	m_pDocTemplate = NULL;
 | 
	
		
			
				|  |  | +	m_bFindTestWizardPort = false;
 | 
	
		
			
				|  |  | +	m_bFindSwitcherPort = false;
 | 
	
		
			
				|  |  | +	m_bSwitcherCheckA = false;
 | 
	
		
			
				|  |  | +	m_bSwitcherCheckB = false;
 | 
	
		
			
				|  |  | +	m_pActiveView = NULL;
 | 
	
		
			
				|  |  | +	m_pChildFrame = NULL;
 | 
	
		
			
				|  |  | +	theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_OFF_2007_BLUE);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  CMainFrame::~CMainFrame()
 | 
	
	
		
			
				|  | @@ -98,448 +98,448 @@ CMainFrame::~CMainFrame()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
 | 
	
		
			
				|  |  | -        return -1;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    BOOL bNameValid;
 | 
	
		
			
				|  |  | -    // 基于持久值设置视觉管理器和样式
 | 
	
		
			
				|  |  | -    OnApplicationLook(theApp.m_nAppLook);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    CMDITabInfo mdiTabParams;
 | 
	
		
			
				|  |  | -    mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_ONENOTE; // 其他可用样式...
 | 
	
		
			
				|  |  | -    mdiTabParams.m_bActiveTabCloseButton = TRUE;      // 设置为 FALSE 会将关闭按钮放置在选项卡区域的右侧
 | 
	
		
			
				|  |  | -    mdiTabParams.m_bTabIcons = FALSE;    // 设置为 TRUE 将在 MDI 选项卡上启用文档图标
 | 
	
		
			
				|  |  | -    mdiTabParams.m_bAutoColor = TRUE;    // 设置为 FALSE 将禁用 MDI 选项卡的自动着色
 | 
	
		
			
				|  |  | -    mdiTabParams.m_bDocumentMenu = TRUE; // 在选项卡区域的右边缘启用文档菜单
 | 
	
		
			
				|  |  | -    EnableMDITabbedGroups(TRUE, mdiTabParams);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    m_wndRibbonBar.Create(this);
 | 
	
		
			
				|  |  | -    InitializeRibbon();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    if (!m_wndStatusBar.Create(this))
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        TRACE0("未能创建状态栏\n");
 | 
	
		
			
				|  |  | -        return -1;      // 未能创建
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    CString strTitlePane1;
 | 
	
		
			
				|  |  | -    CString strTitlePane2;
 | 
	
		
			
				|  |  | -    bNameValid = strTitlePane1.LoadString(IDS_STATUS_PANE1);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    bNameValid = strTitlePane2.LoadString(IDS_STATUS_PANE2);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    m_wndStatusBar.AddElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE1, strTitlePane1, TRUE), strTitlePane1);
 | 
	
		
			
				|  |  | -    m_wndStatusBar.AddExtendedElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE2, strTitlePane2, TRUE), strTitlePane2);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    // 启用 Visual Studio 2005 样式停靠窗口行为
 | 
	
		
			
				|  |  | -    CDockingManager::SetDockingMode(DT_SMART);
 | 
	
		
			
				|  |  | -    // 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为
 | 
	
		
			
				|  |  | -    EnableAutoHidePanes(CBRS_ALIGN_ANY);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    // 导航窗格将创建在左侧,因此将暂时禁用左侧的停靠:
 | 
	
		
			
				|  |  | -    EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM | CBRS_ALIGN_RIGHT);
 | 
	
		
			
				|  |  | +	if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
 | 
	
		
			
				|  |  | +		return -1;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	BOOL bNameValid;
 | 
	
		
			
				|  |  | +	// 基于持久值设置视觉管理器和样式
 | 
	
		
			
				|  |  | +	OnApplicationLook(theApp.m_nAppLook);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	CMDITabInfo mdiTabParams;
 | 
	
		
			
				|  |  | +	mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_ONENOTE; // 其他可用样式...
 | 
	
		
			
				|  |  | +	mdiTabParams.m_bActiveTabCloseButton = TRUE;      // 设置为 FALSE 会将关闭按钮放置在选项卡区域的右侧
 | 
	
		
			
				|  |  | +	mdiTabParams.m_bTabIcons = FALSE;    // 设置为 TRUE 将在 MDI 选项卡上启用文档图标
 | 
	
		
			
				|  |  | +	mdiTabParams.m_bAutoColor = TRUE;    // 设置为 FALSE 将禁用 MDI 选项卡的自动着色
 | 
	
		
			
				|  |  | +	mdiTabParams.m_bDocumentMenu = TRUE; // 在选项卡区域的右边缘启用文档菜单
 | 
	
		
			
				|  |  | +	EnableMDITabbedGroups(TRUE, mdiTabParams);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	m_wndRibbonBar.Create(this);
 | 
	
		
			
				|  |  | +	InitializeRibbon();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!m_wndStatusBar.Create(this))
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		TRACE0("未能创建状态栏\n");
 | 
	
		
			
				|  |  | +		return -1;      // 未能创建
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	CString strTitlePane1;
 | 
	
		
			
				|  |  | +	CString strTitlePane2;
 | 
	
		
			
				|  |  | +	bNameValid = strTitlePane1.LoadString(IDS_STATUS_PANE1);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	bNameValid = strTitlePane2.LoadString(IDS_STATUS_PANE2);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	m_wndStatusBar.AddElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE1, strTitlePane1, TRUE), strTitlePane1);
 | 
	
		
			
				|  |  | +	m_wndStatusBar.AddExtendedElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE2, strTitlePane2, TRUE), strTitlePane2);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// 启用 Visual Studio 2005 样式停靠窗口行为
 | 
	
		
			
				|  |  | +	CDockingManager::SetDockingMode(DT_SMART);
 | 
	
		
			
				|  |  | +	// 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为
 | 
	
		
			
				|  |  | +	EnableAutoHidePanes(CBRS_ALIGN_ANY);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// 导航窗格将创建在左侧,因此将暂时禁用左侧的停靠:
 | 
	
		
			
				|  |  | +	EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM | CBRS_ALIGN_RIGHT);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifndef DISABLE_OUTLOOKBAR
 | 
	
		
			
				|  |  | -    // 创建并设置“Outlook”导航栏:
 | 
	
		
			
				|  |  | -    if (!CreateOutlookBar(m_wndNavigationBar, ID_VIEW_NAVIGATION, m_wndTree, m_wndCalendar, 250))
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        TRACE0("未能创建导航窗格\n");
 | 
	
		
			
				|  |  | -        return -1;      // 未能创建
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	// 创建并设置“Outlook”导航栏:
 | 
	
		
			
				|  |  | +	if (!CreateOutlookBar(m_wndNavigationBar, ID_VIEW_NAVIGATION, m_wndTree, m_wndCalendar, 250))
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		TRACE0("未能创建导航窗格\n");
 | 
	
		
			
				|  |  | +		return -1;      // 未能创建
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifndef DISABLE_CAPTIONBAR
 | 
	
		
			
				|  |  | -    // 创建标题栏:
 | 
	
		
			
				|  |  | -    if (!CreateCaptionBar())
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        TRACE0("未能创建标题栏\n");
 | 
	
		
			
				|  |  | -        return -1;      // 未能创建
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	// 创建标题栏:
 | 
	
		
			
				|  |  | +	if (!CreateCaptionBar())
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		TRACE0("未能创建标题栏\n");
 | 
	
		
			
				|  |  | +		return -1;      // 未能创建
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // 已创建 Outlook 栏,应允许在左侧停靠。
 | 
	
		
			
				|  |  | -    EnableDocking(CBRS_ALIGN_LEFT);
 | 
	
		
			
				|  |  | -    EnableAutoHidePanes(CBRS_ALIGN_RIGHT);
 | 
	
		
			
				|  |  | +	// 已创建 Outlook 栏,应允许在左侧停靠。
 | 
	
		
			
				|  |  | +	EnableDocking(CBRS_ALIGN_LEFT);
 | 
	
		
			
				|  |  | +	EnableAutoHidePanes(CBRS_ALIGN_RIGHT);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // 加载菜单项图像(不在任何标准工具栏上):
 | 
	
		
			
				|  |  | -    //CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES, theApp.m_bHiColorIcons ? IDB_MENU_IMAGES_24 : 0);
 | 
	
		
			
				|  |  | +	// 加载菜单项图像(不在任何标准工具栏上):
 | 
	
		
			
				|  |  | +	//CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES, theApp.m_bHiColorIcons ? IDB_MENU_IMAGES_24 : 0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // 创建停靠窗口
 | 
	
		
			
				|  |  | -    if (!CreateDockingWindows())
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        TRACE0("未能创建停靠窗口\n");
 | 
	
		
			
				|  |  | -        return -1;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	// 创建停靠窗口
 | 
	
		
			
				|  |  | +	if (!CreateDockingWindows())
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		TRACE0("未能创建停靠窗口\n");
 | 
	
		
			
				|  |  | +		return -1;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    m_wndProperties.EnableDocking(CBRS_ALIGN_ANY);
 | 
	
		
			
				|  |  | -    DockPane(&m_wndProperties);
 | 
	
		
			
				|  |  | +	m_wndProperties.EnableDocking(CBRS_ALIGN_ANY);
 | 
	
		
			
				|  |  | +	DockPane(&m_wndProperties);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // 启用增强的窗口管理对话框
 | 
	
		
			
				|  |  | -    EnableWindowsDialog(ID_WINDOW_MANAGER, IDS_WINDOWS_MANAGER, TRUE);
 | 
	
		
			
				|  |  | +	// 启用增强的窗口管理对话框
 | 
	
		
			
				|  |  | +	EnableWindowsDialog(ID_WINDOW_MANAGER, IDS_WINDOWS_MANAGER, TRUE);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    SetTimer(0,100,NULL);
 | 
	
		
			
				|  |  | +	SetTimer(0, 100, NULL);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    RegisterDeviceChange();
 | 
	
		
			
				|  |  | +	RegisterDeviceChange();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // 初始化摄像头下拉框;
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pCameraCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_CAMERA_COMBOBOX));
 | 
	
		
			
				|  |  | -    m_cap.EnumDevices(pCameraCombo);    
 | 
	
		
			
				|  |  | +	// 初始化摄像头下拉框;
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pCameraCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_CAMERA_COMBOBOX));
 | 
	
		
			
				|  |  | +	m_cap.EnumDevices(pCameraCombo);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    return 0;
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    if( !CMDIFrameWndEx::PreCreateWindow(cs) )
 | 
	
		
			
				|  |  | -        return FALSE;
 | 
	
		
			
				|  |  | -    // TODO: 在此处通过修改
 | 
	
		
			
				|  |  | -    //  CREATESTRUCT cs 来修改窗口类或样式
 | 
	
		
			
				|  |  | +	if (!CMDIFrameWndEx::PreCreateWindow(cs))
 | 
	
		
			
				|  |  | +		return FALSE;
 | 
	
		
			
				|  |  | +	// TODO: 在此处通过修改
 | 
	
		
			
				|  |  | +	//  CREATESTRUCT cs 来修改窗口类或样式
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    return TRUE;
 | 
	
		
			
				|  |  | +	return TRUE;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::InitializeRibbon()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    BOOL bNameValid;
 | 
	
		
			
				|  |  | +	BOOL bNameValid;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    CString strTemp;
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_FILE);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	CString strTemp;
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_FILE);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // 加载面板图像:
 | 
	
		
			
				|  |  | -    m_PanelImages.SetImageSize(CSize(16, 16));
 | 
	
		
			
				|  |  | -    m_PanelImages.Load(IDB_BUTTONS);
 | 
	
		
			
				|  |  | +	// 加载面板图像:
 | 
	
		
			
				|  |  | +	m_PanelImages.SetImageSize(CSize(16, 16));
 | 
	
		
			
				|  |  | +	m_PanelImages.Load(IDB_BUTTONS);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // 初始主按钮:
 | 
	
		
			
				|  |  | -    m_MainButton.SetImage(IDB_MAIN);
 | 
	
		
			
				|  |  | -    m_MainButton.SetText(_T("\nf"));
 | 
	
		
			
				|  |  | -    m_MainButton.SetToolTipText(strTemp);
 | 
	
		
			
				|  |  | +	// 初始主按钮:
 | 
	
		
			
				|  |  | +	m_MainButton.SetImage(IDB_MAIN);
 | 
	
		
			
				|  |  | +	m_MainButton.SetText(_T("\nf"));
 | 
	
		
			
				|  |  | +	m_MainButton.SetToolTipText(strTemp);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    m_wndRibbonBar.SetApplicationButton(&m_MainButton, CSize (45, 45));
 | 
	
		
			
				|  |  | -    CMFCRibbonMainPanel* pMainPanel = m_wndRibbonBar.AddMainCategory(strTemp, IDB_FILESMALL, IDB_FILELARGE);
 | 
	
		
			
				|  |  | +	m_wndRibbonBar.SetApplicationButton(&m_MainButton, CSize(45, 45));
 | 
	
		
			
				|  |  | +	CMFCRibbonMainPanel* pMainPanel = m_wndRibbonBar.AddMainCategory(strTemp, IDB_FILESMALL, IDB_FILELARGE);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #if 0 // 禁用文档相关菜单;
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_NEW);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pMainPanel->Add(new CMFCRibbonButton(ID_FILE_NEW, strTemp, 0, 0));
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_OPEN);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pMainPanel->Add(new CMFCRibbonButton(ID_FILE_OPEN, strTemp, 1, 1));
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_SAVE);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pMainPanel->Add(new CMFCRibbonButton(ID_FILE_SAVE, strTemp, 2, 2));
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_SAVEAS);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pMainPanel->Add(new CMFCRibbonButton(ID_FILE_SAVE_AS, strTemp, 3, 3));
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_NEW);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pMainPanel->Add(new CMFCRibbonButton(ID_FILE_NEW, strTemp, 0, 0));
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_OPEN);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pMainPanel->Add(new CMFCRibbonButton(ID_FILE_OPEN, strTemp, 1, 1));
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_SAVE);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pMainPanel->Add(new CMFCRibbonButton(ID_FILE_SAVE, strTemp, 2, 2));
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_SAVEAS);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pMainPanel->Add(new CMFCRibbonButton(ID_FILE_SAVE_AS, strTemp, 3, 3));
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #if 0 // 禁用打印相关的菜单;
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    CMFCRibbonButton* pBtnPrint = new CMFCRibbonButton(ID_FILE_PRINT, strTemp, 6, 6);
 | 
	
		
			
				|  |  | -    pBtnPrint->SetKeys(_T("p"), _T("w"));
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_LABEL);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pBtnPrint->AddSubItem(new CMFCRibbonLabel(strTemp));
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_QUICK);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pBtnPrint->AddSubItem(new CMFCRibbonButton(ID_FILE_PRINT_DIRECT, strTemp, 7, 7, TRUE));
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_PREVIEW);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pBtnPrint->AddSubItem(new CMFCRibbonButton(ID_FILE_PRINT_PREVIEW, strTemp, 8, 8, TRUE));
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_SETUP);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pBtnPrint->AddSubItem(new CMFCRibbonButton(ID_FILE_PRINT_SETUP, strTemp, 11, 11, TRUE));
 | 
	
		
			
				|  |  | -    pMainPanel->Add(pBtnPrint);
 | 
	
		
			
				|  |  | -    pMainPanel->Add(new CMFCRibbonSeparator(TRUE));
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	CMFCRibbonButton* pBtnPrint = new CMFCRibbonButton(ID_FILE_PRINT, strTemp, 6, 6);
 | 
	
		
			
				|  |  | +	pBtnPrint->SetKeys(_T("p"), _T("w"));
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_LABEL);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pBtnPrint->AddSubItem(new CMFCRibbonLabel(strTemp));
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_QUICK);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pBtnPrint->AddSubItem(new CMFCRibbonButton(ID_FILE_PRINT_DIRECT, strTemp, 7, 7, TRUE));
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_PREVIEW);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pBtnPrint->AddSubItem(new CMFCRibbonButton(ID_FILE_PRINT_PREVIEW, strTemp, 8, 8, TRUE));
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_PRINT_SETUP);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pBtnPrint->AddSubItem(new CMFCRibbonButton(ID_FILE_PRINT_SETUP, strTemp, 11, 11, TRUE));
 | 
	
		
			
				|  |  | +	pMainPanel->Add(pBtnPrint);
 | 
	
		
			
				|  |  | +	pMainPanel->Add(new CMFCRibbonSeparator(TRUE));
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_CLOSE);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pMainPanel->Add(new CMFCRibbonButton(ID_FILE_CLOSE, strTemp, 9, 9));
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_CLOSE);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pMainPanel->Add(new CMFCRibbonButton(ID_FILE_CLOSE, strTemp, 9, 9));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #if 0 // 去掉最近打开的文档;
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_RECENT_DOCS);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pMainPanel->AddRecentFilesList(strTemp);
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_RECENT_DOCS);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pMainPanel->AddRecentFilesList(strTemp);
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_EXIT);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pMainPanel->AddToBottom(new CMFCRibbonMainPanelButton(ID_APP_EXIT, strTemp, 15));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    // 为“剪贴板”面板添加“主”类别:
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_HOME);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    CMFCRibbonCategory* pCategoryHome = m_wndRibbonBar.AddCategory(strTemp, IDB_WRITESMALL, IDB_WRITELARGE);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    //////////////////////////////////////////////////////////////////////////
 | 
	
		
			
				|  |  | -    // 创建“摄像头”面板:
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        bNameValid = strTemp.LoadString(IDS_RIBBON_CAMERA);
 | 
	
		
			
				|  |  | -        ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -        CMFCRibbonPanel* pPanelCamera = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon(27));
 | 
	
		
			
				|  |  | -        // 排序面板按列垂直对齐元素;
 | 
	
		
			
				|  |  | -        pPanelCamera->SetCenterColumnVert(TRUE);
 | 
	
		
			
				|  |  | -        // 启用或禁用功能区元素的宽度调整在同一列的
 | 
	
		
			
				|  |  | -        pPanelCamera->SetJustifyColumns(TRUE);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 只有组的元素,才能水平对齐;
 | 
	
		
			
				|  |  | -        CMFCRibbonButtonsGroup *pGroup = new CMFCRibbonButtonsGroup();
 | 
	
		
			
				|  |  | -        pPanelCamera->Add(pGroup);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        bNameValid = strTemp.LoadString(IDS_RIBBON_CAMERA_LABEL);
 | 
	
		
			
				|  |  | -        ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -        CMFCRibbonLabel* pCameraLable = new CMFCRibbonLabel(strTemp);
 | 
	
		
			
				|  |  | -        pGroup->AddButton(pCameraLable);
 | 
	
		
			
				|  |  | -        pCameraLable->SetRect(CRect(0,0,150,20));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        CMFCRibbonComboBox *pCameraCombobx = new CMFCRibbonComboBox(ID_RIBBON_CAMERA_COMBOBOX, FALSE);
 | 
	
		
			
				|  |  | -        pGroup->AddButton(pCameraCombobx);
 | 
	
		
			
				|  |  | -        pCameraCombobx->SetWidth(80);
 | 
	
		
			
				|  |  | -        pCameraCombobx->SetCompactMode(FALSE);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        bNameValid = strTemp.LoadString(IDS_RIBBON_CAMERA_FLUSH);
 | 
	
		
			
				|  |  | -        ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -        CMFCRibbonButton *pCameraFlush = new CMFCRibbonButton(ID_RIBBON_CAMERA_FLUSH, strTemp);
 | 
	
		
			
				|  |  | -        pGroup->AddButton(pCameraFlush);
 | 
	
		
			
				|  |  | -        pGroup->SetCompactMode(FALSE);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    //////////////////////////////////////////////////////////////////////////
 | 
	
		
			
				|  |  | -    // 创建“测试精灵”面板:
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        bNameValid = strTemp.LoadString(IDS_RIBBON_INFRAED);
 | 
	
		
			
				|  |  | -        ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -        CMFCRibbonPanel* pPanelInfraed = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon (7));
 | 
	
		
			
				|  |  | -        // 排序面板按列垂直对齐元素;
 | 
	
		
			
				|  |  | -        pPanelInfraed->SetCenterColumnVert(TRUE);
 | 
	
		
			
				|  |  | -        // 启用或禁用功能区元素的宽度调整在同一列的
 | 
	
		
			
				|  |  | -        pPanelInfraed->SetJustifyColumns(TRUE);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 只有组的元素,才能水平对齐;
 | 
	
		
			
				|  |  | -        CMFCRibbonButtonsGroup *pGroup = new CMFCRibbonButtonsGroup();
 | 
	
		
			
				|  |  | -        pPanelInfraed->Add(pGroup);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        CMFCRibbonComboBox* pInfraedCombobox = new CMFCRibbonComboBox(ID_RIBBON_INFRAED_COMBOBOX, FALSE);
 | 
	
		
			
				|  |  | -        pGroup->AddButton(pInfraedCombobox);
 | 
	
		
			
				|  |  | -        pInfraedCombobox->SetWidth(110);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        bNameValid = strTemp.LoadString(IDS_RIBBON_INFRAED_CHECKBOX);
 | 
	
		
			
				|  |  | -        ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -        CMFCRibbonCheckBox *pInfraedCheckbox = new CMFCRibbonCheckBox(ID_RIBBON_INFRAED_CHECKBOX, strTemp);
 | 
	
		
			
				|  |  | -        pGroup->AddButton(pInfraedCheckbox);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 红外遥控版本选择
 | 
	
		
			
				|  |  | -        CMFCRibbonButtonsGroup *pGroup2 = new CMFCRibbonButtonsGroup();
 | 
	
		
			
				|  |  | -        pPanelInfraed->Add(pGroup2);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        bNameValid = strTemp.LoadString(IDS_RIBBON_INFRAED_VERSION);
 | 
	
		
			
				|  |  | -        ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -        CMFCRibbonLabel* pCameraLable = new CMFCRibbonLabel(strTemp);
 | 
	
		
			
				|  |  | -        pGroup2->AddButton(pCameraLable);
 | 
	
		
			
				|  |  | -        pCameraLable->SetRect(CRect(0,0,150,20));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        bNameValid = strTemp.LoadString(IDS_RIBBON_INFRAED_VERSION);
 | 
	
		
			
				|  |  | -        ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -        CMFCRibbonComboBox *pVersion = new CMFCRibbonComboBox(ID_RIBBON_INFRAED_VERSION_COMBOBOX, FALSE);
 | 
	
		
			
				|  |  | -        pGroup2->AddButton(pVersion);
 | 
	
		
			
				|  |  | -        pVersion->SetWidth(80);
 | 
	
		
			
				|  |  | -        pVersion->AddItem(_T("1st-version"));
 | 
	
		
			
				|  |  | -        pVersion->AddItem(_T("2nd-version"));
 | 
	
		
			
				|  |  | -        //pVersion->AddItem(_T("3rd-version"));
 | 
	
		
			
				|  |  | -        //pVersion->AddItem(_T("4th-version"));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        pVersion->SelectItem(Global::g_nVersion-1);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    // 创建“U盘切换器”面板:
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        bNameValid = strTemp.LoadString(IDS_RIBBON_SWITCHER);
 | 
	
		
			
				|  |  | -        ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -        CMFCRibbonPanel* pPanelSwitcher = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon (7));
 | 
	
		
			
				|  |  | -        // 排序面板按列垂直对齐元素;
 | 
	
		
			
				|  |  | -        pPanelSwitcher->SetCenterColumnVert(TRUE);
 | 
	
		
			
				|  |  | -        // 启用或禁用功能区元素的宽度调整在同一列的
 | 
	
		
			
				|  |  | -        pPanelSwitcher->SetJustifyColumns(TRUE);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 只有组的元素,才能水平对齐;
 | 
	
		
			
				|  |  | -        CMFCRibbonButtonsGroup *pGroup = new CMFCRibbonButtonsGroup();
 | 
	
		
			
				|  |  | -        pPanelSwitcher->Add(pGroup);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        CMFCRibbonComboBox* pSwitcherCombobox = new CMFCRibbonComboBox(ID_RIBBON_SWITCHER_COMBOBOX, FALSE);
 | 
	
		
			
				|  |  | -        pGroup->AddButton(pSwitcherCombobox);
 | 
	
		
			
				|  |  | -        pSwitcherCombobox->SetWidth(60);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        bNameValid = strTemp.LoadString(IDS_RIBBON_SWITCHER_CHECKBOX);
 | 
	
		
			
				|  |  | -        ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -        CMFCRibbonCheckBox *pSwitcherCheckbox = new CMFCRibbonCheckBox(ID_RIBBON_SWITCHER_CHECKBOX, strTemp);
 | 
	
		
			
				|  |  | -        pGroup->AddButton(pSwitcherCheckbox);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 只有组的元素,才能水平对齐;
 | 
	
		
			
				|  |  | -        CMFCRibbonButtonsGroup *pGroupCheckBox = new CMFCRibbonButtonsGroup();
 | 
	
		
			
				|  |  | -        pPanelSwitcher->Add(pGroupCheckBox);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        bNameValid = strTemp.LoadString(IDS_RIBBON_SWITCHER_CHECKBOXA);
 | 
	
		
			
				|  |  | -        ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -        CMFCRibbonCheckBox *pSwitcherCheckboxA = new CMFCRibbonCheckBox(ID_RIBBON_SWITCHER_CHECKBOXA, strTemp);
 | 
	
		
			
				|  |  | -        pGroupCheckBox->AddButton(pSwitcherCheckboxA);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        bNameValid = strTemp.LoadString(IDS_RIBBON_SWITCHER_CHECKBOXB);
 | 
	
		
			
				|  |  | -        ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -        CMFCRibbonCheckBox *pSwitcherCheckboxB = new CMFCRibbonCheckBox(ID_RIBBON_SWITCHER_CHECKBOXB, strTemp);
 | 
	
		
			
				|  |  | -        pGroupCheckBox->AddButton(pSwitcherCheckboxB);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    // 将元素添加到选项卡右侧:
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_STYLE);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    CMFCRibbonButton* pVisualStyleButton = new CMFCRibbonButton(-1, strTemp, -1, -1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    pVisualStyleButton->SetMenu(IDR_THEME_MENU, FALSE /* 无默认命令*/, TRUE /* 右对齐*/);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_STYLE_TIP);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pVisualStyleButton->SetToolTipText(strTemp);
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_RIBBON_STYLE_DESC);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pVisualStyleButton->SetDescription(strTemp);
 | 
	
		
			
				|  |  | -    m_wndRibbonBar.AddToTabs(pVisualStyleButton);
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_EXIT);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pMainPanel->AddToBottom(new CMFCRibbonMainPanelButton(ID_APP_EXIT, strTemp, 15));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// 为“剪贴板”面板添加“主”类别:
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_HOME);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	CMFCRibbonCategory* pCategoryHome = m_wndRibbonBar.AddCategory(strTemp, IDB_WRITESMALL, IDB_WRITELARGE);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	//////////////////////////////////////////////////////////////////////////
 | 
	
		
			
				|  |  | +	// 创建“摄像头”面板:
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		bNameValid = strTemp.LoadString(IDS_RIBBON_CAMERA);
 | 
	
		
			
				|  |  | +		ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +		CMFCRibbonPanel* pPanelCamera = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon(27));
 | 
	
		
			
				|  |  | +		// 排序面板按列垂直对齐元素;
 | 
	
		
			
				|  |  | +		pPanelCamera->SetCenterColumnVert(TRUE);
 | 
	
		
			
				|  |  | +		// 启用或禁用功能区元素的宽度调整在同一列的
 | 
	
		
			
				|  |  | +		pPanelCamera->SetJustifyColumns(TRUE);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 只有组的元素,才能水平对齐;
 | 
	
		
			
				|  |  | +		CMFCRibbonButtonsGroup* pGroup = new CMFCRibbonButtonsGroup();
 | 
	
		
			
				|  |  | +		pPanelCamera->Add(pGroup);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		bNameValid = strTemp.LoadString(IDS_RIBBON_CAMERA_LABEL);
 | 
	
		
			
				|  |  | +		ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +		CMFCRibbonLabel* pCameraLable = new CMFCRibbonLabel(strTemp);
 | 
	
		
			
				|  |  | +		pGroup->AddButton(pCameraLable);
 | 
	
		
			
				|  |  | +		pCameraLable->SetRect(CRect(0, 0, 150, 20));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		CMFCRibbonComboBox* pCameraCombobx = new CMFCRibbonComboBox(ID_RIBBON_CAMERA_COMBOBOX, FALSE);
 | 
	
		
			
				|  |  | +		pGroup->AddButton(pCameraCombobx);
 | 
	
		
			
				|  |  | +		pCameraCombobx->SetWidth(80);
 | 
	
		
			
				|  |  | +		pCameraCombobx->SetCompactMode(FALSE);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		bNameValid = strTemp.LoadString(IDS_RIBBON_CAMERA_FLUSH);
 | 
	
		
			
				|  |  | +		ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +		CMFCRibbonButton* pCameraFlush = new CMFCRibbonButton(ID_RIBBON_CAMERA_FLUSH, strTemp);
 | 
	
		
			
				|  |  | +		pGroup->AddButton(pCameraFlush);
 | 
	
		
			
				|  |  | +		pGroup->SetCompactMode(FALSE);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	//////////////////////////////////////////////////////////////////////////
 | 
	
		
			
				|  |  | +	// 创建“测试精灵”面板:
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		bNameValid = strTemp.LoadString(IDS_RIBBON_INFRAED);
 | 
	
		
			
				|  |  | +		ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +		CMFCRibbonPanel* pPanelInfraed = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon(7));
 | 
	
		
			
				|  |  | +		// 排序面板按列垂直对齐元素;
 | 
	
		
			
				|  |  | +		pPanelInfraed->SetCenterColumnVert(TRUE);
 | 
	
		
			
				|  |  | +		// 启用或禁用功能区元素的宽度调整在同一列的
 | 
	
		
			
				|  |  | +		pPanelInfraed->SetJustifyColumns(TRUE);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 只有组的元素,才能水平对齐;
 | 
	
		
			
				|  |  | +		CMFCRibbonButtonsGroup* pGroup = new CMFCRibbonButtonsGroup();
 | 
	
		
			
				|  |  | +		pPanelInfraed->Add(pGroup);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		CMFCRibbonComboBox* pInfraedCombobox = new CMFCRibbonComboBox(ID_RIBBON_INFRAED_COMBOBOX, FALSE);
 | 
	
		
			
				|  |  | +		pGroup->AddButton(pInfraedCombobox);
 | 
	
		
			
				|  |  | +		pInfraedCombobox->SetWidth(110);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		bNameValid = strTemp.LoadString(IDS_RIBBON_INFRAED_CHECKBOX);
 | 
	
		
			
				|  |  | +		ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +		CMFCRibbonCheckBox* pInfraedCheckbox = new CMFCRibbonCheckBox(ID_RIBBON_INFRAED_CHECKBOX, strTemp);
 | 
	
		
			
				|  |  | +		pGroup->AddButton(pInfraedCheckbox);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 红外遥控版本选择
 | 
	
		
			
				|  |  | +		CMFCRibbonButtonsGroup* pGroup2 = new CMFCRibbonButtonsGroup();
 | 
	
		
			
				|  |  | +		pPanelInfraed->Add(pGroup2);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		bNameValid = strTemp.LoadString(IDS_RIBBON_INFRAED_VERSION);
 | 
	
		
			
				|  |  | +		ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +		CMFCRibbonLabel* pCameraLable = new CMFCRibbonLabel(strTemp);
 | 
	
		
			
				|  |  | +		pGroup2->AddButton(pCameraLable);
 | 
	
		
			
				|  |  | +		pCameraLable->SetRect(CRect(0, 0, 150, 20));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		bNameValid = strTemp.LoadString(IDS_RIBBON_INFRAED_VERSION);
 | 
	
		
			
				|  |  | +		ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +		CMFCRibbonComboBox* pVersion = new CMFCRibbonComboBox(ID_RIBBON_INFRAED_VERSION_COMBOBOX, FALSE);
 | 
	
		
			
				|  |  | +		pGroup2->AddButton(pVersion);
 | 
	
		
			
				|  |  | +		pVersion->SetWidth(80);
 | 
	
		
			
				|  |  | +		pVersion->AddItem(_T("1st-version"));
 | 
	
		
			
				|  |  | +		pVersion->AddItem(_T("2nd-version"));
 | 
	
		
			
				|  |  | +		//pVersion->AddItem(_T("3rd-version"));
 | 
	
		
			
				|  |  | +		//pVersion->AddItem(_T("4th-version"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		pVersion->SelectItem(Global::g_nVersion - 1);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// 创建“U盘切换器”面板:
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		bNameValid = strTemp.LoadString(IDS_RIBBON_SWITCHER);
 | 
	
		
			
				|  |  | +		ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +		CMFCRibbonPanel* pPanelSwitcher = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon(7));
 | 
	
		
			
				|  |  | +		// 排序面板按列垂直对齐元素;
 | 
	
		
			
				|  |  | +		pPanelSwitcher->SetCenterColumnVert(TRUE);
 | 
	
		
			
				|  |  | +		// 启用或禁用功能区元素的宽度调整在同一列的
 | 
	
		
			
				|  |  | +		pPanelSwitcher->SetJustifyColumns(TRUE);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 只有组的元素,才能水平对齐;
 | 
	
		
			
				|  |  | +		CMFCRibbonButtonsGroup* pGroup = new CMFCRibbonButtonsGroup();
 | 
	
		
			
				|  |  | +		pPanelSwitcher->Add(pGroup);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		CMFCRibbonComboBox* pSwitcherCombobox = new CMFCRibbonComboBox(ID_RIBBON_SWITCHER_COMBOBOX, FALSE);
 | 
	
		
			
				|  |  | +		pGroup->AddButton(pSwitcherCombobox);
 | 
	
		
			
				|  |  | +		pSwitcherCombobox->SetWidth(60);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		bNameValid = strTemp.LoadString(IDS_RIBBON_SWITCHER_CHECKBOX);
 | 
	
		
			
				|  |  | +		ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +		CMFCRibbonCheckBox* pSwitcherCheckbox = new CMFCRibbonCheckBox(ID_RIBBON_SWITCHER_CHECKBOX, strTemp);
 | 
	
		
			
				|  |  | +		pGroup->AddButton(pSwitcherCheckbox);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 只有组的元素,才能水平对齐;
 | 
	
		
			
				|  |  | +		CMFCRibbonButtonsGroup* pGroupCheckBox = new CMFCRibbonButtonsGroup();
 | 
	
		
			
				|  |  | +		pPanelSwitcher->Add(pGroupCheckBox);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		bNameValid = strTemp.LoadString(IDS_RIBBON_SWITCHER_CHECKBOXA);
 | 
	
		
			
				|  |  | +		ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +		CMFCRibbonCheckBox* pSwitcherCheckboxA = new CMFCRibbonCheckBox(ID_RIBBON_SWITCHER_CHECKBOXA, strTemp);
 | 
	
		
			
				|  |  | +		pGroupCheckBox->AddButton(pSwitcherCheckboxA);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		bNameValid = strTemp.LoadString(IDS_RIBBON_SWITCHER_CHECKBOXB);
 | 
	
		
			
				|  |  | +		ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +		CMFCRibbonCheckBox* pSwitcherCheckboxB = new CMFCRibbonCheckBox(ID_RIBBON_SWITCHER_CHECKBOXB, strTemp);
 | 
	
		
			
				|  |  | +		pGroupCheckBox->AddButton(pSwitcherCheckboxB);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// 将元素添加到选项卡右侧:
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_STYLE);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	CMFCRibbonButton* pVisualStyleButton = new CMFCRibbonButton(-1, strTemp, -1, -1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	pVisualStyleButton->SetMenu(IDR_THEME_MENU, FALSE /* 无默认命令*/, TRUE /* 右对齐*/);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_STYLE_TIP);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pVisualStyleButton->SetToolTipText(strTemp);
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_RIBBON_STYLE_DESC);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pVisualStyleButton->SetDescription(strTemp);
 | 
	
		
			
				|  |  | +	m_wndRibbonBar.AddToTabs(pVisualStyleButton);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifndef DISABLE_QUICKACCESS
 | 
	
		
			
				|  |  | -    // 添加快速访问工具栏命令:
 | 
	
		
			
				|  |  | -    CList<UINT, UINT> lstQATCmds;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    lstQATCmds.AddTail(ID_FILE_NEW);
 | 
	
		
			
				|  |  | -    lstQATCmds.AddTail(ID_FILE_OPEN);
 | 
	
		
			
				|  |  | -    lstQATCmds.AddTail(ID_FILE_SAVE);
 | 
	
		
			
				|  |  | -    lstQATCmds.AddTail(ID_FILE_PRINT_DIRECT);
 | 
	
		
			
				|  |  | -    m_wndRibbonBar.SetQuickAccessCommands(lstQATCmds);
 | 
	
		
			
				|  |  | +	// 添加快速访问工具栏命令:
 | 
	
		
			
				|  |  | +	CList<UINT, UINT> lstQATCmds;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	lstQATCmds.AddTail(ID_FILE_NEW);
 | 
	
		
			
				|  |  | +	lstQATCmds.AddTail(ID_FILE_OPEN);
 | 
	
		
			
				|  |  | +	lstQATCmds.AddTail(ID_FILE_SAVE);
 | 
	
		
			
				|  |  | +	lstQATCmds.AddTail(ID_FILE_PRINT_DIRECT);
 | 
	
		
			
				|  |  | +	m_wndRibbonBar.SetQuickAccessCommands(lstQATCmds);
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    m_wndRibbonBar.AddToTabs(new CMFCRibbonButton(ID_APP_ABOUT, _T("\na"), m_PanelImages.ExtractIcon (0)));
 | 
	
		
			
				|  |  | +	m_wndRibbonBar.AddToTabs(new CMFCRibbonButton(ID_APP_ABOUT, _T("\na"), m_PanelImages.ExtractIcon(0)));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  BOOL CMainFrame::CreateDockingWindows()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    BOOL bNameValid;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    // 创建属性窗口
 | 
	
		
			
				|  |  | -    CString strPropertiesWnd;
 | 
	
		
			
				|  |  | -    bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    if (!m_wndProperties.Create(strPropertiesWnd, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        TRACE0("未能创建“属性”窗口\n");
 | 
	
		
			
				|  |  | -        return FALSE; // 未能创建
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    SetDockingWindowIcons(theApp.m_bHiColorIcons);
 | 
	
		
			
				|  |  | -    return TRUE;
 | 
	
		
			
				|  |  | +	BOOL bNameValid;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// 创建属性窗口
 | 
	
		
			
				|  |  | +	CString strPropertiesWnd;
 | 
	
		
			
				|  |  | +	bNameValid = strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	if (!m_wndProperties.Create(strPropertiesWnd, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI))
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		TRACE0("未能创建“属性”窗口\n");
 | 
	
		
			
				|  |  | +		return FALSE; // 未能创建
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	SetDockingWindowIcons(theApp.m_bHiColorIcons);
 | 
	
		
			
				|  |  | +	return TRUE;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
 | 
	
		
			
				|  |  | -    m_wndProperties.SetIcon(hPropertiesBarIcon, FALSE);
 | 
	
		
			
				|  |  | +	HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0);
 | 
	
		
			
				|  |  | +	m_wndProperties.SetIcon(hPropertiesBarIcon, FALSE);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    UpdateMDITabbedBarsIcons();
 | 
	
		
			
				|  |  | +	UpdateMDITabbedBarsIcons();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifndef DISABLE_OUTLOOKBAR
 | 
	
		
			
				|  |  |  BOOL CMainFrame::CreateOutlookBar(CMFCOutlookBar& bar, UINT uiID, CMFCShellTreeCtrl& tree, CCalendarBar& calendar, int nInitialWidth)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CWindowDC dc(NULL);
 | 
	
		
			
				|  |  | +	CWindowDC dc(NULL);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    bar.SetMode2003();
 | 
	
		
			
				|  |  | +	bar.SetMode2003();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    BOOL bNameValid;
 | 
	
		
			
				|  |  | -    CString strTemp;
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_SHORTCUTS);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    if (!bar.Create(strTemp, this, CRect(0, 0, nInitialWidth, 32000), uiID, WS_CHILD | WS_VISIBLE | CBRS_LEFT))
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        return FALSE; // 未能创建
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	BOOL bNameValid;
 | 
	
		
			
				|  |  | +	CString strTemp;
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_SHORTCUTS);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	if (!bar.Create(strTemp, this, CRect(0, 0, nInitialWidth, 32000), uiID, WS_CHILD | WS_VISIBLE | CBRS_LEFT))
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		return FALSE; // 未能创建
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    CMFCOutlookBarTabCtrl* pOutlookBar = (CMFCOutlookBarTabCtrl*)bar.GetUnderlyingWindow();
 | 
	
		
			
				|  |  | +	CMFCOutlookBarTabCtrl* pOutlookBar = (CMFCOutlookBarTabCtrl*)bar.GetUnderlyingWindow();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (pOutlookBar == NULL)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        ASSERT(FALSE);
 | 
	
		
			
				|  |  | -        return FALSE;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	if (pOutlookBar == NULL)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		ASSERT(FALSE);
 | 
	
		
			
				|  |  | +		return FALSE;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    pOutlookBar->EnableInPlaceEdit(TRUE);
 | 
	
		
			
				|  |  | +	pOutlookBar->EnableInPlaceEdit(TRUE);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    static UINT uiPageID = 1;
 | 
	
		
			
				|  |  | +	static UINT uiPageID = 1;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    DWORD dwPaneStyle = AFX_DEFAULT_TOOLBAR_STYLE | CBRS_FLOAT_MULTI;
 | 
	
		
			
				|  |  | +	DWORD dwPaneStyle = AFX_DEFAULT_TOOLBAR_STYLE | CBRS_FLOAT_MULTI;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // 可浮动,可自动隐藏,可调整大小,但不能关闭
 | 
	
		
			
				|  |  | -    DWORD dwStyle = AFX_CBRS_FLOAT | AFX_CBRS_AUTOHIDE | AFX_CBRS_RESIZE;
 | 
	
		
			
				|  |  | +	// 可浮动,可自动隐藏,可调整大小,但不能关闭
 | 
	
		
			
				|  |  | +	DWORD dwStyle = AFX_CBRS_FLOAT | AFX_CBRS_AUTOHIDE | AFX_CBRS_RESIZE;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    CRect rectDummy(0, 0, 0, 0);
 | 
	
		
			
				|  |  | -    const DWORD dwTreeStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS;
 | 
	
		
			
				|  |  | +	CRect rectDummy(0, 0, 0, 0);
 | 
	
		
			
				|  |  | +	const DWORD dwTreeStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    tree.Create(dwTreeStyle, rectDummy, &bar, 1200);
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_FOLDERS);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pOutlookBar->AddControl(&tree, strTemp, 2, TRUE, dwStyle);
 | 
	
		
			
				|  |  | +	tree.Create(dwTreeStyle, rectDummy, &bar, 1200);
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_FOLDERS);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pOutlookBar->AddControl(&tree, strTemp, 2, TRUE, dwStyle);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    calendar.Create(rectDummy, &bar, 1201);
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_CALENDAR);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    pOutlookBar->AddControl(&calendar, strTemp, 3, TRUE, dwStyle);
 | 
	
		
			
				|  |  | +	calendar.Create(rectDummy, &bar, 1201);
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_CALENDAR);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	pOutlookBar->AddControl(&calendar, strTemp, 3, TRUE, dwStyle);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    bar.SetPaneStyle(bar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
 | 
	
		
			
				|  |  | +	bar.SetPaneStyle(bar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    pOutlookBar->SetImageList(theApp.m_bHiColorIcons ? IDB_PAGES_HC : IDB_PAGES, 24);
 | 
	
		
			
				|  |  | -    pOutlookBar->SetToolbarImageList(theApp.m_bHiColorIcons ? IDB_PAGES_SMALL_HC : IDB_PAGES_SMALL, 16);
 | 
	
		
			
				|  |  | -    pOutlookBar->RecalcLayout();
 | 
	
		
			
				|  |  | +	pOutlookBar->SetImageList(theApp.m_bHiColorIcons ? IDB_PAGES_HC : IDB_PAGES, 24);
 | 
	
		
			
				|  |  | +	pOutlookBar->SetToolbarImageList(theApp.m_bHiColorIcons ? IDB_PAGES_SMALL_HC : IDB_PAGES_SMALL, 16);
 | 
	
		
			
				|  |  | +	pOutlookBar->RecalcLayout();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    BOOL bAnimation = theApp.GetInt(_T("OutlookAnimation"), TRUE);
 | 
	
		
			
				|  |  | -    CMFCOutlookBarTabCtrl::EnableAnimation(bAnimation);
 | 
	
		
			
				|  |  | +	BOOL bAnimation = theApp.GetInt(_T("OutlookAnimation"), TRUE);
 | 
	
		
			
				|  |  | +	CMFCOutlookBarTabCtrl::EnableAnimation(bAnimation);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    bar.SetButtonsFont(&afxGlobalData.fontBold);
 | 
	
		
			
				|  |  | +	bar.SetButtonsFont(&afxGlobalData.fontBold);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    return TRUE;
 | 
	
		
			
				|  |  | +	return TRUE;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifndef DISABLE_CAPTIONBAR
 | 
	
		
			
				|  |  |  BOOL CMainFrame::CreateCaptionBar()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    if (!m_wndCaptionBar.Create(WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, this, ID_VIEW_CAPTION_BAR, -1, TRUE))
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        TRACE0("未能创建标题栏\n");
 | 
	
		
			
				|  |  | -        return FALSE;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    BOOL bNameValid;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    CString strTemp, strTemp2;
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    m_wndCaptionBar.SetButton(strTemp, ID_TOOLS_OPTIONS, CMFCCaptionBar::ALIGN_LEFT, FALSE);
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON_TIP);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    m_wndCaptionBar.SetButtonToolTip(strTemp);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_CAPTION_TEXT);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    m_wndCaptionBar.SetText(strTemp, CMFCCaptionBar::ALIGN_LEFT);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    m_wndCaptionBar.SetBitmap(IDB_INFO, RGB(255, 255, 255), FALSE, CMFCCaptionBar::ALIGN_LEFT);
 | 
	
		
			
				|  |  | -    bNameValid = strTemp.LoadString(IDS_CAPTION_IMAGE_TIP);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    bNameValid = strTemp2.LoadString(IDS_CAPTION_IMAGE_TEXT);
 | 
	
		
			
				|  |  | -    ASSERT(bNameValid);
 | 
	
		
			
				|  |  | -    m_wndCaptionBar.SetImageToolTip(strTemp, strTemp2);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    return TRUE;
 | 
	
		
			
				|  |  | +	if (!m_wndCaptionBar.Create(WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, this, ID_VIEW_CAPTION_BAR, -1, TRUE))
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		TRACE0("未能创建标题栏\n");
 | 
	
		
			
				|  |  | +		return FALSE;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	BOOL bNameValid;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	CString strTemp, strTemp2;
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	m_wndCaptionBar.SetButton(strTemp, ID_TOOLS_OPTIONS, CMFCCaptionBar::ALIGN_LEFT, FALSE);
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON_TIP);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	m_wndCaptionBar.SetButtonToolTip(strTemp);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_CAPTION_TEXT);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	m_wndCaptionBar.SetText(strTemp, CMFCCaptionBar::ALIGN_LEFT);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	m_wndCaptionBar.SetBitmap(IDB_INFO, RGB(255, 255, 255), FALSE, CMFCCaptionBar::ALIGN_LEFT);
 | 
	
		
			
				|  |  | +	bNameValid = strTemp.LoadString(IDS_CAPTION_IMAGE_TIP);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	bNameValid = strTemp2.LoadString(IDS_CAPTION_IMAGE_TEXT);
 | 
	
		
			
				|  |  | +	ASSERT(bNameValid);
 | 
	
		
			
				|  |  | +	m_wndCaptionBar.SetImageToolTip(strTemp, strTemp2);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return TRUE;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -548,12 +548,12 @@ BOOL CMainFrame::CreateCaptionBar()
 | 
	
		
			
				|  |  |  #ifdef _DEBUG
 | 
	
		
			
				|  |  |  void CMainFrame::AssertValid() const
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMDIFrameWndEx::AssertValid();
 | 
	
		
			
				|  |  | +	CMDIFrameWndEx::AssertValid();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::Dump(CDumpContext& dc) const
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMDIFrameWndEx::Dump(dc);
 | 
	
		
			
				|  |  | +	CMDIFrameWndEx::Dump(dc);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  #endif //_DEBUG
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -562,843 +562,848 @@ void CMainFrame::Dump(CDumpContext& dc) const
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnWindowManager()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    ShowWindowsDialog();
 | 
	
		
			
				|  |  | +	ShowWindowsDialog();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnApplicationLook(UINT id)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CWaitCursor wait;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    theApp.m_nAppLook = id;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    switch (theApp.m_nAppLook)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -    case ID_VIEW_APPLOOK_WIN_2000:
 | 
	
		
			
				|  |  | -        CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager));
 | 
	
		
			
				|  |  | -        break;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    case ID_VIEW_APPLOOK_OFF_XP:
 | 
	
		
			
				|  |  | -        CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));
 | 
	
		
			
				|  |  | -        break;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    case ID_VIEW_APPLOOK_WIN_XP:
 | 
	
		
			
				|  |  | -        CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;
 | 
	
		
			
				|  |  | -        CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
 | 
	
		
			
				|  |  | -        break;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    case ID_VIEW_APPLOOK_OFF_2003:
 | 
	
		
			
				|  |  | -        CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));
 | 
	
		
			
				|  |  | -        CDockingManager::SetDockingMode(DT_SMART);
 | 
	
		
			
				|  |  | -        break;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    case ID_VIEW_APPLOOK_VS_2005:
 | 
	
		
			
				|  |  | -        CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));
 | 
	
		
			
				|  |  | -        CDockingManager::SetDockingMode(DT_SMART);
 | 
	
		
			
				|  |  | -        break;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    default:
 | 
	
		
			
				|  |  | -        switch (theApp.m_nAppLook)
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -        case ID_VIEW_APPLOOK_OFF_2007_BLUE:
 | 
	
		
			
				|  |  | -            CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
 | 
	
		
			
				|  |  | -            break;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        case ID_VIEW_APPLOOK_OFF_2007_BLACK:
 | 
	
		
			
				|  |  | -            CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
 | 
	
		
			
				|  |  | -            break;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        case ID_VIEW_APPLOOK_OFF_2007_SILVER:
 | 
	
		
			
				|  |  | -            CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
 | 
	
		
			
				|  |  | -            break;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        case ID_VIEW_APPLOOK_OFF_2007_AQUA:
 | 
	
		
			
				|  |  | -            CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);
 | 
	
		
			
				|  |  | -            break;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
 | 
	
		
			
				|  |  | -        CDockingManager::SetDockingMode(DT_SMART);
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);
 | 
	
		
			
				|  |  | +	CWaitCursor wait;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	theApp.m_nAppLook = id;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	switch (theApp.m_nAppLook)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +	case ID_VIEW_APPLOOK_WIN_2000:
 | 
	
		
			
				|  |  | +		CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager));
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	case ID_VIEW_APPLOOK_OFF_XP:
 | 
	
		
			
				|  |  | +		CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP));
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	case ID_VIEW_APPLOOK_WIN_XP:
 | 
	
		
			
				|  |  | +		CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE;
 | 
	
		
			
				|  |  | +		CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	case ID_VIEW_APPLOOK_OFF_2003:
 | 
	
		
			
				|  |  | +		CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003));
 | 
	
		
			
				|  |  | +		CDockingManager::SetDockingMode(DT_SMART);
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	case ID_VIEW_APPLOOK_VS_2005:
 | 
	
		
			
				|  |  | +		CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));
 | 
	
		
			
				|  |  | +		CDockingManager::SetDockingMode(DT_SMART);
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	default:
 | 
	
		
			
				|  |  | +		switch (theApp.m_nAppLook)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +		case ID_VIEW_APPLOOK_OFF_2007_BLUE:
 | 
	
		
			
				|  |  | +			CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue);
 | 
	
		
			
				|  |  | +			break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		case ID_VIEW_APPLOOK_OFF_2007_BLACK:
 | 
	
		
			
				|  |  | +			CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack);
 | 
	
		
			
				|  |  | +			break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		case ID_VIEW_APPLOOK_OFF_2007_SILVER:
 | 
	
		
			
				|  |  | +			CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver);
 | 
	
		
			
				|  |  | +			break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		case ID_VIEW_APPLOOK_OFF_2007_AQUA:
 | 
	
		
			
				|  |  | +			CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua);
 | 
	
		
			
				|  |  | +			break;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007));
 | 
	
		
			
				|  |  | +		CDockingManager::SetDockingMode(DT_SMART);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnUpdateApplicationLook(CCmdUI* pCmdUI)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID);
 | 
	
		
			
				|  |  | +	pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifndef DISABLE_CAPTIONBAR
 | 
	
		
			
				|  |  |  void CMainFrame::OnViewCaptionBar()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    m_wndCaptionBar.ShowWindow(m_wndCaptionBar.IsVisible() ? SW_HIDE : SW_SHOW);
 | 
	
		
			
				|  |  | -    RecalcLayout(FALSE);
 | 
	
		
			
				|  |  | +	m_wndCaptionBar.ShowWindow(m_wndCaptionBar.IsVisible() ? SW_HIDE : SW_SHOW);
 | 
	
		
			
				|  |  | +	RecalcLayout(FALSE);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnUpdateViewCaptionBar(CCmdUI* pCmdUI)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    pCmdUI->SetCheck(m_wndCaptionBar.IsVisible());
 | 
	
		
			
				|  |  | +	pCmdUI->SetCheck(m_wndCaptionBar.IsVisible());
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnCameraCombobox()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pCameraCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_CAMERA_COMBOBOX));
 | 
	
		
			
				|  |  | -    if ( pCameraCombo )
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        int nCurSel = pCameraCombo->GetCurSel();
 | 
	
		
			
				|  |  | -        if ( nCurSel != -1 )
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            if ( m_pChildFrame )
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                CFieldTestToolView *pView = (CFieldTestToolView*)m_pChildFrame->GetActiveView();
 | 
	
		
			
				|  |  | -                if ( pView->m_pCamera )
 | 
	
		
			
				|  |  | -                    delete pView->m_pCamera;
 | 
	
		
			
				|  |  | -                pView->m_pCamera = NULL;
 | 
	
		
			
				|  |  | -                pView->DestroyWindow(); //pView->SendMessage(WM_CLOSE, 0, 0);
 | 
	
		
			
				|  |  | -                m_pChildFrame->DestroyWindow(); //m_pChildFrame->SendMessage(WM_CLOSE, 0, 0);
 | 
	
		
			
				|  |  | -                m_pChildFrame = NULL;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            CString strCamera = pCameraCombo->GetItem(nCurSel);
 | 
	
		
			
				|  |  | -            OutputDebugString(strCamera + _T("\r\n"));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            CCreateContext context;
 | 
	
		
			
				|  |  | -            m_pChildFrame = new CChildFrame();
 | 
	
		
			
				|  |  | -            context.m_pLastView = NULL;
 | 
	
		
			
				|  |  | -            context.m_pCurrentFrame = this;
 | 
	
		
			
				|  |  | -            // 不要使用m_pDoc,这个是会在第一次随m_pChildFrame->DestroyWindow或m_pChildFrame->SendMessage(WM_CLOSE, 0, 0);销毁
 | 
	
		
			
				|  |  | -            // 再次使用时m_pDoc是野指针,导致LoadFrame出错;
 | 
	
		
			
				|  |  | -            context.m_pCurrentDoc = NULL;//m_pDocTemplate->CreateNewDocument();
 | 
	
		
			
				|  |  | -            context.m_pNewViewClass = RUNTIME_CLASS(CFieldTestToolView);
 | 
	
		
			
				|  |  | -            context.m_pNewDocTemplate = m_pDocTemplate;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if (m_pChildFrame->LoadFrame(IDR_MAINFRAME, WS_MAXIMIZE | WS_CHILDWINDOW, this, &context))
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                m_pChildFrame->MDIActivate();
 | 
	
		
			
				|  |  | -                m_pChildFrame->InitialUpdateFrame(m_pDoc, TRUE);
 | 
	
		
			
				|  |  | -                m_pChildFrame->ShowWindow(SW_SHOWMAXIMIZED);
 | 
	
		
			
				|  |  | -                CFieldTestToolView *pView = (CFieldTestToolView*)m_pChildFrame->GetActiveView();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                if ( pView )
 | 
	
		
			
				|  |  | -                    pView->m_pCamera = new CCaptureVideo();
 | 
	
		
			
				|  |  | -                pView->m_pCamera->Init(nCurSel, m_pChildFrame->GetSafeHwnd());
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pCameraCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_CAMERA_COMBOBOX));
 | 
	
		
			
				|  |  | +	if (pCameraCombo)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		int nCurSel = pCameraCombo->GetCurSel();
 | 
	
		
			
				|  |  | +		if (nCurSel != -1)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			if (m_pChildFrame)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				CFieldTestToolView* pView = (CFieldTestToolView*)m_pChildFrame->GetActiveView();
 | 
	
		
			
				|  |  | +				if (pView->m_pCamera)
 | 
	
		
			
				|  |  | +					delete pView->m_pCamera;
 | 
	
		
			
				|  |  | +				pView->m_pCamera = NULL;
 | 
	
		
			
				|  |  | +				pView->DestroyWindow(); //pView->SendMessage(WM_CLOSE, 0, 0);
 | 
	
		
			
				|  |  | +				m_pChildFrame->DestroyWindow(); //m_pChildFrame->SendMessage(WM_CLOSE, 0, 0);
 | 
	
		
			
				|  |  | +				m_pChildFrame = NULL;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			CString strCamera = pCameraCombo->GetItem(nCurSel);
 | 
	
		
			
				|  |  | +			OutputDebugString(strCamera + _T("\r\n"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			CCreateContext context;
 | 
	
		
			
				|  |  | +			m_pChildFrame = new CChildFrame();
 | 
	
		
			
				|  |  | +			context.m_pLastView = NULL;
 | 
	
		
			
				|  |  | +			context.m_pCurrentFrame = this;
 | 
	
		
			
				|  |  | +			// 不要使用m_pDoc,这个是会在第一次随m_pChildFrame->DestroyWindow或m_pChildFrame->SendMessage(WM_CLOSE, 0, 0);销毁
 | 
	
		
			
				|  |  | +			// 再次使用时m_pDoc是野指针,导致LoadFrame出错;
 | 
	
		
			
				|  |  | +			context.m_pCurrentDoc = NULL;//m_pDocTemplate->CreateNewDocument();
 | 
	
		
			
				|  |  | +			context.m_pNewViewClass = RUNTIME_CLASS(CFieldTestToolView);
 | 
	
		
			
				|  |  | +			context.m_pNewDocTemplate = m_pDocTemplate;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if (m_pChildFrame->LoadFrame(IDR_MAINFRAME, WS_MAXIMIZE | WS_CHILDWINDOW, this, &context))
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				m_pChildFrame->MDIActivate();
 | 
	
		
			
				|  |  | +				m_pChildFrame->InitialUpdateFrame(m_pDoc, TRUE);
 | 
	
		
			
				|  |  | +				m_pChildFrame->ShowWindow(SW_SHOWMAXIMIZED);
 | 
	
		
			
				|  |  | +				CFieldTestToolView* pView = (CFieldTestToolView*)m_pChildFrame->GetActiveView();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				if (pView)
 | 
	
		
			
				|  |  | +					pView->m_pCamera = new CCaptureVideo();
 | 
	
		
			
				|  |  | +				pView->m_pCamera->Init(nCurSel, m_pChildFrame->GetSafeHwnd());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnUpdateCameraCombobox(CCmdUI* pCmdUI)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    //pCmdUI->SetCheck(m_wndCaptionBar.IsVisible());
 | 
	
		
			
				|  |  | +	//pCmdUI->SetCheck(m_wndCaptionBar.IsVisible());
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnInfraedCombobox()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pCameraCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_CAMERA_COMBOBOX));
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pCameraCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_CAMERA_COMBOBOX));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnUpdateInfraedCombobox(CCmdUI* pCmdUI)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonCheckBox* pInfraedCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_INFRAED_CHECKBOX));
 | 
	
		
			
				|  |  | -    pCmdUI->Enable(!pInfraedCheckbox->IsChecked());
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonCheckBox* pInfraedCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_INFRAED_CHECKBOX));
 | 
	
		
			
				|  |  | +	pCmdUI->Enable(!pInfraedCheckbox->IsChecked());
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnInfraedCheckbox()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonCheckBox* pInfraedCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_INFRAED_CHECKBOX));
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pInfraedCombobox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_COMBOBOX));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    if ( !pInfraedCheckbox->IsChecked() )
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        int nCurSel = pInfraedCombobox->GetCurSel();
 | 
	
		
			
				|  |  | -        if ( nCurSel != CB_ERR ) 
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            m_SerialTW.SetIOMode();
 | 
	
		
			
				|  |  | -            CString strText = pInfraedCombobox->GetItem(nCurSel);
 | 
	
		
			
				|  |  | -            if ( m_SerialTW.Open(atol(strText.Mid(3).GetString()), 115200) )
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                // 由于芯片性能不一样,导致串口读写超时也不一样;
 | 
	
		
			
				|  |  | -                if ( Global::g_nVersion == 1 )
 | 
	
		
			
				|  |  | -                    m_SerialTW.SetTimeouts();
 | 
	
		
			
				|  |  | -                else if ( Global::g_nVersion == 2 )
 | 
	
		
			
				|  |  | -                    m_SerialTW.SetTimeouts();//未验证其超时值;
 | 
	
		
			
				|  |  | -            
 | 
	
		
			
				|  |  | -                m_SerialTW.SetBufferSize(1024,1024);
 | 
	
		
			
				|  |  | -                WritePrivateProfileString("TestWizard", "Com", strText.GetString(), Global::g_szConfig);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    else
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        if ( m_SerialTW.IsOpen() )
 | 
	
		
			
				|  |  | -            m_SerialTW.Close();
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonCheckBox* pInfraedCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_INFRAED_CHECKBOX));
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pInfraedCombobox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_COMBOBOX));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!pInfraedCheckbox->IsChecked())
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		int nCurSel = pInfraedCombobox->GetCurSel();
 | 
	
		
			
				|  |  | +		if (nCurSel != CB_ERR)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			m_SerialTW.SetIOMode();
 | 
	
		
			
				|  |  | +			CString strText = pInfraedCombobox->GetItem(nCurSel);
 | 
	
		
			
				|  |  | +			if (m_SerialTW.Open(atol(strText.Mid(3).GetString()), 115200))
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				// 由于芯片性能不一样,导致串口读写超时也不一样;
 | 
	
		
			
				|  |  | +				if (Global::g_nVersion == 1)
 | 
	
		
			
				|  |  | +					m_SerialTW.SetTimeouts();
 | 
	
		
			
				|  |  | +				else if (Global::g_nVersion == 2)
 | 
	
		
			
				|  |  | +					m_SerialTW.SetTimeouts();//未验证其超时值;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				m_SerialTW.SetBufferSize(1024, 1024);
 | 
	
		
			
				|  |  | +				WritePrivateProfileString("TestWizard", "Com", strText.GetString(), Global::g_szConfig);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	else
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		if (m_SerialTW.IsOpen())
 | 
	
		
			
				|  |  | +			m_SerialTW.Close();
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnUpdateInfraedCheckbox(CCmdUI* pCmdUI)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    pCmdUI->SetCheck(m_SerialTW.IsOpen());
 | 
	
		
			
				|  |  | +	pCmdUI->SetCheck(m_SerialTW.IsOpen());
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnInfraedVersionCombobox()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pVersionCombobox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_VERSION_COMBOBOX));
 | 
	
		
			
				|  |  | -    if ( pVersionCombobox )
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        Global::g_nVersion = pVersionCombobox->GetCurSel();
 | 
	
		
			
				|  |  | -        if (Global::g_nVersion != CB_ERR )
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            Global::g_nVersion++;
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pVersionCombobox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_VERSION_COMBOBOX));
 | 
	
		
			
				|  |  | +	if (pVersionCombobox)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		Global::g_nVersion = pVersionCombobox->GetCurSel();
 | 
	
		
			
				|  |  | +		if (Global::g_nVersion != CB_ERR)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			Global::g_nVersion++;
 | 
	
		
			
				|  |  |  #if _MSC_VER <= 1500
 | 
	
		
			
				|  |  | -            if (Global::g_nVersion == 1 )
 | 
	
		
			
				|  |  | -                WritePrivateProfileString("TestWizard", "Ver", "1", Global::g_szConfig);
 | 
	
		
			
				|  |  | -            else if (Global::g_nVersion == 2 )
 | 
	
		
			
				|  |  | -                WritePrivateProfileString("TestWizard", "Ver", "2", Global::g_szConfig);
 | 
	
		
			
				|  |  | -            else if (Global::g_nVersion == 3 )
 | 
	
		
			
				|  |  | -                WritePrivateProfileString("TestWizard", "Ver", "3", Global::g_szConfig);
 | 
	
		
			
				|  |  | -            else if (Global::g_nVersion == 4)
 | 
	
		
			
				|  |  | -                WritePrivateProfileString("TestWizard", "Ver", "4", Global::g_szConfig);
 | 
	
		
			
				|  |  | +			if (Global::g_nVersion == 1)
 | 
	
		
			
				|  |  | +				WritePrivateProfileString("TestWizard", "Ver", "1", Global::g_szConfig);
 | 
	
		
			
				|  |  | +			else if (Global::g_nVersion == 2)
 | 
	
		
			
				|  |  | +				WritePrivateProfileString("TestWizard", "Ver", "2", Global::g_szConfig);
 | 
	
		
			
				|  |  | +			else if (Global::g_nVersion == 3)
 | 
	
		
			
				|  |  | +				WritePrivateProfileString("TestWizard", "Ver", "3", Global::g_szConfig);
 | 
	
		
			
				|  |  | +			else if (Global::g_nVersion == 4)
 | 
	
		
			
				|  |  | +				WritePrivateProfileString("TestWizard", "Ver", "4", Global::g_szConfig);
 | 
	
		
			
				|  |  |  #else
 | 
	
		
			
				|  |  | -            // C++11直接用lambda表示式处理;
 | 
	
		
			
				|  |  | -            WritePrivateProfileString("TestWizard", "Ver", [](int nVer)->LPCSTR{
 | 
	
		
			
				|  |  | -                if (nVer == 1)
 | 
	
		
			
				|  |  | -                    return _T("1");
 | 
	
		
			
				|  |  | -                else if (nVer == 2)
 | 
	
		
			
				|  |  | -                    return _T("2");
 | 
	
		
			
				|  |  | -                else if (nVer == 3)
 | 
	
		
			
				|  |  | -                    return _T("3");
 | 
	
		
			
				|  |  | -                else if (nVer == 4)
 | 
	
		
			
				|  |  | -                    return _T("4");
 | 
	
		
			
				|  |  | -                }(Global::g_nVersion), Global::g_szConfig);
 | 
	
		
			
				|  |  | +			// C++11直接用lambda表示式处理;
 | 
	
		
			
				|  |  | +			WritePrivateProfileString("TestWizard", "Ver", [](int nVer)->LPCSTR {
 | 
	
		
			
				|  |  | +				if (nVer == 1)
 | 
	
		
			
				|  |  | +					return _T("1");
 | 
	
		
			
				|  |  | +				else if (nVer == 2)
 | 
	
		
			
				|  |  | +					return _T("2");
 | 
	
		
			
				|  |  | +				else if (nVer == 3)
 | 
	
		
			
				|  |  | +					return _T("3");
 | 
	
		
			
				|  |  | +				else if (nVer == 4)
 | 
	
		
			
				|  |  | +					return _T("4");
 | 
	
		
			
				|  |  | +				else
 | 
	
		
			
				|  |  | +					return _T("1");
 | 
	
		
			
				|  |  | +				}(Global::g_nVersion), Global::g_szConfig);
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnUpdateInfraedVersionCombobox(CCmdUI* pCmdUI)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pVersionCombobox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_VERSION_COMBOBOX));
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pVersionCombobox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_VERSION_COMBOBOX));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnSwitcherCombobox()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pCameraCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_COMBOBOX));
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pCameraCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_COMBOBOX));
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnUpdateSwitcherCombobox(CCmdUI* pCmdUI)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonCheckBox* pSwitcherCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_CHECKBOX));
 | 
	
		
			
				|  |  | -    pCmdUI->Enable(!pSwitcherCheckbox->IsChecked());
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonCheckBox* pSwitcherCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_CHECKBOX));
 | 
	
		
			
				|  |  | +	pCmdUI->Enable(!pSwitcherCheckbox->IsChecked());
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnSwitcherCheckbox()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonCheckBox* pSwitcherCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_CHECKBOX));
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pSwitcherCombobox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_COMBOBOX));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    if ( !pSwitcherCheckbox->IsChecked() )
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        int nCurSel = pSwitcherCombobox->GetCurSel();
 | 
	
		
			
				|  |  | -        if ( nCurSel != CB_ERR ) 
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            m_SerialUSB.SetIOMode();
 | 
	
		
			
				|  |  | -            CString strText = pSwitcherCombobox->GetItem(nCurSel);
 | 
	
		
			
				|  |  | -            if ( m_SerialUSB.Open(atol(strText.Mid(3).GetString()), 115200) )
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                m_SerialUSB.SetBufferSize(1024,1024);
 | 
	
		
			
				|  |  | -                WritePrivateProfileString("Switcher", "Com", strText.GetString(), Global::g_szConfig);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    else
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        if ( m_SerialUSB.IsOpen() )
 | 
	
		
			
				|  |  | -            m_SerialUSB.Close();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 重转Checkbox;
 | 
	
		
			
				|  |  | -        m_bSwitcherCheckA = false;
 | 
	
		
			
				|  |  | -        m_bSwitcherCheckB = false;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonCheckBox* pSwitcherCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_CHECKBOX));
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pSwitcherCombobox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_COMBOBOX));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!pSwitcherCheckbox->IsChecked())
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		int nCurSel = pSwitcherCombobox->GetCurSel();
 | 
	
		
			
				|  |  | +		if (nCurSel != CB_ERR)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			m_SerialUSB.SetIOMode();
 | 
	
		
			
				|  |  | +			CString strText = pSwitcherCombobox->GetItem(nCurSel);
 | 
	
		
			
				|  |  | +			if (m_SerialUSB.Open(atol(strText.Mid(3).GetString()), 115200))
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				m_SerialUSB.SetBufferSize(1024, 1024);
 | 
	
		
			
				|  |  | +				WritePrivateProfileString("Switcher", "Com", strText.GetString(), Global::g_szConfig);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	else
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		if (m_SerialUSB.IsOpen())
 | 
	
		
			
				|  |  | +			m_SerialUSB.Close();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 重转Checkbox;
 | 
	
		
			
				|  |  | +		m_bSwitcherCheckA = false;
 | 
	
		
			
				|  |  | +		m_bSwitcherCheckB = false;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnUpdateSwitcherCheckbox(CCmdUI* pCmdUI)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    pCmdUI->SetCheck(m_SerialUSB.IsOpen());
 | 
	
		
			
				|  |  | +	pCmdUI->SetCheck(m_SerialUSB.IsOpen());
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnSwitcherCheckboxA()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonCheckBox* pCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_CHECKBOXA));
 | 
	
		
			
				|  |  | -    m_bSwitcherCheckA = !(m_bSwitcherCheckB = pCheckbox->IsChecked());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    if ( m_SerialUSB.IsOpen() )
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        m_SerialUSB.SetTimeouts(0,2,50,1,150);
 | 
	
		
			
				|  |  | -        // 封装发送包;
 | 
	
		
			
				|  |  | -        byte szSendData[MAX_SWITCH_LEN] = {0};
 | 
	
		
			
				|  |  | -        _stprintf_s((TCHAR*)szSendData, MAX_SWITCH_LEN, _T("*SET PORT %c\r"), m_bSwitcherCheckA ? 'A':'B');
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 发送单信号;
 | 
	
		
			
				|  |  | -        if ( m_SerialUSB.WriteSync(szSendData, _tcslen((TCHAR*)szSendData)) )
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            memset(szSendData, 0, MAX_SWITCH_LEN);
 | 
	
		
			
				|  |  | -            m_SerialUSB.ReadSync(szSendData, MAX_SWITCH_LEN);
 | 
	
		
			
				|  |  | -            TRACE("切换U盘成功\n");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        else
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            TRACE("切换U盘失败\n");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonCheckBox* pCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_CHECKBOXA));
 | 
	
		
			
				|  |  | +	m_bSwitcherCheckA = !(m_bSwitcherCheckB = pCheckbox->IsChecked());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (m_SerialUSB.IsOpen())
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		m_SerialUSB.SetTimeouts(0, 2, 50, 1, 150);
 | 
	
		
			
				|  |  | +		// 封装发送包;
 | 
	
		
			
				|  |  | +		byte szSendData[MAX_SWITCH_LEN] = { 0 };
 | 
	
		
			
				|  |  | +		_stprintf_s((TCHAR*)szSendData, MAX_SWITCH_LEN, _T("*SET PORT %c\r"), m_bSwitcherCheckA ? 'A' : 'B');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 发送单信号;
 | 
	
		
			
				|  |  | +		if (m_SerialUSB.WriteSync(szSendData, _tcslen((TCHAR*)szSendData)))
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			memset(szSendData, 0, MAX_SWITCH_LEN);
 | 
	
		
			
				|  |  | +			m_SerialUSB.ReadSync(szSendData, MAX_SWITCH_LEN);
 | 
	
		
			
				|  |  | +			TRACE("切换U盘成功\n");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		else
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			TRACE("切换U盘失败\n");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnUpdateSwitcherCheckboxA(CCmdUI* pCmdUI)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    pCmdUI->Enable(m_SerialUSB.IsOpen());
 | 
	
		
			
				|  |  | -    pCmdUI->SetCheck(m_bSwitcherCheckA);
 | 
	
		
			
				|  |  | +	pCmdUI->Enable(m_SerialUSB.IsOpen());
 | 
	
		
			
				|  |  | +	pCmdUI->SetCheck(m_bSwitcherCheckA);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnSwitcherCheckboxB()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonCheckBox* pCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_CHECKBOXB));
 | 
	
		
			
				|  |  | -    m_bSwitcherCheckB = !(m_bSwitcherCheckA = pCheckbox->IsChecked());
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    if ( m_SerialUSB.IsOpen() )
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        m_SerialUSB.SetTimeouts(0,2,50,1,150);
 | 
	
		
			
				|  |  | -        // 封装发送包;
 | 
	
		
			
				|  |  | -        byte szSendData[MAX_SWITCH_LEN] = {0};
 | 
	
		
			
				|  |  | -        _stprintf_s((TCHAR*)szSendData, MAX_SWITCH_LEN, _T("*SET PORT %c\r"), m_bSwitcherCheckA ? 'A':'B');
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        // 发送单信号;
 | 
	
		
			
				|  |  | -        if ( m_SerialUSB.WriteSync(szSendData, _tcslen((TCHAR*)szSendData)) )
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            memset(szSendData, 0, MAX_SWITCH_LEN);
 | 
	
		
			
				|  |  | -            m_SerialUSB.ReadSync(szSendData, MAX_SWITCH_LEN);
 | 
	
		
			
				|  |  | -            TRACE("切换U盘成功\n");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        else
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            TRACE("切换U盘失败\n");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonCheckBox* pCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_CHECKBOXB));
 | 
	
		
			
				|  |  | +	m_bSwitcherCheckB = !(m_bSwitcherCheckA = pCheckbox->IsChecked());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (m_SerialUSB.IsOpen())
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		m_SerialUSB.SetTimeouts(0, 2, 50, 1, 150);
 | 
	
		
			
				|  |  | +		// 封装发送包;
 | 
	
		
			
				|  |  | +		byte szSendData[MAX_SWITCH_LEN] = { 0 };
 | 
	
		
			
				|  |  | +		_stprintf_s((TCHAR*)szSendData, MAX_SWITCH_LEN, _T("*SET PORT %c\r"), m_bSwitcherCheckA ? 'A' : 'B');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 发送单信号;
 | 
	
		
			
				|  |  | +		if (m_SerialUSB.WriteSync(szSendData, _tcslen((TCHAR*)szSendData)))
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			memset(szSendData, 0, MAX_SWITCH_LEN);
 | 
	
		
			
				|  |  | +			m_SerialUSB.ReadSync(szSendData, MAX_SWITCH_LEN);
 | 
	
		
			
				|  |  | +			TRACE("切换U盘成功\n");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		else
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			TRACE("切换U盘失败\n");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnUpdateSwitcherCheckboxB(CCmdUI* pCmdUI)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    pCmdUI->Enable(m_SerialUSB.IsOpen());
 | 
	
		
			
				|  |  | -    pCmdUI->SetCheck(m_bSwitcherCheckB);
 | 
	
		
			
				|  |  | +	pCmdUI->Enable(m_SerialUSB.IsOpen());
 | 
	
		
			
				|  |  | +	pCmdUI->SetCheck(m_bSwitcherCheckB);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnCameraFlush()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pCameraCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_CAMERA_COMBOBOX));
 | 
	
		
			
				|  |  | -    std::vector<TString> vtDevices;
 | 
	
		
			
				|  |  | -    EnumDevices(vtDevices);
 | 
	
		
			
				|  |  | -    int nCurSel = pCameraCombo->GetCurSel();
 | 
	
		
			
				|  |  | -    if ( nCurSel != -1 )
 | 
	
		
			
				|  |  | -    {    
 | 
	
		
			
				|  |  | -        bool bDel = true;
 | 
	
		
			
				|  |  | -        TString str = pCameraCombo->GetItem(pCameraCombo->GetCurSel());
 | 
	
		
			
				|  |  | -        for ( std::vector<TString>::iterator it = vtDevices.begin(); it != vtDevices.end(); it++ )
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            if ( _tcscmp(str.c_str(), it->c_str()) == 0 )
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                bDel = false;
 | 
	
		
			
				|  |  | -                break;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if ( bDel && m_pChildFrame )
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            CFieldTestToolView *pView = (CFieldTestToolView*)m_pChildFrame->GetActiveView();
 | 
	
		
			
				|  |  | -            if ( pView->m_pCamera )
 | 
	
		
			
				|  |  | -                delete pView->m_pCamera;
 | 
	
		
			
				|  |  | -            pView->m_pCamera = NULL;
 | 
	
		
			
				|  |  | -            pView->CloseWindow();
 | 
	
		
			
				|  |  | -            pView->DestroyWindow();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            m_pChildFrame->CloseWindow();
 | 
	
		
			
				|  |  | -            m_pChildFrame = NULL;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            // 设备移除后,设置空;
 | 
	
		
			
				|  |  | -            pCameraCombo->DeleteItem(nCurSel);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    pCameraCombo->RemoveAllItems();
 | 
	
		
			
				|  |  | -    for (std::vector<TString>::iterator it = vtDevices.begin(); it != vtDevices.end(); it++)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        pCameraCombo->AddItem(it->c_str());
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pCameraCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_CAMERA_COMBOBOX));
 | 
	
		
			
				|  |  | +	std::vector<TString> vtDevices;
 | 
	
		
			
				|  |  | +	EnumDevices(vtDevices);
 | 
	
		
			
				|  |  | +	int nCurSel = pCameraCombo->GetCurSel();
 | 
	
		
			
				|  |  | +	if (nCurSel != -1)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		bool bDel = true;
 | 
	
		
			
				|  |  | +		TString str = pCameraCombo->GetItem(pCameraCombo->GetCurSel());
 | 
	
		
			
				|  |  | +		for (std::vector<TString>::iterator it = vtDevices.begin(); it != vtDevices.end(); it++)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			if (_tcscmp(str.c_str(), it->c_str()) == 0)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				bDel = false;
 | 
	
		
			
				|  |  | +				break;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (bDel && m_pChildFrame)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			CFieldTestToolView* pView = (CFieldTestToolView*)m_pChildFrame->GetActiveView();
 | 
	
		
			
				|  |  | +			if (pView->m_pCamera)
 | 
	
		
			
				|  |  | +				delete pView->m_pCamera;
 | 
	
		
			
				|  |  | +			pView->m_pCamera = NULL;
 | 
	
		
			
				|  |  | +			pView->CloseWindow();
 | 
	
		
			
				|  |  | +			pView->DestroyWindow();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			m_pChildFrame->CloseWindow();
 | 
	
		
			
				|  |  | +			m_pChildFrame = NULL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			// 设备移除后,设置空;
 | 
	
		
			
				|  |  | +			pCameraCombo->DeleteItem(nCurSel);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	pCameraCombo->RemoveAllItems();
 | 
	
		
			
				|  |  | +	for (std::vector<TString>::iterator it = vtDevices.begin(); it != vtDevices.end(); it++)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		pCameraCombo->AddItem(it->c_str());
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnUpdateCameraFlush(CCmdUI* pCmdUI)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    //pCmdUI->Enable();
 | 
	
		
			
				|  |  | +	//pCmdUI->Enable();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  bool CMainFrame::RegisterDeviceChange()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    // HID设备的GUID,可在设备管理器中查询,经查结果如下:
 | 
	
		
			
				|  |  | -    // {745a17a0-74d3-11d0-b6fe-00a0c90f57da}
 | 
	
		
			
				|  |  | -    // 注:使用真实的HID的GUID,反正检测不出来,如果是其它的GUID,所有USB事件都能检测出
 | 
	
		
			
				|  |  | -    const GUID GUID_DEVINTERFACE_LIST[] = {
 | 
	
		
			
				|  |  | -        { 0xA5DCBF10, 0x6530, 0x11D2,{ 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } },  // USB设备
 | 
	
		
			
				|  |  | -        { 0x53f56307, 0xb6bf, 0x11d0,{ 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b } },  // 磁盘(U盘)
 | 
	
		
			
				|  |  | -        { 0x4D1E55B2, 0xF16F, 0x11CF,{ 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } },  // HID
 | 
	
		
			
				|  |  | -        { 0x745A17A0, 0x74D3, 0x11D0,{ 0xB6, 0xFE, 0x00, 0xA0, 0xC9, 0x0F, 0x57, 0xDA } },  // 另一个HID
 | 
	
		
			
				|  |  | -        { 0xad498944, 0x762f, 0x11d0,{ 0x8d, 0xcb, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c } },  // 网卡;
 | 
	
		
			
				|  |  | -        { 0x4d36e96c, 0xe325, 0x11ce,{ 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 } }
 | 
	
		
			
				|  |  | -    }; 
 | 
	
		
			
				|  |  | +	// HID设备的GUID,可在设备管理器中查询,经查结果如下:
 | 
	
		
			
				|  |  | +	// {745a17a0-74d3-11d0-b6fe-00a0c90f57da}
 | 
	
		
			
				|  |  | +	// 注:使用真实的HID的GUID,反正检测不出来,如果是其它的GUID,所有USB事件都能检测出
 | 
	
		
			
				|  |  | +	// 实际上:目前测试精灵等通过USB转串口的设备都是USB设备,而USB摄像头也是;
 | 
	
		
			
				|  |  | +	const GUID GUID_DEVINTERFACE_LIST[] = {
 | 
	
		
			
				|  |  | +		{ 0xA5DCBF10, 0x6530, 0x11D2,{ 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } },  // USB设备
 | 
	
		
			
				|  |  | +		{ 0x53f56307, 0xb6bf, 0x11d0,{ 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b } },  // 磁盘(U盘)
 | 
	
		
			
				|  |  | +		{ 0x4D1E55B2, 0xF16F, 0x11CF,{ 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } },  // HID
 | 
	
		
			
				|  |  | +		{ 0x745A17A0, 0x74D3, 0x11D0,{ 0xB6, 0xFE, 0x00, 0xA0, 0xC9, 0x0F, 0x57, 0xDA } },  // 另一个HID
 | 
	
		
			
				|  |  | +		{ 0xad498944, 0x762f, 0x11d0,{ 0x8d, 0xcb, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c } },  // 网卡;
 | 
	
		
			
				|  |  | +		{ 0x4d36e96c, 0xe325, 0x11ce,{ 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 } }
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  #if 0
 | 
	
		
			
				|  |  | -    // 注册HID事件
 | 
	
		
			
				|  |  | -    DEV_BROADCAST_DEVICEINTERFACE DevBroadcastDeviceInterface;
 | 
	
		
			
				|  |  | -    memset(&DevBroadcastDeviceInterface, 0, sizeof(DEV_BROADCAST_DEVICEINTERFACE));
 | 
	
		
			
				|  |  | -    DevBroadcastDeviceInterface.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
 | 
	
		
			
				|  |  | -    DevBroadcastDeviceInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
 | 
	
		
			
				|  |  | -    // 可以循环注册所有列出的GUID,此处只使用一种
 | 
	
		
			
				|  |  | -    DevBroadcastDeviceInterface.dbcc_classguid = GUID_DEVINTERFACE_LIST[5];
 | 
	
		
			
				|  |  | -    HDEVNOTIFY hDevNotify = RegisterDeviceNotification(this->GetSafeHwnd(), &DevBroadcastDeviceInterface, DEVICE_NOTIFY_WINDOW_HANDLE);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    return hDevNotify ? true : false;
 | 
	
		
			
				|  |  | +	// 注册HID事件
 | 
	
		
			
				|  |  | +	DEV_BROADCAST_DEVICEINTERFACE DevBroadcastDeviceInterface;
 | 
	
		
			
				|  |  | +	memset(&DevBroadcastDeviceInterface, 0, sizeof(DEV_BROADCAST_DEVICEINTERFACE));
 | 
	
		
			
				|  |  | +	DevBroadcastDeviceInterface.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
 | 
	
		
			
				|  |  | +	DevBroadcastDeviceInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
 | 
	
		
			
				|  |  | +	// 可以循环注册所有列出的GUID,此处只使用一种
 | 
	
		
			
				|  |  | +	DevBroadcastDeviceInterface.dbcc_classguid = GUID_DEVINTERFACE_LIST[5];
 | 
	
		
			
				|  |  | +	HDEVNOTIFY hDevNotify = RegisterDeviceNotification(this->GetSafeHwnd(), &DevBroadcastDeviceInterface, DEVICE_NOTIFY_WINDOW_HANDLE);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return hDevNotify ? true : false;
 | 
	
		
			
				|  |  |  #else
 | 
	
		
			
				|  |  | -    HDEVNOTIFY hDevNotify;
 | 
	
		
			
				|  |  | -    for ( int i = 0; i < 6; i++ )
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        // 注册HID事件
 | 
	
		
			
				|  |  | -        DEV_BROADCAST_DEVICEINTERFACE DevBroadcastDeviceInterface;
 | 
	
		
			
				|  |  | -        memset(&DevBroadcastDeviceInterface, 0, sizeof(DEV_BROADCAST_DEVICEINTERFACE));
 | 
	
		
			
				|  |  | -        DevBroadcastDeviceInterface.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
 | 
	
		
			
				|  |  | -        DevBroadcastDeviceInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
 | 
	
		
			
				|  |  | -        DevBroadcastDeviceInterface.dbcc_classguid = GUID_DEVINTERFACE_LIST[i];
 | 
	
		
			
				|  |  | -        HDEVNOTIFY hDevNotify = RegisterDeviceNotification(this->GetSafeHwnd(), &DevBroadcastDeviceInterface, DEVICE_NOTIFY_WINDOW_HANDLE);
 | 
	
		
			
				|  |  | -        if ( !hDevNotify )
 | 
	
		
			
				|  |  | -            return false;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    return true;
 | 
	
		
			
				|  |  | +	HDEVNOTIFY hDevNotify;
 | 
	
		
			
				|  |  | +	for (int i = 0; i < 6; i++)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		// 注册HID事件
 | 
	
		
			
				|  |  | +		DEV_BROADCAST_DEVICEINTERFACE DevBroadcastDeviceInterface;
 | 
	
		
			
				|  |  | +		memset(&DevBroadcastDeviceInterface, 0, sizeof(DEV_BROADCAST_DEVICEINTERFACE));
 | 
	
		
			
				|  |  | +		DevBroadcastDeviceInterface.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
 | 
	
		
			
				|  |  | +		DevBroadcastDeviceInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
 | 
	
		
			
				|  |  | +		DevBroadcastDeviceInterface.dbcc_classguid = GUID_DEVINTERFACE_LIST[i];
 | 
	
		
			
				|  |  | +		HDEVNOTIFY hDevNotify = RegisterDeviceNotification(this->GetSafeHwnd(), &DevBroadcastDeviceInterface, DEVICE_NOTIFY_WINDOW_HANDLE);
 | 
	
		
			
				|  |  | +		if (!hDevNotify)
 | 
	
		
			
				|  |  | +			return false;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return true;
 | 
	
		
			
				|  |  |  #endif    
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  BOOL CMainFrame::OnDeviceChange(UINT nEventType, DWORD_PTR dwData)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    if ( dwData == 0 )
 | 
	
		
			
				|  |  | -        return FALSE;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pInfradeCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_COMBOBOX));
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pSwitcherCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_COMBOBOX));
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pInfradeCombo);
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pSwitcherCombo);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    DEV_BROADCAST_DEVICEINTERFACE* pdbd = (DEV_BROADCAST_DEVICEINTERFACE*)dwData;
 | 
	
		
			
				|  |  | -    if ( pdbd->dbcc_devicetype == DBT_DEVTYP_PORT )
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        DEV_BROADCAST_PORT *pbdp = (DEV_BROADCAST_PORT*)dwData;
 | 
	
		
			
				|  |  | -        if (_tcsstr(pbdp->dbcp_name, _T("COM")))
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            // 测试精灵;
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                // 查找是否有添加过该项;
 | 
	
		
			
				|  |  | -                int nIndex = pInfradeCombo->FindItem(pbdp->dbcp_name);
 | 
	
		
			
				|  |  | -                // 删除和新增前,先获取当前选中的项;
 | 
	
		
			
				|  |  | -                CString strCurCOM = _T("");
 | 
	
		
			
				|  |  | -                int nCurIndex = pInfradeCombo->GetCurSel();
 | 
	
		
			
				|  |  | -                if ( nCurIndex != CB_ERR )
 | 
	
		
			
				|  |  | -                    strCurCOM = pInfradeCombo->GetItem(nCurIndex);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                if ( nEventType == DBT_DEVICEREMOVECOMPLETE )
 | 
	
		
			
				|  |  | -                {// 串口拨掉;
 | 
	
		
			
				|  |  | -                    TRACE(_T("串口拨掉\n"));
 | 
	
		
			
				|  |  | -                    if ( nIndex != CB_ERR )
 | 
	
		
			
				|  |  | -                    {                
 | 
	
		
			
				|  |  | -                        pInfradeCombo->DeleteItem(nIndex);
 | 
	
		
			
				|  |  | -                        // 删除后, 由于索引变化了,要重新设置选中项;
 | 
	
		
			
				|  |  | -                        if ( nCurIndex != CB_ERR )
 | 
	
		
			
				|  |  | -                            pInfradeCombo->SelectItem(strCurCOM);
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                else if ( nEventType == DBT_DEVICEARRIVAL )
 | 
	
		
			
				|  |  | -                {// 串口插入;
 | 
	
		
			
				|  |  | -                    TRACE(_T("串口插入\n"));
 | 
	
		
			
				|  |  | -                    if ( nIndex == CB_ERR )
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                        pInfradeCombo->AddItem(pbdp->dbcp_name);
 | 
	
		
			
				|  |  | -                        // 新增后,由于索引变化了,要重新设置选中项;
 | 
	
		
			
				|  |  | -                        if ( nCurIndex != CB_ERR )
 | 
	
		
			
				|  |  | -                            pInfradeCombo->SelectItem(strCurCOM);
 | 
	
		
			
				|  |  | -                        else
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                            IsTestWizardPort(pbdp->dbcp_name);
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            // USB切换器;
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                // 查找是否有添加过该项;
 | 
	
		
			
				|  |  | -                int nIndex = pSwitcherCombo->FindItem(pbdp->dbcp_name);
 | 
	
		
			
				|  |  | -                // 删除和新增前,先获取当前选中的项;
 | 
	
		
			
				|  |  | -                CString strCurCOM = _T("");
 | 
	
		
			
				|  |  | -                int nCurIndex = pSwitcherCombo->GetCurSel();
 | 
	
		
			
				|  |  | -                if ( nCurIndex != CB_ERR )
 | 
	
		
			
				|  |  | -                    strCurCOM = pSwitcherCombo->GetItem(nCurIndex);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                if ( nEventType == DBT_DEVICEREMOVECOMPLETE )
 | 
	
		
			
				|  |  | -                {// 串口拨掉;
 | 
	
		
			
				|  |  | -                    TRACE(_T("串口拨掉\n"));
 | 
	
		
			
				|  |  | -                    if ( nIndex != CB_ERR )
 | 
	
		
			
				|  |  | -                    {                
 | 
	
		
			
				|  |  | -                        pSwitcherCombo->DeleteItem(nIndex);
 | 
	
		
			
				|  |  | -                        // 删除后, 由于索引变化了,要重新设置选中项;
 | 
	
		
			
				|  |  | -                        if ( nCurIndex != CB_ERR )
 | 
	
		
			
				|  |  | -                            pSwitcherCombo->SelectItem(strCurCOM);
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                else if ( nEventType == DBT_DEVICEARRIVAL )
 | 
	
		
			
				|  |  | -                {// 串口插入;
 | 
	
		
			
				|  |  | -                    TRACE(_T("串口插入\n"));
 | 
	
		
			
				|  |  | -                    if ( nIndex == CB_ERR )
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                        pSwitcherCombo->AddItem(pbdp->dbcp_name);
 | 
	
		
			
				|  |  | -                        // 新增后,由于索引变化了,要重新设置选中项;
 | 
	
		
			
				|  |  | -                        if ( nCurIndex != CB_ERR )
 | 
	
		
			
				|  |  | -                            pSwitcherCombo->SelectItem(strCurCOM);
 | 
	
		
			
				|  |  | -                        else
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                            IsUSBSwitchPort(pbdp->dbcp_name);
 | 
	
		
			
				|  |  | -                        }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        } 
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    // USB等接口设备;
 | 
	
		
			
				|  |  | -    if ( pdbd->dbcc_devicetype == DBT_DEVTYP_DEVICEINTERFACE )
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        DEV_BROADCAST_HDR* phdr = (DEV_BROADCAST_HDR*)dwData;
 | 
	
		
			
				|  |  | -        CMFCRibbonComboBox* pCameraCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_CAMERA_COMBOBOX));
 | 
	
		
			
				|  |  | -        std::vector<TString> vtDevices;
 | 
	
		
			
				|  |  | -        if ( nEventType == DBT_DEVICEREMOVECOMPLETE || nEventType == DBT_DEVICEARRIVAL)
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            OutputDebugString(_T("设备有变化===============\n"));
 | 
	
		
			
				|  |  | -            // 新增时,需要等待系统刷新后才能遍历设备(有时仍不灵,添加刷新按钮处理);
 | 
	
		
			
				|  |  | -            if ( nEventType == DBT_DEVICEARRIVAL )
 | 
	
		
			
				|  |  | -                Sleep(1000);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            EnumDevices(vtDevices);
 | 
	
		
			
				|  |  | -            int nCurSel = pCameraCombo->GetCurSel();
 | 
	
		
			
				|  |  | -            if ( nCurSel != -1 )
 | 
	
		
			
				|  |  | -            {    
 | 
	
		
			
				|  |  | -                bool bDel = true;
 | 
	
		
			
				|  |  | -                TString str = pCameraCombo->GetItem(pCameraCombo->GetCurSel());
 | 
	
		
			
				|  |  | -                for ( std::vector<TString>::iterator it = vtDevices.begin(); it != vtDevices.end(); it++ )
 | 
	
		
			
				|  |  | -                {
 | 
	
		
			
				|  |  | -                    if ( _tcscmp(str.c_str(), it->c_str()) == 0 )
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                        bDel = false;
 | 
	
		
			
				|  |  | -                        break;
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                if ( bDel && m_pChildFrame )
 | 
	
		
			
				|  |  | -                {
 | 
	
		
			
				|  |  | -                    CFieldTestToolView *pView = (CFieldTestToolView*)m_pChildFrame->GetActiveView();
 | 
	
		
			
				|  |  | -                    if ( pView->m_pCamera )
 | 
	
		
			
				|  |  | -                        delete pView->m_pCamera;
 | 
	
		
			
				|  |  | -                    pView->m_pCamera = NULL;
 | 
	
		
			
				|  |  | -                    pView->DestroyWindow();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    m_pChildFrame->DestroyWindow();
 | 
	
		
			
				|  |  | -                    m_pChildFrame = NULL;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    // 设备移除后,设置空;
 | 
	
		
			
				|  |  | -                    pCameraCombo->DeleteItem(nCurSel);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            pCameraCombo->RemoveAllItems();
 | 
	
		
			
				|  |  | -            for (std::vector<TString>::iterator it = vtDevices.begin(); it != vtDevices.end(); it++)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                pCameraCombo->AddItem(it->c_str());
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    TRACE(_T("OnDeviceChange\n"));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    return TRUE;
 | 
	
		
			
				|  |  | +	if (dwData == 0)
 | 
	
		
			
				|  |  | +		return FALSE;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pInfradeCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_COMBOBOX));
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pSwitcherCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_COMBOBOX));
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pInfradeCombo);
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pSwitcherCombo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	DEV_BROADCAST_DEVICEINTERFACE* pdbd = (DEV_BROADCAST_DEVICEINTERFACE*)dwData;
 | 
	
		
			
				|  |  | +	if (pdbd->dbcc_devicetype == DBT_DEVTYP_PORT)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		DEV_BROADCAST_PORT* pbdp = (DEV_BROADCAST_PORT*)dwData;
 | 
	
		
			
				|  |  | +		if (_tcsstr(pbdp->dbcp_name, _T("COM")))
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			// 红外遥控头;
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				// 查找是否有添加过该项;
 | 
	
		
			
				|  |  | +				int nIndex = pInfradeCombo->FindItem(pbdp->dbcp_name);
 | 
	
		
			
				|  |  | +				// 删除和新增前,先获取当前选中的项;
 | 
	
		
			
				|  |  | +				CString strCurCOM = _T("");
 | 
	
		
			
				|  |  | +				int nCurIndex = pInfradeCombo->GetCurSel();
 | 
	
		
			
				|  |  | +				if (nCurIndex != CB_ERR)
 | 
	
		
			
				|  |  | +					strCurCOM = pInfradeCombo->GetItem(nCurIndex);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				if (nEventType == DBT_DEVICEREMOVECOMPLETE)
 | 
	
		
			
				|  |  | +				{// 串口拨掉;
 | 
	
		
			
				|  |  | +					TRACE(_T("串口拨掉\n"));
 | 
	
		
			
				|  |  | +					if (nIndex != CB_ERR)
 | 
	
		
			
				|  |  | +					{
 | 
	
		
			
				|  |  | +						pInfradeCombo->DeleteItem(nIndex);
 | 
	
		
			
				|  |  | +						// 删除后, 由于索引变化了,要重新设置选中项;
 | 
	
		
			
				|  |  | +						if (nCurIndex != CB_ERR)
 | 
	
		
			
				|  |  | +							pInfradeCombo->SelectItem(strCurCOM);
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				else if (nEventType == DBT_DEVICEARRIVAL)
 | 
	
		
			
				|  |  | +				{// 串口插入;
 | 
	
		
			
				|  |  | +					TRACE(_T("串口插入\n"));
 | 
	
		
			
				|  |  | +					if (nIndex == CB_ERR)
 | 
	
		
			
				|  |  | +					{
 | 
	
		
			
				|  |  | +						pInfradeCombo->AddItem(pbdp->dbcp_name);
 | 
	
		
			
				|  |  | +						// 新增后,由于索引变化了,要重新设置选中项;
 | 
	
		
			
				|  |  | +						if (nCurIndex != CB_ERR)
 | 
	
		
			
				|  |  | +							pInfradeCombo->SelectItem(strCurCOM);
 | 
	
		
			
				|  |  | +						else
 | 
	
		
			
				|  |  | +						{
 | 
	
		
			
				|  |  | +							if (Global::g_nVersion == 1)
 | 
	
		
			
				|  |  | +								IsTestWizardPort(pbdp->dbcp_name);
 | 
	
		
			
				|  |  | +							else
 | 
	
		
			
				|  |  | +								OutputDebugString(_T("don't support"));
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			// USB切换器;
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				// 查找是否有添加过该项;
 | 
	
		
			
				|  |  | +				int nIndex = pSwitcherCombo->FindItem(pbdp->dbcp_name);
 | 
	
		
			
				|  |  | +				// 删除和新增前,先获取当前选中的项;
 | 
	
		
			
				|  |  | +				CString strCurCOM = _T("");
 | 
	
		
			
				|  |  | +				int nCurIndex = pSwitcherCombo->GetCurSel();
 | 
	
		
			
				|  |  | +				if (nCurIndex != CB_ERR)
 | 
	
		
			
				|  |  | +					strCurCOM = pSwitcherCombo->GetItem(nCurIndex);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				if (nEventType == DBT_DEVICEREMOVECOMPLETE)
 | 
	
		
			
				|  |  | +				{// 串口拨掉;
 | 
	
		
			
				|  |  | +					TRACE(_T("串口拨掉\n"));
 | 
	
		
			
				|  |  | +					if (nIndex != CB_ERR)
 | 
	
		
			
				|  |  | +					{
 | 
	
		
			
				|  |  | +						pSwitcherCombo->DeleteItem(nIndex);
 | 
	
		
			
				|  |  | +						// 删除后, 由于索引变化了,要重新设置选中项;
 | 
	
		
			
				|  |  | +						if (nCurIndex != CB_ERR)
 | 
	
		
			
				|  |  | +							pSwitcherCombo->SelectItem(strCurCOM);
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				else if (nEventType == DBT_DEVICEARRIVAL)
 | 
	
		
			
				|  |  | +				{// 串口插入;
 | 
	
		
			
				|  |  | +					TRACE(_T("串口插入\n"));
 | 
	
		
			
				|  |  | +					if (nIndex == CB_ERR)
 | 
	
		
			
				|  |  | +					{
 | 
	
		
			
				|  |  | +						pSwitcherCombo->AddItem(pbdp->dbcp_name);
 | 
	
		
			
				|  |  | +						// 新增后,由于索引变化了,要重新设置选中项;
 | 
	
		
			
				|  |  | +						if (nCurIndex != CB_ERR)
 | 
	
		
			
				|  |  | +							pSwitcherCombo->SelectItem(strCurCOM);
 | 
	
		
			
				|  |  | +						else
 | 
	
		
			
				|  |  | +						{
 | 
	
		
			
				|  |  | +							IsUSBSwitchPort(pbdp->dbcp_name);
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	// USB等接口设备;
 | 
	
		
			
				|  |  | +	if (pdbd->dbcc_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		DEV_BROADCAST_HDR* phdr = (DEV_BROADCAST_HDR*)dwData;
 | 
	
		
			
				|  |  | +		CMFCRibbonComboBox* pCameraCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_CAMERA_COMBOBOX));
 | 
	
		
			
				|  |  | +		std::vector<TString> vtDevices;
 | 
	
		
			
				|  |  | +		if (nEventType == DBT_DEVICEREMOVECOMPLETE || nEventType == DBT_DEVICEARRIVAL)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			OutputDebugString(_T("设备有变化===============\n"));
 | 
	
		
			
				|  |  | +			// 新增时,需要等待系统刷新后才能遍历设备(有时仍不灵,添加刷新按钮处理);
 | 
	
		
			
				|  |  | +			if (nEventType == DBT_DEVICEARRIVAL)
 | 
	
		
			
				|  |  | +				Sleep(1000);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			EnumDevices(vtDevices);
 | 
	
		
			
				|  |  | +			int nCurSel = pCameraCombo->GetCurSel();
 | 
	
		
			
				|  |  | +			if (nCurSel != -1)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				bool bDel = true;
 | 
	
		
			
				|  |  | +				TString str = pCameraCombo->GetItem(pCameraCombo->GetCurSel());
 | 
	
		
			
				|  |  | +				for (std::vector<TString>::iterator it = vtDevices.begin(); it != vtDevices.end(); it++)
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +					if (_tcscmp(str.c_str(), it->c_str()) == 0)
 | 
	
		
			
				|  |  | +					{
 | 
	
		
			
				|  |  | +						bDel = false;
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				if (bDel && m_pChildFrame)
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +					CFieldTestToolView* pView = (CFieldTestToolView*)m_pChildFrame->GetActiveView();
 | 
	
		
			
				|  |  | +					if (pView->m_pCamera)
 | 
	
		
			
				|  |  | +						delete pView->m_pCamera;
 | 
	
		
			
				|  |  | +					pView->m_pCamera = NULL;
 | 
	
		
			
				|  |  | +					pView->DestroyWindow();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					m_pChildFrame->DestroyWindow();
 | 
	
		
			
				|  |  | +					m_pChildFrame = NULL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +					// 设备移除后,设置空;
 | 
	
		
			
				|  |  | +					pCameraCombo->DeleteItem(nCurSel);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			pCameraCombo->RemoveAllItems();
 | 
	
		
			
				|  |  | +			for (std::vector<TString>::iterator it = vtDevices.begin(); it != vtDevices.end(); it++)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				pCameraCombo->AddItem(it->c_str());
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	TRACE(_T("OnDeviceChange\n"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return TRUE;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::InitSerialCombobox()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pInfradeCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_COMBOBOX));
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pSwitcherCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_COMBOBOX));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pInfradeCombo);
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pSwitcherCombo);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    pInfradeCombo->RemoveAllItems();
 | 
	
		
			
				|  |  | -    pSwitcherCombo->RemoveAllItems();
 | 
	
		
			
				|  |  | -    for (std::vector<TString>::iterator it = m_vtPorts.begin(); it != m_vtPorts.end(); it++) 
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        pInfradeCombo->AddItem(it->c_str());
 | 
	
		
			
				|  |  | -        pSwitcherCombo->AddItem(it->c_str());
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pInfradeCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_COMBOBOX));
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pSwitcherCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_COMBOBOX));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pInfradeCombo);
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pSwitcherCombo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	pInfradeCombo->RemoveAllItems();
 | 
	
		
			
				|  |  | +	pSwitcherCombo->RemoveAllItems();
 | 
	
		
			
				|  |  | +	for (std::vector<TString>::iterator it = m_vtPorts.begin(); it != m_vtPorts.end(); it++)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		pInfradeCombo->AddItem(it->c_str());
 | 
	
		
			
				|  |  | +		pSwitcherCombo->AddItem(it->c_str());
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  bool CMainFrame::IsTestWizardPort(CString strCOMPort)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pInfradeCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_COMBOBOX));
 | 
	
		
			
				|  |  | -    CMFCRibbonCheckBox* pInfradeCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_INFRAED_CHECKBOX));
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pInfradeCombo);
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pInfradeCheckbox);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    CString strText = _T("");
 | 
	
		
			
				|  |  | -    if ( pInfradeCheckbox->IsChecked() )
 | 
	
		
			
				|  |  | -    {// 串口已打开;
 | 
	
		
			
				|  |  | -        return false;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    /* 
 | 
	
		
			
				|  |  | -    发送:
 | 
	
		
			
				|  |  | -    *about 
 | 
	
		
			
				|  |  | -    返回:
 | 
	
		
			
				|  |  | -    *about
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    Product name:      Test Wizard
 | 
	
		
			
				|  |  | -    Firmware version:  v3.6.210811
 | 
	
		
			
				|  |  | -    SN:                30FF6B064243393036140457
 | 
	
		
			
				|  |  | -    Active state:      Activated
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    Developer:         sun shengpeng
 | 
	
		
			
				|  |  | -    Email:             sunsp@tcl.com
 | 
	
		
			
				|  |  | -    */
 | 
	
		
			
				|  |  | -    m_SerialTW.SetIOMode();
 | 
	
		
			
				|  |  | -    if ( m_SerialTW.Open(_tstol(strCOMPort.Mid(3).GetString()), 115200) )
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        // 快速响应读写,不需要设置过长的超时;
 | 
	
		
			
				|  |  | -        m_SerialTW.SetTimeouts(0,1,20,1,150);
 | 
	
		
			
				|  |  | -        // 封装发送包;
 | 
	
		
			
				|  |  | -        byte szSendData[MAX_PATH] = "*about\r";
 | 
	
		
			
				|  |  | -        if ( m_SerialTW.WriteSync(szSendData, strlen((const char*)szSendData)) )
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            memset(szSendData, 0, MAX_PATH);
 | 
	
		
			
				|  |  | -            m_SerialTW.ReadSync(szSendData, MAX_PATH);
 | 
	
		
			
				|  |  | -            if ( strstr((char*)szSendData, "Product name:      Test Wizard\r") )
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                // 设置当前串口为选中状态;
 | 
	
		
			
				|  |  | -                pInfradeCombo->SelectItem(strCOMPort);
 | 
	
		
			
				|  |  | -                Global::g_Config.twPort = strCOMPort;
 | 
	
		
			
				|  |  | -                WritePrivateProfileString(_T("TestWizard"), _T("Com"), strCOMPort.GetString(), Global::g_szConfig);
 | 
	
		
			
				|  |  | -                // SetDlgItemText(BTN_OPEN_COM, _T("Close"));
 | 
	
		
			
				|  |  | -                // m_cbCOM.EnableWindow(FALSE);
 | 
	
		
			
				|  |  | -                // 关闭后,重新打开在设置超时值;
 | 
	
		
			
				|  |  | -                m_SerialTW.Close();
 | 
	
		
			
				|  |  | -                return true;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            TRACE("发送单信号成功\n");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        else
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            TRACE("发送单信号失败\n");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        m_SerialTW.Close();
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    return false;
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pInfradeCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_COMBOBOX));
 | 
	
		
			
				|  |  | +	CMFCRibbonCheckBox* pInfradeCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_INFRAED_CHECKBOX));
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pInfradeCombo);
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pInfradeCheckbox);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	CString strText = _T("");
 | 
	
		
			
				|  |  | +	if (pInfradeCheckbox->IsChecked())
 | 
	
		
			
				|  |  | +	{// 串口已打开;
 | 
	
		
			
				|  |  | +		return false;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	发送:
 | 
	
		
			
				|  |  | +	*about
 | 
	
		
			
				|  |  | +	返回:
 | 
	
		
			
				|  |  | +	*about
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	Product name:      Test Wizard
 | 
	
		
			
				|  |  | +	Firmware version:  v3.6.210811
 | 
	
		
			
				|  |  | +	SN:                30FF6B064243393036140457
 | 
	
		
			
				|  |  | +	Active state:      Activated
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	Developer:         sun shengpeng
 | 
	
		
			
				|  |  | +	Email:             sunsp@tcl.com
 | 
	
		
			
				|  |  | +	*/
 | 
	
		
			
				|  |  | +	m_SerialTW.SetIOMode();
 | 
	
		
			
				|  |  | +	if (m_SerialTW.Open(_tstol(strCOMPort.Mid(3).GetString()), 115200))
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		// 快速响应读写,不需要设置过长的超时;
 | 
	
		
			
				|  |  | +		m_SerialTW.SetTimeouts(0, 1, 20, 1, 150);
 | 
	
		
			
				|  |  | +		// 封装发送包;
 | 
	
		
			
				|  |  | +		byte szSendData[MAX_PATH] = "*about\r";
 | 
	
		
			
				|  |  | +		if (m_SerialTW.WriteSync(szSendData, strlen((const char*)szSendData)))
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			memset(szSendData, 0, MAX_PATH);
 | 
	
		
			
				|  |  | +			m_SerialTW.ReadSync(szSendData, MAX_PATH);
 | 
	
		
			
				|  |  | +			if (strstr((char*)szSendData, "Product name:      Test Wizard\r"))
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				// 设置当前串口为选中状态;
 | 
	
		
			
				|  |  | +				pInfradeCombo->SelectItem(strCOMPort);
 | 
	
		
			
				|  |  | +				Global::g_Config.twPort = strCOMPort;
 | 
	
		
			
				|  |  | +				WritePrivateProfileString(_T("TestWizard"), _T("Com"), strCOMPort.GetString(), Global::g_szConfig);
 | 
	
		
			
				|  |  | +				// SetDlgItemText(BTN_OPEN_COM, _T("Close"));
 | 
	
		
			
				|  |  | +				// m_cbCOM.EnableWindow(FALSE);
 | 
	
		
			
				|  |  | +				// 关闭后,重新打开在设置超时值;
 | 
	
		
			
				|  |  | +				m_SerialTW.Close();
 | 
	
		
			
				|  |  | +				return true;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			TRACE("发送单信号成功\n");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		else
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			TRACE("发送单信号失败\n");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		m_SerialTW.Close();
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return false;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  bool CMainFrame::IsUSBSwitchPort(CString strCOMPort)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pSwitcherCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_COMBOBOX));
 | 
	
		
			
				|  |  | -    CMFCRibbonCheckBox* pSwitcherCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_CHECKBOX));
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pSwitcherCombo);
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pSwitcherCheckbox);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    CString strText = _T("");
 | 
	
		
			
				|  |  | -    if ( pSwitcherCheckbox->IsChecked() )
 | 
	
		
			
				|  |  | -    {// 串口已打开;
 | 
	
		
			
				|  |  | -        return false;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    /* 
 | 
	
		
			
				|  |  | -    发送:
 | 
	
		
			
				|  |  | -    *SET PORT A\r 
 | 
	
		
			
				|  |  | -    返回:
 | 
	
		
			
				|  |  | -    set PORT A\r\n 
 | 
	
		
			
				|  |  | -    */
 | 
	
		
			
				|  |  | -    m_SerialUSB.SetIOMode();
 | 
	
		
			
				|  |  | -    if ( m_SerialUSB.Open(_tstol(strCOMPort.Mid(3).GetString()), 115200) )
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        // 快速响应读写,不需要设置过长的超时;
 | 
	
		
			
				|  |  | -        m_SerialUSB.SetTimeouts(0,1,20,1,150);
 | 
	
		
			
				|  |  | -        // 封装发送包;
 | 
	
		
			
				|  |  | -        byte szSendData[MAX_PATH] = "*SET PORT A\r";
 | 
	
		
			
				|  |  | -        if ( m_SerialUSB.WriteSync(szSendData, strlen((const char*)szSendData)) )
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            memset(szSendData, 0, MAX_PATH);
 | 
	
		
			
				|  |  | -            m_SerialUSB.ReadSync(szSendData, MAX_PATH);
 | 
	
		
			
				|  |  | -            if ( strcmp((char*)szSendData, "set PORT A\r\n") == 0 )
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                // 设置当前串口为选中状态;
 | 
	
		
			
				|  |  | -                pSwitcherCombo->SelectItem(strCOMPort);
 | 
	
		
			
				|  |  | -                Global::g_Config.switchPort = strCOMPort;
 | 
	
		
			
				|  |  | -                WritePrivateProfileString(_T("Switcher"), _T("Com"), strCOMPort.GetString(), Global::g_szConfig);
 | 
	
		
			
				|  |  | -                // SetDlgItemText(BTN_OPEN_COM, _T("Close"));
 | 
	
		
			
				|  |  | -                // m_cbCOM.EnableWindow(FALSE);
 | 
	
		
			
				|  |  | -                // 关闭后,重新打开在设置超时值;
 | 
	
		
			
				|  |  | -                m_SerialUSB.Close();
 | 
	
		
			
				|  |  | -                return true;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            TRACE("发送单信号成功\n");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        else
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            TRACE("发送单信号失败\n");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        m_SerialUSB.Close();
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    return false;
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pSwitcherCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_COMBOBOX));
 | 
	
		
			
				|  |  | +	CMFCRibbonCheckBox* pSwitcherCheckbox = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_CHECKBOX));
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pSwitcherCombo);
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pSwitcherCheckbox);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	CString strText = _T("");
 | 
	
		
			
				|  |  | +	if (pSwitcherCheckbox->IsChecked())
 | 
	
		
			
				|  |  | +	{// 串口已打开;
 | 
	
		
			
				|  |  | +		return false;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	发送:
 | 
	
		
			
				|  |  | +	*SET PORT A\r
 | 
	
		
			
				|  |  | +	返回:
 | 
	
		
			
				|  |  | +	set PORT A\r\n
 | 
	
		
			
				|  |  | +	*/
 | 
	
		
			
				|  |  | +	m_SerialUSB.SetIOMode();
 | 
	
		
			
				|  |  | +	if (m_SerialUSB.Open(_tstol(strCOMPort.Mid(3).GetString()), 115200))
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		// 快速响应读写,不需要设置过长的超时;
 | 
	
		
			
				|  |  | +		m_SerialUSB.SetTimeouts(0, 1, 20, 1, 150);
 | 
	
		
			
				|  |  | +		// 封装发送包;
 | 
	
		
			
				|  |  | +		byte szSendData[MAX_PATH] = "*SET PORT A\r";
 | 
	
		
			
				|  |  | +		if (m_SerialUSB.WriteSync(szSendData, strlen((const char*)szSendData)))
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			memset(szSendData, 0, MAX_PATH);
 | 
	
		
			
				|  |  | +			m_SerialUSB.ReadSync(szSendData, MAX_PATH);
 | 
	
		
			
				|  |  | +			if (strcmp((char*)szSendData, "set PORT A\r\n") == 0)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				// 设置当前串口为选中状态;
 | 
	
		
			
				|  |  | +				pSwitcherCombo->SelectItem(strCOMPort);
 | 
	
		
			
				|  |  | +				Global::g_Config.switchPort = strCOMPort;
 | 
	
		
			
				|  |  | +				WritePrivateProfileString(_T("Switcher"), _T("Com"), strCOMPort.GetString(), Global::g_szConfig);
 | 
	
		
			
				|  |  | +				// SetDlgItemText(BTN_OPEN_COM, _T("Close"));
 | 
	
		
			
				|  |  | +				// m_cbCOM.EnableWindow(FALSE);
 | 
	
		
			
				|  |  | +				// 关闭后,重新打开在设置超时值;
 | 
	
		
			
				|  |  | +				m_SerialUSB.Close();
 | 
	
		
			
				|  |  | +				return true;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			TRACE("发送单信号成功\n");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		else
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			TRACE("发送单信号失败\n");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		m_SerialUSB.Close();
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return false;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnTimer(UINT_PTR nIDEvent)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    // TODO: 在此添加消息处理程序代码和/或调用默认值
 | 
	
		
			
				|  |  | -    CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pInfradeCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_COMBOBOX));
 | 
	
		
			
				|  |  | -    CMFCRibbonComboBox* pSwitcherCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_COMBOBOX));
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pInfradeCombo);
 | 
	
		
			
				|  |  | -    ASSERT_VALID(pSwitcherCombo);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    if ( nIDEvent == 0 )
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        KillTimer(nIDEvent);
 | 
	
		
			
				|  |  | -        Global::GetSysSerialPort(m_vtPorts);
 | 
	
		
			
				|  |  | -        InitSerialCombobox();
 | 
	
		
			
				|  |  | -        if ( Global::g_Config.twPort.size() == 0 || !pInfradeCombo->SelectItem(Global::g_Config.twPort.c_str()) )
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            for (std::vector<TString>::iterator it = m_vtPorts.begin(); it != m_vtPorts.end(); it++) 
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                if ( !m_bFindTestWizardPort )
 | 
	
		
			
				|  |  | -                {
 | 
	
		
			
				|  |  | -                    m_bFindTestWizardPort = IsTestWizardPort(it->c_str());
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if ( !m_bFindTestWizardPort )
 | 
	
		
			
				|  |  | -                MessageBox(_T("No Test Wizard found"), _T("Prompt"), MB_OK);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if ( Global::g_Config.switchPort.size() == 0 || !pSwitcherCombo->SelectItem(Global::g_Config.switchPort.c_str()) )
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            for (std::vector<TString>::iterator it = m_vtPorts.begin(); it != m_vtPorts.end(); it++) 
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                if ( !m_bFindSwitcherPort )
 | 
	
		
			
				|  |  | -                {
 | 
	
		
			
				|  |  | -                    m_bFindSwitcherPort = IsUSBSwitchPort(it->c_str());
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if ( !m_bFindSwitcherPort )
 | 
	
		
			
				|  |  | -                MessageBox(_T("No USB Switcher found"), _T("Prompt"), MB_OK);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    CMDIFrameWndEx::OnTimer(nIDEvent);
 | 
	
		
			
				|  |  | +	// TODO: 在此添加消息处理程序代码和/或调用默认值
 | 
	
		
			
				|  |  | +	CMFCRibbonBar* pRibbon = GetRibbonBar();
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pRibbon);
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pInfradeCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_INFRAED_COMBOBOX));
 | 
	
		
			
				|  |  | +	CMFCRibbonComboBox* pSwitcherCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_SWITCHER_COMBOBOX));
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pInfradeCombo);
 | 
	
		
			
				|  |  | +	ASSERT_VALID(pSwitcherCombo);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (nIDEvent == 0)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		KillTimer(nIDEvent);
 | 
	
		
			
				|  |  | +		Global::GetSysSerialPort(m_vtPorts);
 | 
	
		
			
				|  |  | +		InitSerialCombobox();
 | 
	
		
			
				|  |  | +		if (Global::g_Config.twPort.size() == 0 || !pInfradeCombo->SelectItem(Global::g_Config.twPort.c_str()))
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			for (std::vector<TString>::iterator it = m_vtPorts.begin(); it != m_vtPorts.end(); it++)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				if (!m_bFindTestWizardPort)
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +					m_bFindTestWizardPort = IsTestWizardPort(it->c_str());
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if (!m_bFindTestWizardPort)
 | 
	
		
			
				|  |  | +				MessageBox(_T("No Test Wizard found"), _T("Prompt"), MB_OK);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (Global::g_Config.switchPort.size() == 0 || !pSwitcherCombo->SelectItem(Global::g_Config.switchPort.c_str()))
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			for (std::vector<TString>::iterator it = m_vtPorts.begin(); it != m_vtPorts.end(); it++)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				if (!m_bFindSwitcherPort)
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +					m_bFindSwitcherPort = IsUSBSwitchPort(it->c_str());
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if (!m_bFindSwitcherPort)
 | 
	
		
			
				|  |  | +				MessageBox(_T("No USB Switcher found"), _T("Prompt"), MB_OK);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	CMDIFrameWndEx::OnTimer(nIDEvent);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    // TODO: 在此添加专用代码和/或调用基类
 | 
	
		
			
				|  |  | -    if (pMsg->message == WM_KEYDOWN)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        if (pMsg->wParam == VK_F3)
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            static BOOL bTopWnd = FALSE;
 | 
	
		
			
				|  |  | -            if (bTopWnd == FALSE)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);//窗口置顶
 | 
	
		
			
				|  |  | -                CString strVersionInfo = _T("Front window (press F3 to cancel or enable the front window)");
 | 
	
		
			
				|  |  | -                SetWindowText(strVersionInfo);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            else
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);//取消窗口置顶	
 | 
	
		
			
				|  |  | -                CString strVersionInfo = _T("Cancel the front (press F3 to cancel or enable the front window)");
 | 
	
		
			
				|  |  | -                SetWindowText(strVersionInfo);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            bTopWnd = !bTopWnd;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            // 必须退出,否则执行2次;
 | 
	
		
			
				|  |  | -            return TRUE;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        /* 放子窗口处理;
 | 
	
		
			
				|  |  | -        else if (pMsg->wParam == VK_F5)
 | 
	
		
			
				|  |  | -        {
 | 
	
		
			
				|  |  | -            Global::g_bLearn = !Global::g_bLearn;
 | 
	
		
			
				|  |  | -            MessageBox(Global::g_bLearn ? _T("开启学习红外") : _T("关闭红外学习"), _T("提示"), MB_OK);
 | 
	
		
			
				|  |  | -            return TRUE;
 | 
	
		
			
				|  |  | -        }*/
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    return CMDIFrameWndEx::PreTranslateMessage(pMsg);
 | 
	
		
			
				|  |  | +	// TODO: 在此添加专用代码和/或调用基类
 | 
	
		
			
				|  |  | +	if (pMsg->message == WM_KEYDOWN)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		if (pMsg->wParam == VK_F3)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			static BOOL bTopWnd = FALSE;
 | 
	
		
			
				|  |  | +			if (bTopWnd == FALSE)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);//窗口置顶
 | 
	
		
			
				|  |  | +				CString strVersionInfo = _T("Front window (press F3 to cancel or enable the front window)");
 | 
	
		
			
				|  |  | +				SetWindowText(strVersionInfo);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			else
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);//取消窗口置顶	
 | 
	
		
			
				|  |  | +				CString strVersionInfo = _T("Cancel the front (press F3 to cancel or enable the front window)");
 | 
	
		
			
				|  |  | +				SetWindowText(strVersionInfo);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			bTopWnd = !bTopWnd;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			// 必须退出,否则执行2次;
 | 
	
		
			
				|  |  | +			return TRUE;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		/* 放子窗口处理:减少更多数据传递;
 | 
	
		
			
				|  |  | +		else if (pMsg->wParam == VK_F5)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			Global::g_bLearn = !Global::g_bLearn;
 | 
	
		
			
				|  |  | +			MessageBox(Global::g_bLearn ? _T("开启学习红外") : _T("关闭红外学习"), _T("提示"), MB_OK);
 | 
	
		
			
				|  |  | +			return TRUE;
 | 
	
		
			
				|  |  | +		}*/
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return CMDIFrameWndEx::PreTranslateMessage(pMsg);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void CMainFrame::OnClose()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -    // TODO: 在此添加消息处理程序代码和/或调用默认值
 | 
	
		
			
				|  |  | -    if ( m_pChildFrame )
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        CFieldTestToolView *pView = (CFieldTestToolView*)m_pChildFrame->GetActiveView();
 | 
	
		
			
				|  |  | -        if ( pView->m_pCamera )
 | 
	
		
			
				|  |  | -            delete pView->m_pCamera;
 | 
	
		
			
				|  |  | -        pView->m_pCamera = NULL;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    CMDIFrameWndEx::OnClose();
 | 
	
		
			
				|  |  | +	// TODO: 在此添加消息处理程序代码和/或调用默认值
 | 
	
		
			
				|  |  | +	if (m_pChildFrame)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		CFieldTestToolView* pView = (CFieldTestToolView*)m_pChildFrame->GetActiveView();
 | 
	
		
			
				|  |  | +		if (pView->m_pCamera)
 | 
	
		
			
				|  |  | +			delete pView->m_pCamera;
 | 
	
		
			
				|  |  | +		pView->m_pCamera = NULL;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	CMDIFrameWndEx::OnClose();
 | 
	
		
			
				|  |  |  }
 |