|
@@ -47,6 +47,9 @@ BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
|
|
|
// 摄像头;
|
|
|
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)
|
|
@@ -292,8 +295,14 @@ void CMainFrame::InitializeRibbon()
|
|
|
|
|
|
CMFCRibbonComboBox *pCameraCombobx = new CMFCRibbonComboBox(ID_RIBBON_CAMERA_COMBOBOX, FALSE);
|
|
|
pGroup->AddButton(pCameraCombobx);
|
|
|
- pCameraCombobx->SetWidth(120);
|
|
|
+ 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);
|
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
@@ -386,7 +395,6 @@ void CMainFrame::InitializeRibbon()
|
|
|
#endif
|
|
|
|
|
|
m_wndRibbonBar.AddToTabs(new CMFCRibbonButton(ID_APP_ABOUT, _T("\na"), m_PanelImages.ExtractIcon (0)));
|
|
|
-
|
|
|
}
|
|
|
|
|
|
BOOL CMainFrame::CreateDockingWindows()
|
|
@@ -660,7 +668,6 @@ void CMainFrame::OnCameraCombobox()
|
|
|
pView->m_pCamera = new CCaptureVideo();
|
|
|
pView->m_pCamera->Init(nCurSel, m_pChildFrame->GetSafeHwnd());
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -838,6 +845,56 @@ void CMainFrame::OnUpdateSwitcherCheckboxB(CCmdUI* pCmdUI)
|
|
|
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());
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void CMainFrame::OnUpdateCameraFlush(CCmdUI* pCmdUI)
|
|
|
+{
|
|
|
+ //pCmdUI->Enable();
|
|
|
+}
|
|
|
+
|
|
|
bool CMainFrame::RegisterDeviceChange()
|
|
|
{
|
|
|
// HID设备的GUID,可在设备管理器中查询,经查结果如下:
|
|
@@ -880,7 +937,7 @@ bool CMainFrame::RegisterDeviceChange()
|
|
|
return true;
|
|
|
#endif
|
|
|
}
|
|
|
-#include <string>
|
|
|
+
|
|
|
BOOL CMainFrame::OnDeviceChange(UINT nEventType, DWORD_PTR dwData)
|
|
|
{
|
|
|
if ( dwData == 0 )
|
|
@@ -981,22 +1038,55 @@ BOOL CMainFrame::OnDeviceChange(UINT nEventType, DWORD_PTR dwData)
|
|
|
// USB等接口设备;
|
|
|
if ( pdbd->dbcc_devicetype == DBT_DEVTYP_DEVICEINTERFACE )
|
|
|
{
|
|
|
-#if 0
|
|
|
DEV_BROADCAST_HDR* phdr = (DEV_BROADCAST_HDR*)dwData;
|
|
|
CMFCRibbonComboBox* pCameraCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_RIBBON_CAMERA_COMBOBOX));
|
|
|
- // 加了线程锁也报错;
|
|
|
- AutoThreadSection at(&g_csCamera);
|
|
|
- m_cap.EnumDevices(pCameraCombo);
|
|
|
-#else
|
|
|
- if ( nEventType == DBT_DEVICEREMOVECOMPLETE )
|
|
|
- {// 设备拨掉;
|
|
|
-
|
|
|
- }
|
|
|
- else if ( nEventType == DBT_DEVICEARRIVAL )
|
|
|
- {// 设备插入;
|
|
|
+ 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->CloseWindow();
|
|
|
+ pView->DestroyWindow();
|
|
|
+
|
|
|
+ m_pChildFrame->CloseWindow();
|
|
|
+ m_pChildFrame = NULL;
|
|
|
+
|
|
|
+ // 设备移除后,设置空;
|
|
|
+ pCameraCombo->DeleteItem(nCurSel);
|
|
|
+ //pCameraCombo->SelectItem(-1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ pCameraCombo->RemoveAllItems();
|
|
|
+ for (std::vector<TString>::iterator it = vtDevices.begin(); it != vtDevices.end(); it++)
|
|
|
+ {
|
|
|
+ pCameraCombo->AddItem(it->c_str());
|
|
|
+ }
|
|
|
}
|
|
|
-#endif
|
|
|
}
|
|
|
|
|
|
TRACE(_T("OnDeviceChange\n"));
|