Selaa lähdekoodia

找到OnInitialUpdate调用2次的原因:并非网上说的由于CSplitterWnd分割导致的,而是调用CChildFrame::LoadFrame时,就已经调用了一次OnInitialUpdate,而由于本人在这之后,手动又调用了一次OnInitialUpdate,导致出现2次调用;
所以,把手动调用的OnInitialUpdate去掉即可;

scbc.sat2 5 vuotta sitten
vanhempi
commit
51cf858ec4

+ 82 - 3
SATHelper/SATHelper/DeviceView.cpp

@@ -54,6 +54,7 @@ BEGIN_MESSAGE_MAP(CDeviceView, CFormView)
 	ON_BN_CLICKED(IDC_CHECK2, &CDeviceView::OnBnClickedCheck2)
 	ON_CBN_SELCHANGE(IDC_COMBO1, &CDeviceView::OnCbnSelchangeCombo1)
 	ON_CBN_SELCHANGE(IDC_COMBO2, &CDeviceView::OnCbnSelchangeCombo2)
+	ON_WM_CREATE()
 END_MESSAGE_MAP()
 
 
@@ -346,6 +347,7 @@ void CDeviceView::OnInitialUpdate()
 {
 	CFormView::OnInitialUpdate();
 
+	// TODO:  在此添加您专用的创建代码
 	ParseJson();
 	// Ribbon Combobox添加默认项;
 	CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
@@ -353,7 +355,7 @@ void CDeviceView::OnInitialUpdate()
 	CMFCRibbonComboBox* pOcrCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBOX_OCR));
 	if (pOcrCombo)
 	{
-		for ( auto it : m_bdcfg.list_count )
+		for (auto it : m_bdcfg.list_count)
 		{
 			pOcrCombo->AddItem(it.first.c_str());
 		}
@@ -363,7 +365,7 @@ void CDeviceView::OnInitialUpdate()
 	}
 
 	// 剩余次数;
-	CMFCRibbonEdit *pOcrCount = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_COUNT));
+	CMFCRibbonEdit* pOcrCount = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_COUNT));
 	if (pOcrCount)
 	{
 		pOcrCount->SetEditText(m_bdcfg.reset_time.c_str());
@@ -398,7 +400,7 @@ void CDeviceView::OnInitialUpdate()
 		// UI下拉框;
 		CString curText = pChipCombo->GetEditText();
 		CMFCRibbonComboBox* pStyleCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_UI));
-		for ( auto it : m_map_tree.find(curText.GetString())->second )
+		for (auto it : m_map_tree.find(curText.GetString())->second)
 		{
 			pStyleCombo->AddItem(it.c_str());
 		}
@@ -658,3 +660,80 @@ void CDeviceView::OnCbnSelchangeCombo2()
 		}
 	}
 }
+
+// 说明:使用CFormView时,任务初始化动作都应该放在OnCreate中;
+// 而非放在OnInitialUpdate中执行,因为OnInitialUpdate可能被调用多次;
+int CDeviceView::OnCreate(LPCREATESTRUCT lpCreateStruct)
+{
+	if (CFormView::OnCreate(lpCreateStruct) == -1)
+		return -1;
+
+#if 0
+	// TODO:  在此添加您专用的创建代码
+	ParseJson();
+	// Ribbon Combobox添加默认项;
+	CMFCRibbonBar* pRibbon = g_pMainFrame->GetRibbonBar();
+	ASSERT_VALID(pRibbon);
+	CMFCRibbonComboBox* pOcrCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBOX_OCR));
+	if (pOcrCombo)
+	{
+		for (auto it : m_bdcfg.list_count)
+		{
+			pOcrCombo->AddItem(it.first.c_str());
+		}
+
+		// 选择默认项;
+		pOcrCombo->SetEditText(m_bdcfg.cur_count.c_str());
+	}
+
+	// 剩余次数;
+	CMFCRibbonEdit* pOcrCount = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_COUNT));
+	if (pOcrCount)
+	{
+		pOcrCount->SetEditText(m_bdcfg.reset_time.c_str());
+	}
+
+	// 声音等级;
+	CMFCRibbonEdit* pSoundLevel = DYNAMIC_DOWNCAST(CMFCRibbonEdit, pRibbon->FindByID(ID_EDIT_SOUND_LEVEL));
+	if (pSoundLevel)
+	{
+		pSoundLevel->SetEditText(m_bdcfg.reset_time.c_str());
+	}
+
+	// 全步骤截图;
+// 	CMFCRibbonCheckBox* pCheckFullCut = DYNAMIC_DOWNCAST(CMFCRibbonCheckBox, pRibbon->FindByID(ID_CHECK_FULL_CUT));
+// 	if (pCheckFullCut)
+// 	{
+// 		pCheckFullCut->SetCheck();
+// 	}
+
+	// MenuTree;
+	CMFCRibbonComboBox* pChipCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_PRODUCT));
+	if (pChipCombo)
+	{
+		for (auto it : m_map_tree)
+		{
+			pChipCombo->AddItem(it.first.c_str());
+		}
+
+		// 选择默认项;
+		pChipCombo->SetEditText(m_rscfg.menutree_chip.c_str());
+
+		// UI下拉框;
+		CString curText = pChipCombo->GetEditText();
+		CMFCRibbonComboBox* pStyleCombo = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbon->FindByID(ID_COMBO_UI));
+		for (auto it : m_map_tree.find(curText.GetString())->second)
+		{
+			pStyleCombo->AddItem(it.c_str());
+		}
+		pStyleCombo->SetEditText(m_rscfg.menutree_style.c_str());
+	}
+
+	// 启动设备;
+	Global::GetSysSerialPort(m_vtCOM);
+	InitCombobox_port();
+	RunDevice();
+#endif
+
+	return 0;
+}

+ 1 - 0
SATHelper/SATHelper/DeviceView.h

@@ -117,6 +117,7 @@ public:
 	afx_msg void OnBnClickedCheck2();
 	afx_msg void OnCbnSelchangeCombo1();
 	afx_msg void OnCbnSelchangeCombo2();
+	afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
 };
 
 

+ 2 - 2
SATHelper/SATHelper/MainFrm.cpp

@@ -315,12 +315,12 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 	if (m_pDeviceView->LoadFrame(DLG_DEVICEMANAGER, WS_MAXIMIZE | WS_CHILDWINDOW| WS_OVERLAPPEDWINDOW, this, &context2))
 	{
 		//m_pDeviceView->ShowWindow(SW_SHOWMAXIMIZED);
-		m_pDeviceView->InitialUpdateFrame(NULL, TRUE);
+		//m_pDeviceView->InitialUpdateFrame(NULL, TRUE);
 		//m_pDeviceView->MDIActivate();
 	}
 #endif
 
-	//m_pUB530View->MDIActivate();
+	m_pUB530View->MDIActivate();
 	//m_pUB530View->ShowWindow(SW_SHOWMAXIMIZED);
 
 	return 0;

+ 1 - 2
SATHelper/SATHelper/SATHelper.cpp

@@ -182,8 +182,7 @@ BOOL CSATHelperApp::InitInstance()
 
 	// 创建模板类的文档对象;
 	pMainFrame->m_pDoc = (CSATHelperDoc*)pDocTemplate->CreateNewDocument();
-	CCreateContext cc;
-	if (!pMainFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, &cc))
+	if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
 	{
 		delete pMainFrame;
 		return FALSE;