SDC C-Project CF Review 프로그램
LYW
2021-09-14 ffe71aadfdcb4a9ea2ac4d8d320983d42ef3cad5
ReviewSystem/ReviewRecipeEditor/ReviewRecipeEditorDlg.cpp
@@ -1,5 +1,5 @@
// ReviewRecipeEditorDlg.cpp : 구현 파일
// ReviewRecipeEditorDlg.cpp : ���� ����
//
#include "stdafx.h"
@@ -17,7 +17,7 @@
#endif
// CReviewRecipeEditorDlg 대화 상자
// CReviewRecipeEditorDlg ��ȭ ����
CReviewRecipeEditorDlg::CReviewRecipeEditorDlg(CWnd* pParent /*=NULL*/)
   : CDialog(CReviewRecipeEditorDlg::IDD, pParent)
@@ -162,18 +162,18 @@
END_MESSAGE_MAP()
// CReviewRecipeEditorDlg 메시지 처리기
// CReviewRecipeEditorDlg �޽��� ó����
BOOL CReviewRecipeEditorDlg::OnInitDialog()
{
   CDialog::OnInitDialog();
   // 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
   //  프레임워크가 이 작업을 자동으로 수행합니다.
   SetIcon(m_hIcon, TRUE);         // 큰 아이콘을 설정합니다.
   SetIcon(m_hIcon, FALSE);      // 작은 아이콘을 설정합니다.
   // �� ��ȭ ������ �������� �����մϴ�. ���� ���α׷��� �� â�� ��ȭ ���ڰ� �ƴ� ��쿡��
   //  �����ӿ�ũ�� �� �۾��� �ڵ����� �����մϴ�.
   SetIcon(m_hIcon, TRUE);         // ū �������� �����մϴ�.
   SetIcon(m_hIcon, FALSE);      // ���� �������� �����մϴ�.
   // TODO: 여기에 추가 초기화 작업을 추가합니다.
   // TODO: ���⿡ �߰� �ʱ�ȭ �۾��� �߰��մϴ�.
   //m_bReviewSystemPC = IsReviewSystemPC();
   m_bReviewSystemPC = TRUE;
   pReviewRecipeEditor = this;
@@ -189,29 +189,29 @@
   InitRecipeListGridControl();
   RefreshRecipeList();
   return TRUE;  // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
   return TRUE;  // ��Ŀ���� ��Ʈ�ѿ� �������� ������ TRUE�� ��ȯ�մϴ�.
}
// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면
//  아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는
//  프레임워크에서 이 작업을 자동으로 수행합니다.
// ��ȭ ���ڿ� �ּ�ȭ ���߸� �߰��� ��� �������� �׸�����
//  �Ʒ� �ڵ尡 �ʿ��մϴ�. ����/�� ���� ����ϴ� MFC ���� ���α׷��� ��쿡��
//  �����ӿ�ũ���� �� �۾��� �ڵ����� �����մϴ�.
void CReviewRecipeEditorDlg::OnPaint()
{
   if (IsIconic())
   {
      CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
      CPaintDC dc(this); // �׸��⸦ ���� ����̽� ���ؽ�Ʈ
      SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
      // 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다.
      // Ŭ���̾�Ʈ �簢������ �������� ����� ����ϴ�.
      int cxIcon = GetSystemMetrics(SM_CXICON);
      int cyIcon = GetSystemMetrics(SM_CYICON);
      CRect rect;
      GetClientRect(&rect);
      int x = (rect.Width() - cxIcon + 1) / 2;
      int y = (rect.Height() - cyIcon + 1) / 2;   
      // 아이콘을 그립니다.
      // �������� �׸��ϴ�.
      dc.DrawIcon(x, y, m_hIcon);
   }
   else
@@ -220,8 +220,8 @@
   }
}
// 사용자가 최소화된 창을 끄는 동안에 커서가 표시되도록 시스템에서
//  이 함수를 호출합니다.
// ����ڰ� �ּ�ȭ�� â�� ��� ���ȿ� Ŀ���� ǥ�õǵ��� �ý��ۿ���
//  �� �Լ��� ȣ���մϴ�.
HCURSOR CReviewRecipeEditorDlg::OnQueryDragIcon()
{
   return static_cast<HCURSOR>(m_hIcon);
@@ -230,7 +230,7 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewRcpEditorCreate()
{
   // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
   // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
   BOOL bUseRecipeInfo = FALSE;
   int nIdx;
   CString strRecipeName, strNewRecipeName, strMessage;
@@ -240,7 +240,7 @@
   if(cellID.row > 0 && cellID.col > 0)
   {
      strRecipeName = m_ctrlGridRecipeList.GetItemText(cellID.row, 1);
      strMessage.Format(_T("Do you want to create new recipe using %s recipe information?"), strRecipeName);//_T("%s 레시피 정보를 이용하여 생성하시겠습니까?"), strRecipeName);
      strMessage.Format(_T("Do you want to create new recipe using %s recipe information?"), strRecipeName);//_T("%s ������ ������ �̿��Ͽ� �����Ͻðڽ��ϱ�?"), strRecipeName);
      //if (IDYES == AfxMessageBox(strMessage, MB_YESNO | MB_ICONQUESTION))
      //{
@@ -268,11 +268,11 @@
      if(nIdx != -1)
      {
         strTemp = strTemp.Mid(nIdx + 1);
         strNewPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
         strNewPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp); //210805
      }
      else
      {
         strNewPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strNewRecipeName);
         strNewPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strNewRecipeName);  //210805
      }
   }
@@ -290,22 +290,35 @@
         if(nIdx != -1)
         {
            strTemp = strTemp.Mid(nIdx + 1);
            strSrcPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
            strSrcPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp); //210805
         }
         else
         {
            strSrcPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);
            strSrcPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);  //210805
         }
      }
         
      if(CopyFile(strSrcPath, strNewPath, FALSE) == FALSE)
      {
         strMessage.Format(_T("Fail to create %s recipe"));//_T("%s 레시피 생성 실패!"));
         strMessage.Format(_T("Fail to create %s recipe"));//_T("%s ������ ���� ����!"));
         AfxMessageBox(strMessage);
      }
      else
      {
         // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
         //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
         CString strBackupPath = _REVIEW_RECIPE_BACKUP_PATH_CPJT;
         CreateDirectory(strBackupPath, NULL);
         // set backup file
         CString strBackupFile = _T("");
         CString strSource, strDest;
         strSource.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, strNewRecipeName);
         strDest.Format(_T("%s\\%s.rcp"), strBackupPath, strNewRecipeName);
         CopyFile(strSource, strDest, TRUE);
         //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
         // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
         COPYDATA_RECIPE2REV copyData;
         copyData.Message = MsgRecipe2Rev_RecipeCreate;
         copyData.nPPID = _ttoi(strNewRecipeName);
@@ -318,12 +331,12 @@
      if(file.Open(strNewPath, CFile::modeCreate | CFile::modeWrite) == FALSE)
      {
         strMessage.Format(_T("Fail to create %s recipe"));//_T("%s 레시피 생성 실패!"));
         strMessage.Format(_T("Fail to create %s recipe"));//_T("%s ������ ���� ����!"));
         AfxMessageBox(strMessage);
      }
      else
      {
         strMessage.Format(_T("Please select the default file!"));//_T("먼저 기본 파일을 선택해주세요!"));
         strMessage.Format(_T("Please select the default file!"));//_T("���� �⺻ ������ �������ּ���!"));
         AfxMessageBox(strMessage);            
      }
@@ -355,16 +368,16 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewRcpEditorDelete()
{
   // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
   // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
   int nIdx;
   CString strRecipeName, strPath, strMessage, strTemp;
   CCellID cellID = m_ctrlGridRecipeList.GetFocusCell();
   if(cellID.row > 0 && cellID.col > 0)
   if (cellID.row > 0 && cellID.col > 0)
   {
      strRecipeName = m_ctrlGridRecipeList.GetItemText(cellID.row, 1);
      if(m_bReviewSystemPC)
      if (m_bReviewSystemPC)
      {
         strPath.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, strRecipeName);
      }
@@ -373,23 +386,23 @@
         strTemp.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, strRecipeName);
         nIdx = strTemp.Find(_T("\\"));
         if(nIdx != -1)
         if (nIdx != -1)
         {
            strTemp = strTemp.Mid(nIdx + 1);
            strPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
            strPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp); //210805
         }
         else
         {
            strPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);
            strPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName); //210805
         }
      }
      //_T("%s 레시피를 삭제하시겠습니까?"), strRecipeName);
      //_T("%s �����Ǹ� �����Ͻðڽ��ϱ�?"), strRecipeName);
      strMessage.Format(_T("Do you want to delete %s recipe?"), strRecipeName);
      if (IDYES == AfxMessageBox(strMessage, MB_YESNO | MB_ICONQUESTION))
      {
         // [2017:5:20]-[WEZASW] : 현재 적용된 Recipe(PPID)는 삭제 금지 요청.
         // [2017:5:20]-[WEZASW] : ���� ����� Recipe(PPID)�� ���� ���� ��û.
         if (strRecipeName.Compare(m_strCurrentRecipeName) == 0)
         {
            strMessage.Format(_T("Currently applied Recipe(%s) can not be deleted!"), strRecipeName);
@@ -398,8 +411,16 @@
         }
         DeleteFile(strPath);
         //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
         CString strBackupPath = _REVIEW_RECIPE_BACKUP_PATH_CPJT;
         CString strDest;
         // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
         strDest.Format(_T("%s\\%s.rcp"), strBackupPath, strRecipeName);
         DeleteFile(strDest);
         //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
         // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
         COPYDATA_RECIPE2REV copyData;
         copyData.Message = MsgRecipe2Rev_RecipeDelete;
         copyData.nPPID = _ttoi(strRecipeName);
@@ -408,7 +429,7 @@
   }
   else
   {
      AfxMessageBox(_T("Please select recipe."));//_T("레시피를 선택하세요."));
      AfxMessageBox(_T("Please select recipe."));//_T("�����Ǹ� �����ϼ���."));
   }
   RefreshRecipeList();
@@ -421,7 +442,7 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewRcpEditorLoad()
{
   // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
   // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
   BOOL bReturn;
   CString strRecipeName;
   CCellID cellID = m_ctrlGridRecipeList.GetFocusCell();
@@ -435,7 +456,7 @@
      {
         m_strCurrentRecipeName = strRecipeName;
         // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
         // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
         COPYDATA_RECIPE2REV copyData;
         copyData.Message = MsgRecipe2Rev_RecipeChange;
         copyData.nPPID = _ttoi(m_strCurrentRecipeName);
@@ -450,7 +471,7 @@
   }
   else
   {
      AfxMessageBox(_T("Please select recipe."));//_T("레시피를 선택하세요."));
      AfxMessageBox(_T("Please select recipe."));//_T("�����Ǹ� �����ϼ���."));
   }
}
@@ -482,7 +503,7 @@
{
   CString strMessage;
   if(RecipeName.IsEmpty())
   if (RecipeName.IsEmpty())
   {
      AfxMessageBox(_T("Seleted recipe is not exist."));
   }
@@ -494,9 +515,9 @@
      bRet = SaveRecipeFile(RecipeName);
      if(bRet)
      if (bRet)
      {
         // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
         // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
         COPYDATA_RECIPE2REV copyData;
         copyData.Message = MsgRecipe2Rev_RecipeModify;
         copyData.nPPID = _ttoi(RecipeName);
@@ -516,8 +537,17 @@
         //         strBackupFile = strBackupPath + m_strCurrentRecipeName + strBackupFile;
         CString strSource, strDest;
         strSource.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, RecipeName);
         strDest.Format(_T("%s\\%s_%s.rcp"),strBackupPath, RecipeName, strBackupFile );
         strDest.Format(_T("%s\\%s_%s.rcp"), strBackupPath, RecipeName, strBackupFile);
         CopyFile(strSource, strDest, TRUE);
         //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
         strBackupPath = _REVIEW_RECIPE_BACKUP_PATH_CPJT;
         CreateDirectory(strBackupPath, NULL);
         strSource.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, RecipeName);
         strDest.Format(_T("%s\\%s.rcp"), strBackupPath, RecipeName);
         CopyFile(strSource, strDest, TRUE);
         //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
         strMessage.Format(_T("Complete to save %s recipe!"), RecipeName);
         //AfxMessageBox(strMessage);
@@ -537,10 +567,10 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewRcpEditorSave()
{
   // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
   // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
   CString strMessage;
   if(m_strCurrentRecipeName.IsEmpty())
   if (m_strCurrentRecipeName.IsEmpty())
   {
      AfxMessageBox(_T("Seleted recipe is not exist."));
   }
@@ -552,9 +582,9 @@
      bRet = SaveRecipeFile(m_strCurrentRecipeName);
      if(bRet)
      if (bRet)
      {
         // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
         // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
         COPYDATA_RECIPE2REV copyData;
         copyData.Message = MsgRecipe2Rev_RecipeModify;
         copyData.nPPID = _ttoi(m_strCurrentRecipeName);
@@ -574,8 +604,17 @@
//         strBackupFile = strBackupPath + m_strCurrentRecipeName + strBackupFile;
         CString strSource, strDest;
         strSource.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, m_strCurrentRecipeName);
         strDest.Format(_T("%s\\%s_%s.rcp"),strBackupPath, m_strCurrentRecipeName, strBackupFile );
         strDest.Format(_T("%s\\%s_%s.rcp"), strBackupPath, m_strCurrentRecipeName, strBackupFile);
         CopyFile(strSource, strDest, TRUE);
         //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
         strBackupPath = _REVIEW_RECIPE_BACKUP_PATH_CPJT;
         CreateDirectory(strBackupPath, NULL);
         strSource.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, m_strCurrentRecipeName);
         strDest.Format(_T("%s\\%s.rcp"), strBackupPath, m_strCurrentRecipeName);
         CopyFile(strSource, strDest, FALSE);
         //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
         strMessage.Format(_T("Complete to save %s recipe!"), m_strCurrentRecipeName);
         AfxMessageBox(strMessage);
@@ -589,7 +628,7 @@
      RefreshRecipeList();
   }
   CRMMInfoWriter rmmInfoWriter;
   int nMachineType = m_pDlgReviewFilter->GetMachineType();
   if (rmmInfoWriter.WriteRmm(nMachineType) == FALSE)
@@ -597,12 +636,12 @@
      strMessage.Format(_T("Fail to save RMM INFO!"));
      AfxMessageBox(strMessage);
   }
}
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewrcpEditorExit()
{
   // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
   // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
   DestroyWindow();
}
@@ -667,15 +706,15 @@
void CReviewRecipeEditorDlg::InitTabControl()
{
   int nIdx = 0;
   m_ctrlTabMain.InsertItem(nIdx++, _T("Common"));         //_T("  공통  "));
   m_ctrlTabMain.InsertItem(nIdx++, _T("Review"));         //_T("  리뷰  "));
   m_ctrlTabMain.InsertItem(nIdx++, _T("Common"));         //_T("  ����  "));
   m_ctrlTabMain.InsertItem(nIdx++, _T("Review"));         //_T("  ����  "));
   m_ctrlTabMain.InsertItem(nIdx++, _T("WSI"));         //_T("  WSI  "));
   m_ctrlTabMain.InsertItem(nIdx++, _T("Align"));         //_T(" 얼라인 "));
   m_ctrlTabMain.InsertItem(nIdx++, _T("Judgement"));      //_T(" 판정  "));
   m_ctrlTabMain.InsertItem(nIdx++, _T("Align"));         //_T(" ����� "));
   m_ctrlTabMain.InsertItem(nIdx++, _T("Judgement"));      //_T(" ����  "));
   // 미사용으로 제외
//   m_ctrlTabMain.InsertItem(nIdx++, _T("Measure"));      //_T("  측정  "));
//   m_ctrlTabMain.InsertItem(nIdx++, _T("Finding Defect"));   //_T(" 결함찾기 "));
   // �̻������ ����
//   m_ctrlTabMain.InsertItem(nIdx++, _T("Measure"));      //_T("  ����  "));
//   m_ctrlTabMain.InsertItem(nIdx++, _T("Finding Defect"));   //_T(" ����ã�� "));
   //m_ctrlTabMain.InsertItem(nIdx++, _T("Glass"));         //_T(" Glass Info "));
}
@@ -711,19 +750,19 @@
   Item.mask = GVIF_TEXT;
   Item.row = nRowIdx;
   Item.col = nColIdx++;
   strTemp.Format(_T("Index"));//_T("인덱스"));
   strTemp.Format(_T("Index"));//_T("�ε���"));
   Item.strText = strTemp;
   m_ctrlGridRecipeList.SetItem(&Item);
   Item.row = nRowIdx;
   Item.col = nColIdx++;
   strTemp.Format(_T("Recipe Name"));//_T("레시피 이름"));
   strTemp.Format(_T("Recipe Name"));//_T("������ �̸�"));
   Item.strText = strTemp;
   m_ctrlGridRecipeList.SetItem(&Item);
   Item.row = nRowIdx;
   Item.col = nColIdx++;
   strTemp.Format(_T("Last Modified Date"));//_T("최종 수정 날짜"));
   strTemp.Format(_T("Last Modified Date"));//_T("���� ���� ��¥"));
   Item.strText = strTemp;
   m_ctrlGridRecipeList.SetItem(&Item);
}
@@ -748,7 +787,7 @@
      for(i = 0; i < nRecipeCount; i++)
      {
         //레시피 인덱스
         //������ �ε���
         nColIdx = 0;
         Item.mask = GVIF_TEXT;
         Item.row = nRowIdx;
@@ -757,13 +796,13 @@
         Item.strText = strTemp;
         m_ctrlGridRecipeList.SetItem(&Item);
         //레시피 이름
         //������ �̸�
         nColIdx++;
         strTemp = strArrayRecipeName.GetAt(i);
         m_ctrlGridRecipeList.SetItemText(nRowIdx, nColIdx, strTemp);
         m_ctrlGridRecipeList.SetItemState(nRowIdx, nColIdx, GVIS_READONLY);
         //최종 수정 날짜
         //���� ���� ��¥
         nColIdx++;
         strTemp = strArrayLastWriteTime.GetAt(i);
         m_ctrlGridRecipeList.SetItemText(nRowIdx, nColIdx, strTemp);
@@ -798,11 +837,11 @@
      if(nIdx != -1)
      {
         strTemp = strTemp.Mid(nIdx + 1);
         strSearchPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
         strSearchPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
      }
      else
      {
         strSearchPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\*.rcp"), NETIP_A2E_REVIEW_SYSTEM);
         strSearchPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\*.rcp"), NETIP_A2E_REVIEW_SYSTEM); //210805
      }
   }
@@ -863,12 +902,12 @@
      if(nIdx != -1)
      {
         strTemp = strTemp.Mid(nIdx + 1);
         strPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
         strPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
      }
      else
      {
         strPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);
      }
         strPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);//210805
      }
   }
   CMacroFile macroFile;
@@ -956,11 +995,11 @@
      if(nIdx != -1)
      {
         strTemp = strTemp.Mid(nIdx + 1);
         strPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
         strPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
      }
      else
      {
         strPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);
         strPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName); //210805
      }
   }
   
@@ -1030,11 +1069,11 @@
      if(nIdx != -1)
      {
         strTemp = strTemp.Mid(nIdx + 1);
         strPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
         strPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
      }
      else
      {
         strPath.Format(_T("\\\\%s\\C\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg"), NETIP_A2E_REVIEW_SYSTEM);
         strPath.Format(_T("\\\\%s\\D\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg"), NETIP_A2E_REVIEW_SYSTEM); //210805
      }
   }
@@ -1067,12 +1106,12 @@
void CReviewRecipeEditorDlg::OnTcnSelchangeTabReviewRcpEditorMainTab(NMHDR *pNMHDR, LRESULT *pResult)
{
   // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
   // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
   RecipeMainTab nTabIdx;
   nTabIdx = (RecipeMainTab)m_ctrlTabMain.GetCurSel();
   // [2017:1:25]-[WEZASW] : SystemMachine_B7E_WSI 설비 분리(WSI 유/무)
   // [2017:1:25]-[WEZASW] : SystemMachine_B7E_WSI ���� �и�(WSI ��/��)
   switch(GetCurrentTapIndex(nTabIdx))
   {
   case COMMON_TAB:
@@ -1178,8 +1217,8 @@
}
void CReviewRecipeEditorDlg::OnCancel()
{
   // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
   //_T("레시피 에디터 프로그램을 종료하시겠습니까?"), MB_YESNO | MB_ICONQUESTION))
   // TODO: ���⿡ Ư��ȭ�� �ڵ带 �߰� ��/�Ǵ� �⺻ Ŭ������ ȣ���մϴ�.
   //_T("������ ������ ���α׷��� �����Ͻðڽ��ϱ�?"), MB_YESNO | MB_ICONQUESTION))
   if (IDNO == AfxMessageBox(_T("Do you want to exit recipe editor program?"), MB_YESNO | MB_ICONERROR))
   {
      return;
@@ -1305,7 +1344,7 @@
void CReviewRecipeEditorDlg::OnStnClickedStaticSelectRcipe()
{
   // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
   // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
}
@@ -1408,7 +1447,7 @@
   }
   else
   {
      AfxMessageBox(_T("Please select recipe."));//_T("레시피를 선택하세요."));
      AfxMessageBox(_T("Please select recipe."));//_T("�����Ǹ� �����ϼ���."));
   }
   return bSuccess;
@@ -1418,7 +1457,7 @@
{
   BOOL bSuccess = TRUE;
   // 중복 Recipe 생성 금지.
   // �ߺ� Recipe ���� ����.
   CFileFind finder;
   CString strRecipeFile;
   strRecipeFile.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, strRecipeName);