From 08215fc9a36a1648e1a5040ffe5696b96483c3b9 Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 월, 01 11월 2021 14:39:43 +0900
Subject: [PATCH] Ongoing90 #3684 CF AOI Review 전설비 Review History Defect이미지 클릭시 Offset 자동 계산 기능 추가

---
 ReviewHistory/ReveiwHistory/resource.h           |    4 +
 ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp |  129 ++++++++++++++++++++++++++++++++++++++++++
 ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h   |   24 ++++++++
 ReviewHistory/ReveiwHistory/akImageView.cpp      |   14 ++++
 ReviewHistory/ReveiwHistory/ReveiwHistory.rc     |    0 
 ReviewHistory/bin/ReviewHistroy.exe              |    0 
 ReviewHistory/ReveiwHistory/akFormationMap.h     |    5 +
 7 files changed, 172 insertions(+), 4 deletions(-)

diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistory.rc b/ReviewHistory/ReveiwHistory/ReveiwHistory.rc
index 3a41ab0..ad8cfd9 100644
--- a/ReviewHistory/ReveiwHistory/ReveiwHistory.rc
+++ b/ReviewHistory/ReveiwHistory/ReveiwHistory.rc
Binary files differ
diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
index 0f820c7..400bc82 100644
--- a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
+++ b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
@@ -60,6 +60,7 @@
 	, m_dEditOffsetX(0)
 	, m_dEditOffsetY(0)
 	, m_strGantryIdx(_T(""))
+	, m_TextLastSaveOffsetTime(_T(""))
 {
 	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 
@@ -83,6 +84,11 @@
 	m_dCurDefectIdx = 0;
 	m_dCurDefectID = 0;
 	/*< LYW 20211018 - #3684 ADD End >*/
+	/*< LYW 20211029 - #3684 ADD Start >*/
+	DWORD  dwThreadId = 0;
+	HANDLE hThread = CreateThread(NULL, 0, RunThreadReviewHistory, this, 0, &dwThreadId);
+	m_ThreadId = dwThreadId;
+	/*< LYW 20211029 - #3684 ADD End >*/
 
 	for (int i = 0; i < 105; i++)
 	{
@@ -93,6 +99,13 @@
 		m_nImageSize[i] = 0;
 	}
 }
+
+/*< LYW 20211029 - #3684 ADD Start >*/
+CReveiwHistoryDlg::~CReveiwHistoryDlg(void)
+{
+	PostThreadMessage(m_ThreadId, WM_QUIT, 0, 0);
+}
+/*< LYW 20211029 - #3684 ADD End >*/
 
 void CReveiwHistoryDlg::DoDataExchange(CDataExchange* pDX)
 {
@@ -112,6 +125,7 @@
 	DDX_Text(pDX, IDC_EDIT_OFFSET_X, m_dEditOffsetX);
 	DDX_Text(pDX, IDC_EDIT_OFFSET_Y, m_dEditOffsetY);
 	DDX_Text(pDX, IDC_EDIT_DFFSET_GANTRY_IDX, m_strGantryIdx);
+	DDX_Text(pDX, IDC_STATIC_LAST_SAVE_OFFSET_TIME, m_TextLastSaveOffsetTime);
 }
 
 BEGIN_MESSAGE_MAP(CReveiwHistoryDlg, CDialogEx)
@@ -124,6 +138,7 @@
 	ON_BN_CLICKED(IDC_BUTTON_MAPVIEW_FIT, &CReveiwHistoryDlg::OnBnClickedButtonMapviewFit)
 	ON_MESSAGE(UM_FORMMAP_DEFECTSELECT, OnMapDefectSelected)
 	ON_MESSAGE(UM_FORMMAP_DEFECTMOUSEOVER, OnMapDefectMouseOver)
+	ON_MESSAGE(UM_WARNING_OFFSET, OnDisplayWarning)
 	ON_MESSAGE(UM_FORMMAP_IMAGEMOUSECLICK, OnImageClick)
 	ON_COMMAND(ID_OPTION_PATHSETTING, &CReveiwHistoryDlg::OnOptionPathsetting)
 	ON_COMMAND(ID_VIEW_ALLDEFECT, &CReveiwHistoryDlg::OnViewAlldefect)
@@ -1236,6 +1251,12 @@
 	return 0;
 }
 
+LRESULT CReveiwHistoryDlg::OnDisplayWarning(WPARAM wParam, LPARAM lParam)
+{
+	AfxMessageBox(_T("�꽑�깮�븯�떊 由щ럭 �뜲�씠�꽣�뒗 吏�湲� �쟻�슜�맂 OFFSET �뜲�씠�꽣 �씠�쟾�쓽 �뜲�씠�꽣 �엯�땲�떎. �솗�떎�븳 寃쎌슦媛� �븘�땲�씪硫� OFFSET �뀑�똿�쓣 湲덊빐二쇱떗�떆�삤."), MB_OK | MB_ICONWARNING);
+	return 0;
+}
+
 LRESULT CReveiwHistoryDlg::OnListDefectSelected(WPARAM wParam, LPARAM lParam)
 {
 	int nSelectDefect = static_cast<int>(wParam);
@@ -1440,6 +1461,8 @@
 		nSecond = write_local_time.wSecond;
 		CString strTime;
 		strTime.Format("%04d-%02d-%02d-%02d-%02d-%02d", nYear, nMonth, nDay, nHour, nMinute, nSecond);
+
+		CloseHandle(h_File);
 		
 		m_vecStrGridTimeList.push_back(strTime);
 	}
@@ -1557,6 +1580,12 @@
 		Imagenoload();
 		return;
 	}
+
+	/*< LYW 20211028 - #3684 ADD Start >*/
+	CString strBinFileName;
+	strBinFileName.Format("%s\\%s", strBinPath, strFileName);
+	m_CurrentResultFileTime = GetCurrentResultFileTime(strBinFileName);
+	/*< LYW 20211028 - #3684 ADD End >*/
 
 	if (bNewFile && m_chkSingle.GetCheck())
 	{
@@ -1783,6 +1812,10 @@
 	{
 		SetScrollSetting();
 	}
+	/*< LYW 20211028 - #3684 ADD Start >*/
+	HWND hWnd = GetSafeHwnd();
+	PostThreadMessage(m_ThreadId, UM_THREAD_WARNING_OFFSET, 0, 0);
+	/*< LYW 20211028 - #3684 ADD End >*/
 }
 
 void CReveiwHistoryDlg::OnCbnSelchangeComboRawtype()
@@ -2693,6 +2726,63 @@
 	m_ctlFileCount.GetWindowText(strCount);
 	m_nFileCount = _ttoi(strCount);
 }
+
+/*< LYW 20211028 - #3684 ADD Start >*/
+void CReveiwHistoryDlg::UpdateLastSaveOffsetTime(CString FileName)
+{
+
+	HANDLE h_file = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+
+	FILETIME create_time, access_time, write_time;
+	GetFileTime(h_file, &create_time, &access_time, &write_time);
+
+	SYSTEMTIME access_system_time;
+	FileTimeToSystemTime(&access_time, &access_system_time);
+
+	SYSTEMTIME access_system_Local_time;
+	SystemTimeToTzSpecificLocalTime(NULL, &access_system_time, &access_system_Local_time);
+
+	CTime FIleTime(access_system_Local_time);
+	m_LastSaveOffsetTime = FIleTime;
+
+	CloseHandle(h_file);
+
+	m_TextLastSaveOffsetTime.Format(_T("%04d/%02d/%02d/%02d:%02d:%02d"), m_LastSaveOffsetTime.GetYear(), m_LastSaveOffsetTime.GetMonth(), 
+		m_LastSaveOffsetTime.GetDay(), m_LastSaveOffsetTime.GetHour(), m_LastSaveOffsetTime.GetMinute(), m_LastSaveOffsetTime.GetSecond());
+
+	UpdateData(FALSE);
+}
+CTime CReveiwHistoryDlg::GetCurrentResultFileTime(CString FileName)
+{
+	HANDLE h_file = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+
+	if (h_file != INVALID_HANDLE_VALUE)
+	{
+		FILETIME create_time, access_time, write_time;
+		GetFileTime(h_file, &create_time, &access_time, &write_time);
+
+		SYSTEMTIME access_system_time;
+		FileTimeToSystemTime(&access_time, &access_system_time);
+
+		SYSTEMTIME access_system_Local_time;
+		SystemTimeToTzSpecificLocalTime(NULL, &access_system_time, &access_system_Local_time);
+
+		CloseHandle(h_file);
+
+		CTime FIleTime(access_system_Local_time);
+		m_CurrentResultFileTime = FIleTime;
+
+		return m_CurrentResultFileTime;
+	}
+	
+	else
+	{
+		return CTime::GetCurrentTime();
+	}
+
+
+}
+/*< LYW 20211028 - #3684 ADD End >*/
 
 BOOL CReveiwHistoryDlg::GetCheckFileLoad(int nCount)
 {
@@ -3949,6 +4039,8 @@
 	if (!macroFile.Read(strFilePath))
 		return FALSE;
 
+	UpdateLastSaveOffsetTime(strFilePath);
+
 	macroFile.GetItem(_T("CAMERA_COUNT"), m_nCameraCount, 0);
 	macroFile.GetItem(_T("SCAN_COUNT"), m_nScanCount, 0);
 	macroFile.GetItem(_T("XPOS_COUNT"), m_XposCount, 0);
@@ -4004,6 +4096,9 @@
 	CString strForderPath;
 	CString strFileName;
 	CTime time = CTime::GetCurrentTime();
+	/*< LYW 20211028 - #3684 ADD Start >*/
+	m_LastSaveOffsetTime = time;
+	/*< LYW 20211028 - #3684 ADD End >*/
 	strFileName.Format(_T("ReviewOffSet_%04d%02d%02d%02d%02d%02d.cfg"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
 	strForderPath.Format(_T("%s%s"), REVIEW_OFFSET_BACKUP_FORDER_PATH, strFileName);
 
@@ -4070,8 +4165,14 @@
 
 	bReturn = macroFile.Write(strFilePath);
 
-	if (bReturn) AfxMessageBox(_T("OFFSET SAVE SUCCESS"), MB_OK | MB_ICONASTERISK);
-	else AfxMessageBox(_T("OFFSET SAVE FAIL"), MB_OK | MB_ICONASTERISK);
+	if (bReturn)
+	{
+		/*< LYW 20211028 - #3684 ADD Start >*/
+		UpdateLastSaveOffsetTime(strFilePath);
+		AfxMessageBox(_T("OFFSET SAVE SUCCESS"), MB_OK | MB_ICONASTERISK);
+		/*< LYW 20211028 - #3684 ADD End >*/
+	}
+	else AfxMessageBox(_T("OFFSET SAVE FAIL"), MB_OK | MB_ICONHAND);
 
 	return bReturn;
 }
@@ -4259,3 +4360,27 @@
 	}
 }
 /*< LYW 20211025 - #3684 ADD End >*/
+
+/*< LYW 20211029 - #3684 ADD Start >*/
+DWORD RunThreadReviewHistory(LPVOID param)
+{
+	MSG msg;
+	CReveiwHistoryDlg* pDlg = (CReveiwHistoryDlg*)param;
+	while (GetMessage(&msg, NULL, 0, 0))
+	{
+		//CString* pstrLog = reinterpret_cast<CString*>(msg.wParam);
+		switch (msg.message)
+		{
+		case UM_THREAD_WARNING_OFFSET:
+			
+			Sleep(100);
+			pDlg->PostMessage(UM_WARNING_OFFSET);
+			break;
+
+		default:
+			break;
+		}
+	}
+	return 0;
+}
+/*< LYW 20211029 - #3684 ADD End >*/
\ No newline at end of file
diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h
index 420f3fb..7f87bc7 100644
--- a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h
+++ b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h
@@ -63,12 +63,19 @@
 typedef std::vector<VecOffSetScanData> VecOffSetCameraInfo;
 /*< LYW 20211025 - #3684 ADD End >*/
 
+/*< LYW 20211029 - #3684 ADD Start >*/
+DWORD RunThreadReviewHistory(LPVOID param);
+/*< LYW 20211029 - #3684 ADD End >*/
+
 // CReveiwHistoryDlg ���솕 �긽�옄
 class CReveiwHistoryDlg : public CDialogEx
 {
 // �깮�꽦�엯�땲�떎.
 public:
 	CReveiwHistoryDlg(CWnd* pParent = nullptr);	// �몴以� �깮�꽦�옄�엯�땲�떎.
+	/*< LYW 20211029 - #3684 ADD Start >*/
+	~CReveiwHistoryDlg(void);
+	/*< LYW 20211029 - #3684 ADD End >*/
 
 // ���솕 �긽�옄 �뜲�씠�꽣�엯�땲�떎.
 #ifdef AFX_DESIGN_TIME
@@ -149,6 +156,14 @@
 	int m_dCurDefectIdx;
 	int m_dCurDefectID;
 	/*< LYW 20211018 - #3684 ADD End >*/
+
+	/*< LYW 20211028 - #3684 ADD Start >*/
+	CTime m_LastSaveOffsetTime;
+	CTime m_CurrentResultFileTime;
+	/*< LYW 20211028 - #3684 ADD End >*/
+	/*< LYW 20211029 - #3684 ADD Start >*/
+	DWORD m_ThreadId;
+	/*< LYW 20211029 - #3684 ADD End >*/
 
 	// tracker
 	BOOL			m_bDrawTracker;
@@ -243,6 +258,7 @@
 	afx_msg void OnBnClickedButtonMapviewFit();
 	afx_msg void OnDestroy();
 	afx_msg LRESULT OnMapDefectSelected(WPARAM wParam, LPARAM lParam);
+	afx_msg LRESULT OnDisplayWarning(WPARAM wParam, LPARAM lParam);
 	afx_msg LRESULT OnMapDefectMouseOver(WPARAM wParam, LPARAM lParam);
 	afx_msg LRESULT OnListDefectSelected(WPARAM wParam, LPARAM lParam);
 	/*< LYW 20211018 - #3684 ADD Start >*/
@@ -312,6 +328,11 @@
 	void ImageRotate(CImage& SrcImage, CImage& DstImage, double degree = 180.0);
 	//LYW 20210825 #3486 ADD END
 
+	/*< LYW 20211028 - #3684 ADD Start >*/
+	void UpdateLastSaveOffsetTime(CString FileName);
+	CTime GetCurrentResultFileTime(CString FileName);
+	/*< LYW 20211028 - #3684 ADD End >*/
+
 	BOOL GetCheckFileLoad(int nCount);
 
 	void GlassInfoRest();
@@ -350,4 +371,7 @@
 	double m_dEditOffsetX;
 	double m_dEditOffsetY;
 	CString m_strGantryIdx;
+	/*< LYW 20211028 - #index ADD Start >*/
+	CString m_TextLastSaveOffsetTime;
+	/*< LYW 20211028 - #index ADD End >*/
 };
diff --git a/ReviewHistory/ReveiwHistory/akFormationMap.h b/ReviewHistory/ReveiwHistory/akFormationMap.h
index 2312a97..f5d2bb6 100644
--- a/ReviewHistory/ReveiwHistory/akFormationMap.h
+++ b/ReviewHistory/ReveiwHistory/akFormationMap.h
@@ -5,6 +5,11 @@
 
 #define UM_FORMMAP_DEFECTMOUSEOVER WM_USER+0x2001
 #define UM_FORMMAP_DEFECTSELECT WM_USER+0x2002
+/*< LYW 20211028 - #3684 ADD Start >*/
+#define UM_WARNING_OFFSET WM_USER+0x2004
+//Thread msg Map
+#define UM_THREAD_WARNING_OFFSET WM_USER + 0x1001
+/*< LYW 20211028 - #3684 ADD End >*/
 
 class CakFormationMap : public CakGraphBasic3
 {
diff --git a/ReviewHistory/ReveiwHistory/akImageView.cpp b/ReviewHistory/ReveiwHistory/akImageView.cpp
index cd95e60..fda76d2 100644
--- a/ReviewHistory/ReveiwHistory/akImageView.cpp
+++ b/ReviewHistory/ReveiwHistory/akImageView.cpp
@@ -268,8 +268,11 @@
 		//글라스 외각선 그리기 태현[2016/3/23]
 		{
 			pOldBrush = (CBrush*)pDC->SelectObject(&BrushGlass);
-			CPen pen;
+			CPen pen, CenterLinePen;
 			pen.CreatePen(PS_SOLID, 1, RGB(64, 191, 79));
+			/*< LYW 20211029 - #3684 ADD Start >*/
+			CenterLinePen.CreatePen(PS_DOT, 1, RGB(255, 0, 0));
+			/*< LYW 20211029 - #3684 ADD End >*/
 			pDC->SelectObject(&pen);
 
 			pDC->MoveTo(GetWindowPosX(rectGlass.left), GetWindowPosY(rectGlass.top));
@@ -278,7 +281,16 @@
 			pDC->LineTo(GetWindowPosX(rectGlass.left), GetWindowPosY(rectGlass.bottom));
 			pDC->LineTo(GetWindowPosX(rectGlass.left), GetWindowPosY(rectGlass.top));
 
+			/*< LYW 20211029 - #3684 ADD Start >*/
+			pDC->SelectObject(&CenterLinePen);
+			pDC->MoveTo(GetWindowPosX((rectGlass.left + rectGlass.right) / 2), GetWindowPosY(rectGlass.top));
+			pDC->LineTo(GetWindowPosX((rectGlass.left + rectGlass.right) / 2), GetWindowPosY(rectGlass.bottom));
+			pDC->MoveTo(GetWindowPosX(rectGlass.left), GetWindowPosY((rectGlass.top + rectGlass.bottom) / 2));
+			pDC->LineTo(GetWindowPosX(rectGlass.right), GetWindowPosY((rectGlass.top + rectGlass.bottom) / 2));
+			/*< LYW 20211029 - #3684 ADD End >*/
+			
 			pDC->SelectObject(&pOldBrush);
+
 		}
 	}
 	pDC->SelectClipRgn(NULL);	
diff --git a/ReviewHistory/ReveiwHistory/resource.h b/ReviewHistory/ReveiwHistory/resource.h
index 267fb35..bc22a56 100644
--- a/ReviewHistory/ReveiwHistory/resource.h
+++ b/ReviewHistory/ReveiwHistory/resource.h
@@ -93,6 +93,8 @@
 #define IDC_EDIT_OFFSET_Y               1058
 #define IDC_BUTTON_OFFSET_SAVE          1059
 #define IDC_BUTTON_OFFSET_APPLY         1060
+#define IDC_STATIC_GROUP_LAST_OFFSET_SAVE_TIME 1061
+#define IDC_STATIC_LAST_SAVE_OFFSET_TIME 1062
 #define ID_OPTION_PATHSETTING           32771
 #define ID_VIEW_ALLDEFECT               32772
 #define ID_VIEW_REVIEWDEFECT            32773
@@ -105,7 +107,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        150
 #define _APS_NEXT_COMMAND_VALUE         32776
-#define _APS_NEXT_CONTROL_VALUE         1061
+#define _APS_NEXT_CONTROL_VALUE         1063
 #define _APS_NEXT_SYMED_VALUE           104
 #endif
 #endif
diff --git a/ReviewHistory/bin/ReviewHistroy.exe b/ReviewHistory/bin/ReviewHistroy.exe
index 4e7d312..3ac950b 100644
--- a/ReviewHistory/bin/ReviewHistroy.exe
+++ b/ReviewHistory/bin/ReviewHistroy.exe
Binary files differ

--
Gitblit v1.9.3