SDC C-Project CF Review 프로그램
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,12 @@
   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 >*/
   m_CheckInsViewCenterLine.SetCheck(FALSE);
   for (int i = 0; i < 105; i++)
   {
@@ -93,6 +100,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 +126,8 @@
   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);
   DDX_Control(pDX, IDC_CHECK_INS_VIEW_CENTER_LINE, m_CheckInsViewCenterLine);
}
BEGIN_MESSAGE_MAP(CReveiwHistoryDlg, CDialogEx)
@@ -124,6 +140,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)
@@ -140,6 +157,7 @@
   ON_WM_KEYDOWN()
   ON_BN_CLICKED(IDC_BUTTON_OFFSET_APPLY, &CReveiwHistoryDlg::OnBnClickedButtonOffsetApply)
   ON_BN_CLICKED(IDC_BUTTON_OFFSET_SAVE, &CReveiwHistoryDlg::OnBnClickedButtonOffsetSave)
   ON_BN_CLICKED(IDC_CHECK_INS_VIEW_CENTER_LINE, &CReveiwHistoryDlg::OnBnClickedCheckInsViewCenterLine)
END_MESSAGE_MAP()
// CReveiwHistoryDlg 메시지 처리기
@@ -329,6 +347,10 @@
      {
         dc.SetStretchBltMode(COLORONCOLOR);
         m_AlignSecend.Draw(dc, m_Align_rect2);
      }
      if (m_CheckInsViewCenterLine.GetCheck() == TRUE)
      {
         DrawInsViewCenterLine(&dc);
      }
      CDialogEx::OnPaint();
   }
@@ -1236,6 +1258,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 +1468,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 +1587,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 +1819,12 @@
   {
      SetScrollSetting();
   }
   /*< LYW 20211028 - #3684 ADD Start >*/
   if (m_LastSaveOffsetTime >= m_CurrentResultFileTime)
   {
      PostThreadMessage(m_ThreadId, UM_THREAD_WARNING_OFFSET, 0, 0);
   }
   /*< LYW 20211028 - #3684 ADD End >*/
}
void CReveiwHistoryDlg::OnCbnSelchangeComboRawtype()
@@ -1797,6 +1839,25 @@
   m_ConfigOption.m_nSelectRawType = 3;
}
void CReveiwHistoryDlg::DrawInsViewCenterLine(CPaintDC * pDC)
{
   if (m_picture_rect2.Width() == 0 || m_picture_rect2.Height() == 0) return;
   CRect rtDraw = m_picture_rect2;
   CPen pen, *pPen = NULL;
   pen.CreatePen(PS_DOT, 1, RGB(255, 0, 0));
   pDC->SelectObject(&pen);
   //pDC->SelectStockObject(WHITE_PEN);
   // center line
   pDC->MoveTo((rtDraw.Width() / 2) + rtDraw.left, 0 + rtDraw.top);
   pDC->LineTo((rtDraw.Width() / 2) + rtDraw.left, rtDraw.Height() + rtDraw.top);
   pDC->MoveTo(0 + rtDraw.left, (rtDraw.Height() / 2) + rtDraw.top);
   pDC->LineTo(rtDraw.Width() + rtDraw.left, (rtDraw.Height() / 2) + rtDraw.top);
}
void CReveiwHistoryDlg::OnBnClickedBtnFindBin()
@@ -2693,6 +2754,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)
{
@@ -3939,6 +4057,7 @@
{
   // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
   SaveOffset();
   SendMsg2ReviewSystem();
}
BOOL CReveiwHistoryDlg::LoadOffset(CString strFilePath)
@@ -3949,9 +4068,15 @@
   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);
   /*< LYW 20211111 - #3766 ADD Start >*/
   macroFile.GetItem(_T("WARN_STANDARD"), m_dWarnStandard, 0);
   macroFile.GetItem(_T("HARD_STANDARD"), m_dHardStandard, 0);
   /*< LYW 20211111 - #3766 ADD End >*/
   CString strItem = _T("");
   double dXoffset = 0;
   double dYoffset = 0;
@@ -4004,6 +4129,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);
@@ -4028,6 +4156,14 @@
   strItem.Format(_T("XPOS_COUNT"));
   macroFile.SetItem(strItem, m_XposCount);
   /*< LYW 20211111 - #3766 ADD Start >*/
   strItem.Format(_T("WARN_STANDARD"));
   macroFile.SetItem(strItem, m_dWarnStandard);
   strItem.Format(_T("HARD_STANDARD"));
   macroFile.SetItem(strItem, m_dHardStandard);
   /*< LYW 20211111 - #3766 ADD End >*/
   CString strData;
@@ -4070,10 +4206,35 @@
   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;
}
BOOL CReveiwHistoryDlg::SendMsg2ReviewSystem()
{
   HWND hWnd = ::FindWindow(NULL, _T("ReviewSystem"));
   if (hWnd)
   {
      COPYDATASTRUCT cds;
      cds.dwData = COPYDATA_REVIEWHISTORYOR2REVIEWSYSTEM;
      cds.cbData = 0;
      cds.lpData = 0;
      ::SendMessage(hWnd, WM_COPYDATA, 0, (LPARAM)(LPVOID)&cds);
      return TRUE;
   }
   return FALSE;
}
BOOL CReveiwHistoryDlg::ApplyOffset(int nModuleidx, int nCamIndex, int ScanIndex, double dXOffsetValue, double dYOffsetValue)
@@ -4259,3 +4420,34 @@
   }
}
/*< 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 >*/
void CReveiwHistoryDlg::OnBnClickedCheckInsViewCenterLine()
{
   // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
   Invalidate(TRUE);
}