// DlgAlignCamera.cpp : 구현 파일입니다. // #include "stdafx.h" #include "ReviewSystem.h" #include "DlgAlignCamera.h" // CDlgAlignCamera 대화 상자입니다. IMPLEMENT_DYNAMIC(CDlgAlignCamera, CDialog) CDlgAlignCamera::CDlgAlignCamera(CWnd* pParent /*=NULL*/) : CDialog(CDlgAlignCamera::IDD, pParent) , m_nImageMode(0) { InitializeCriticalSection(&m_csImageCaptured); Reset(); } CDlgAlignCamera::~CDlgAlignCamera() { Reset(); DeleteCriticalSection(&m_csImageCaptured); } void CDlgAlignCamera::Reset() { for (VectorCameraImageViewIt it=m_vecCameraImageView.begin(); it!=m_vecCameraImageView.end(); it++) { CCameraImageView* pView = static_cast(*it); delete pView; } m_vecCameraImageView.clear(); int nSize = (int)m_vecCameraImageView.size(); d_MatchingRate = 0.; m_bAlignResultUpdate = FALSE; m_pDAC2P = NULL; } void CDlgAlignCamera::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_GRID_ALIGN_INFO, m_ctrlAlignInfo); DDX_Control(pDX, IDC_GRID_ORIGIN_INFO, m_ctrlOriginInfo); DDX_Control(pDX, IDC_STATIC_ALIGN_RESULT, m_ctrlAlignResult); DDX_Control(pDX, IDC_STATIC_ALIGN_ANGLE, m_ctrlAlignAngle); DDX_Control(pDX, IDC_STATIC_ALIGN_DX, m_ctrlAlignDx); DDX_Control(pDX, IDC_STATIC_ALIGN_DY, m_ctrlAlignDy); DDX_Control(pDX, IDC_STATIC_ALIGN_OX, m_ctrlAlignOx); DDX_Control(pDX, IDC_STATIC_ALIGN_OY, m_ctrlAlignOy); DDX_Control(pDX, IDC_COMBO_VIEW_FIRST, m_ctrlViewMode); DDX_Control(pDX, IDC_RADIO_IMAGE_MODE_0, m_ctrlImageMode); DDX_Radio(pDX, IDC_RADIO_IMAGE_MODE_0, m_nImageMode); } BEGIN_MESSAGE_MAP(CDlgAlignCamera, CDialog) ON_BN_CLICKED(IDOK, &CDlgAlignCamera::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &CDlgAlignCamera::OnBnClickedCancel) ON_CBN_SELCHANGE(IDC_COMBO_VIEW_FIRST, &CDlgAlignCamera::OnCbnSelchangeComboViewMode) ON_WM_TIMER() ON_BN_CLICKED(IDC_BUTTON_ALIGN_PROCESS, &CDlgAlignCamera::OnBnClickedButtonAlignProcess) ON_BN_CLICKED(IDC_RADIO_IMAGE_MODE_0, &CDlgAlignCamera::OnBnClickedRadioImageMode) ON_BN_CLICKED(IDC_RADIO_IMAGE_MODE_1, &CDlgAlignCamera::OnBnClickedRadioImageMode) ON_BN_CLICKED(IDC_RADIO_IMAGE_MODE_2, &CDlgAlignCamera::OnBnClickedRadioImageMode) ON_BN_CLICKED(IDC_RADIO_IMAGE_MODE_3, &CDlgAlignCamera::OnBnClickedRadioImageMode) ON_MESSAGE(UM_PROCESS_STATUS_UPDATE, &CDlgAlignCamera::OnProcessStatusUpdate) ON_BN_CLICKED(IDC_BUTTON_GET_TEMPLETE_IMAGE, &CDlgAlignCamera::OnBnClickedButtonGetTempleteImage) ON_WM_ERASEBKGND() ON_WM_CTLCOLOR() END_MESSAGE_MAP() // CDlgAlignCamera 메시지 처리기입니다. void CDlgAlignCamera::OnBnClickedOk() { } void CDlgAlignCamera::OnBnClickedCancel() { } void CDlgAlignCamera::InitGridAlignInfo() { int nRowIdx, nColIdx, nRows, nCols, nFixRows, nFixCols; CString strTemp; CRect rt; nRows = 6; nCols = 5; nFixRows = 1; nFixCols = 1; nRowIdx = 0; nColIdx = 0; // CFont font; // VERIFY(font.CreateFont( // 15, // nHeight // 4, // nWidth // 0, // nEscapement // 0, // nOrientation // FW_NORMAL, // nWeight // FALSE, // bItalic // FALSE, // bUnderline // 0, // cStrikeOut // ANSI_CHARSET, // nCharSet // OUT_DEFAULT_PRECIS, // nOutPrecision // CLIP_DEFAULT_PRECIS, // nClipPrecision // DEFAULT_QUALITY, // nQuality // DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily // _T("MS Shell Dlg"))); // lpszFacename // // m_ctrlGlassInfo.SetFont(&font); m_ctrlAlignInfo.GetClientRect(&rt); m_ctrlAlignInfo.GetDefaultCell(TRUE, FALSE)->SetBackClr(RGB(180, 210, 247)); m_ctrlAlignInfo.GetDefaultCell(FALSE, TRUE)->SetBackClr(RGB(180, 210, 247)); m_ctrlAlignInfo.GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(255, 255, 255)); m_ctrlAlignInfo.SetRowCount(nRows); m_ctrlAlignInfo.SetColumnCount(nCols); m_ctrlAlignInfo.SetFixedRowCount(nFixRows); m_ctrlAlignInfo.SetFixedColumnCount(nFixCols); m_ctrlAlignInfo.SetColumnWidth(0, 95); m_ctrlAlignInfo.SetColumnWidth(1, 70); m_ctrlAlignInfo.SetColumnWidth(2, 70); m_ctrlAlignInfo.SetColumnWidth(3, 70); m_ctrlAlignInfo.SetColumnWidth(4, 70); for (int i=0; iSetBackClr(RGB(180, 210, 247)); m_ctrlOriginInfo.GetDefaultCell(FALSE, TRUE)->SetBackClr(RGB(180, 210, 247)); m_ctrlOriginInfo.GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(255, 255, 255)); m_ctrlOriginInfo.SetRowCount(nRows); m_ctrlOriginInfo.SetColumnCount(nCols); m_ctrlOriginInfo.SetFixedRowCount(nFixRows); m_ctrlOriginInfo.SetFixedColumnCount(nFixCols); m_ctrlOriginInfo.SetColumnWidth(0, 60); m_ctrlOriginInfo.SetColumnWidth(1, 60); m_ctrlOriginInfo.SetColumnWidth(2, 60); m_ctrlOriginInfo.SetColumnWidth(3, 95); // for (int i=0; iCreate(NULL, NULL, WS_CHILD | WS_VISIBLE | LBS_NOTIFY , rect, this, 0); pFirstView->SetViewName(_T("1st")); pFirstView->SetResolution(6.0); pFirstView->SetRulerGab(300.0); pFirstView->ShowWindow(SW_SHOW); m_vecCameraImageView.push_back(pFirstView); } CCameraImageView *pSecondView = new CCameraViewAlign(this); if (pSecondView) { CRect rect; rect.left = TAB_WINDOW_SIZE_X - 200;//396; rect.top = 60; rect.right = rect.left + 220;//396; rect.bottom = rect.top + 165;//297; pSecondView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE | LBS_NOTIFY , rect, this, 0); pSecondView->SetViewName(_T("2nd")); pSecondView->SetResolution(6.0); pSecondView->SetRulerGab(300.0); pSecondView->ShowWindow(SW_SHOW); m_vecCameraImageView.push_back(pSecondView); } InitGridOriginInfo(); InitGridAlignInfo(); // set Current Point Index CFont font; font.CreateFont(25,0,0,0,900,0,0,0,0,0,0,ANTIALIASED_QUALITY,0,_T("Arial")); m_ctrlAlignResult.SetFont(&font); m_ctrlAlignResult.SetTextAlign(1); m_ctrlAlignResult.SetColor(RGB(0,0,0)); m_ctrlAlignResult.SetGradientColor(RGB(0,255,0)); m_ctrlAlignResult.SetTextColor(RGB(255,255,255)); m_ctrlAlignResult.SetWindowText(_T("Align Result")); m_ctrlAlignAngle.SetFontStatic(_T("Arial"), 15, RGB(255,0,255), FS_BOLD | FS_ANTIALIAS | FS_CENTER); m_ctrlAlignAngle.SetBackground(RGB(0,0,0)); m_ctrlAlignAngle.SetWindowText(_T("0.0")); m_ctrlAlignDx.SetFontStatic(_T("Arial"), 15, RGB(255,0,255), FS_BOLD | FS_ANTIALIAS | FS_CENTER); m_ctrlAlignDx.SetBackground(RGB(0,0,0)); m_ctrlAlignDx.SetWindowText(_T("0.0")); m_ctrlAlignDy.SetFontStatic(_T("Arial"), 15, RGB(255,0,255), FS_BOLD | FS_ANTIALIAS | FS_CENTER); m_ctrlAlignDy.SetBackground(RGB(0,0,0)); m_ctrlAlignDy.SetWindowText(_T("0.0")); m_ctrlAlignOx.SetFontStatic(_T("Arial"), 15, RGB(255,255,0), FS_BOLD | FS_ANTIALIAS | FS_CENTER); m_ctrlAlignOx.SetBackground(RGB(0,0,0)); m_ctrlAlignOx.SetWindowText(_T("0.0")); m_ctrlAlignOy.SetFontStatic(_T("Arial"), 15, RGB(255,255,0), FS_BOLD | FS_ANTIALIAS | FS_CENTER); m_ctrlAlignOy.SetBackground(RGB(0,0,0)); m_ctrlAlignOy.SetWindowText(_T("0.0")); m_ctrlViewMode.InsertString(View_Camera, _T("Live")); m_ctrlViewMode.InsertString(View_Result, _T("Result")); m_ctrlViewMode.InsertString(View_Template, _T("Template")); m_ctrlViewMode.InsertString(View_Matching, _T("Matching")); m_ctrlViewMode.SetCurSel(View_Camera); UpdateCameraView(); m_SharedImageData.CreateMemory(4); SetTimer(1000, 100, NULL); return TRUE; } void CDlgAlignCamera::SetGridAlignInfo() { CString strValue = _T(""); // glass pos int nRowIdx = 1; int nColIdx = 1; strValue.Format(_T("%.3lf"), m_AlignRecipe.dGlassPositionX[0]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignRecipe.dGlassPositionY[0]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignRecipe.dGlassPositionX[1]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignRecipe.dGlassPositionY[1]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); // camera pos nRowIdx = 2; nColIdx = 1; strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPixelX[0]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPixelY[0]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPixelX[1]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPixelY[1]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); // find camera pos nRowIdx = 3; nColIdx = 1; strValue.Format(_T("%.3lf"), m_AlignResult.dFindPixelX[0]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignResult.dFindPixelY[0]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignResult.dFindPixelX[1]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignResult.dFindPixelY[1]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); // motor pos nRowIdx = 4; nColIdx = 1; strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPositionX[0]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPositionY[0]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPositionX[1]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPositionY[1]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); // find motor pos nRowIdx = 5; nColIdx = 1; strValue.Format(_T("%.3lf"), m_AlignResult.dFindPositionX[0]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignResult.dFindPositionY[0]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignResult.dFindPositionX[1]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_AlignResult.dFindPositionY[1]); m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue); m_ctrlAlignInfo.Invalidate(FALSE); } void CDlgAlignCamera::SetGridOriginInfo() { CString strValue = _T(""); // org pos int nRowIdx = 1; int nColIdx = 1; strValue.Format(_T("%.3lf"), m_sPreAlignResult.dOriginX); m_ctrlOriginInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_sPreAlignResult.dOriginY); m_ctrlOriginInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.6lf"), m_sPreAlignResult.dDegree); m_ctrlOriginInfo.SetItemText(nRowIdx, nColIdx++, strValue); // find nRowIdx = 2; nColIdx = 1; strValue.Format(_T("%.3lf"), m_sPostAlignResult.dOriginX); m_ctrlOriginInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.3lf"), m_sPostAlignResult.dOriginY); m_ctrlOriginInfo.SetItemText(nRowIdx, nColIdx++, strValue); strValue.Format(_T("%.6lf"), m_sPostAlignResult.dDegree); m_ctrlOriginInfo.SetItemText(nRowIdx, nColIdx++, strValue); m_ctrlOriginInfo.Invalidate(FALSE); } LRESULT CDlgAlignCamera::OnProcessStatusUpdate(WPARAM wParam, LPARAM lParam) { CString strValue = _T("None"); switch(m_AlignResult.nResultCode) { case -2: strValue = _T("Find Fail"); m_ctrlAlignResult.SetGradientColor(RGB(255,0,0)); SetImageMode(View_Camera); m_bAlignResultUpdate = TRUE; break; case -1: strValue = _T("Template Fail"); m_ctrlAlignResult.SetGradientColor(RGB(255,0,0)); SetImageMode(View_Camera); break; case 0: strValue = _T("None"); m_ctrlAlignResult.SetGradientColor(RGB(255,255,0)); SetImageMode(View_Camera); break; case 1: strValue = _T("Success"); m_ctrlAlignResult.SetGradientColor(RGB(0,255,0)); SetImageMode(View_Camera); m_bAlignResultUpdate = TRUE; break; case 2: break; } m_ctrlAlignResult.SetWindowText(strValue); SetGridOriginInfo(); SetGridAlignInfo(); if (m_pDAC2P) { m_pDAC2P->DAC2P_SetActiveAlignCameraDialog(); } return 1; } void CDlgAlignCamera::UpdateProcessStatus(int nLineType, int nMachineType, int nProcessStatus, const CGlassResult* pGlassResult) { if (pGlassResult==NULL) return; switch(nProcessStatus) { case ProcessLoading: { m_AlignRecipe = pGlassResult->m_AlignRecipe; m_AlignResult.Reset(); m_sPreAlignResult.Reset(); m_sPostAlignResult.Reset(); d_MatchingRate = pGlassResult->m_AlignRecipe.dMatchingRate; CCoordCalibrator* pCal = m_pDAC2P->DAC2P_GetCoordCalibrator(); if (pCal) { m_sPreAlignResult = pCal->GetAlignResult(); } this->PostMessage(UM_PROCESS_STATUS_UPDATE); } break; /* case ProcessReadRawFile: m_AlignResult = pGlassResult->m_AlignResult; CCoordCalibrator* pCal = m_pDAC2P->DAC2P_GetCoordCalibrator(); if (pCal) { m_sPostAlignResult = pCal->GetAlignResult(); } this->PostMessage(UM_PROCESS_STATUS_UPDATE); break; */ } } void CDlgAlignCamera::UpdateAlignResult(const CGlassResult* pGlassResult) { if (pGlassResult==NULL) return; m_AlignResult = pGlassResult->m_AlignResult; CCoordCalibrator* pCal = m_pDAC2P->DAC2P_GetCoordCalibrator(); if (pCal) m_sPostAlignResult = pCal->GetAlignResult(); this->PostMessage(UM_PROCESS_STATUS_UPDATE); } void CDlgAlignCamera::SetAlignResult(int nResultCode, double dDX, double dDy, double dTheta) { return; CString strValue = _T(""); //Align_Fail=-2, Align_TempFail=-1, Align_None=0, Align_Success=1 switch(nResultCode) { case -2: strValue.Format(_T("%.3lf"), dDX); m_ctrlAlignOx.SetWindowText(strValue); strValue.Format(_T("%.3lf"), dDy); m_ctrlAlignOy.SetWindowText(strValue); strValue = _T("Find Fail"); m_ctrlAlignResult.SetGradientColor(RGB(255,0,0)); m_ctrlViewMode.SetCurSel(View_Camera); break; case -1: strValue.Format(_T("%.3lf"), dDX); m_ctrlAlignOx.SetWindowText(strValue); strValue.Format(_T("%.3lf"), dDy); m_ctrlAlignOy.SetWindowText(strValue); strValue = _T("Temp Fail"); m_ctrlAlignResult.SetGradientColor(RGB(255,0,0)); m_ctrlViewMode.SetCurSel(View_Camera); break; case 0: strValue.Format(_T("%.3lf"), dDX); m_ctrlAlignOx.SetWindowText(strValue); strValue.Format(_T("%.3lf"), dDy); m_ctrlAlignOy.SetWindowText(strValue); strValue = _T("None"); m_ctrlAlignResult.SetGradientColor(RGB(255,255,0)); m_ctrlViewMode.SetCurSel(View_Camera); break; case 1: strValue.Format(_T("%.3lf"), dDX); m_ctrlAlignDx.SetWindowText(strValue); strValue.Format(_T("%.3lf"), dDy); m_ctrlAlignDy.SetWindowText(strValue); strValue = _T("Success"); m_ctrlAlignResult.SetGradientColor(RGB(0,255,0)); m_ctrlViewMode.SetCurSel(View_Result); break; case 2: break; } m_ctrlAlignResult.SetWindowText(strValue); strValue.Format(_T("%.6lf"), dTheta); m_ctrlAlignAngle.SetWindowText(strValue); OnCbnSelchangeComboViewMode(); } void CDlgAlignCamera::UpdateCameraView() { for (int i=0; i<(int)m_vecCameraImageView.size(); i++) { if (m_vecCameraImageView[i]==NULL) continue; m_vecCameraImageView[i]->Invalidate(TRUE); } } void CDlgAlignCamera::UpdateCameraView(int nCameraIndex) { if (nCameraIndex<0 || nCameraIndex>=(int)m_vecCameraImageView.size()) { return; } if (m_vecCameraImageView[nCameraIndex]==NULL) { return; } m_vecCameraImageView[nCameraIndex]->Invalidate(TRUE); } void CDlgAlignCamera::OnCbnSelchangeComboViewMode() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. if (m_ctrlViewMode.GetCurSel()==View_Camera) { SetTimer(1000, 100, NULL); return; } KillTimer(1000); if (m_pDAC2P) { int nIndex = 0; for (VectorCameraImageViewIt it=m_vecCameraImageView.begin(); it!=m_vecCameraImageView.end(); it++) { CCHImageData imageData; if (m_pDAC2P->DAC2P_GetAlignImage(m_ctrlViewMode.GetCurSel(), nIndex, &imageData)) { (*it)->SetOriginImage(&imageData); } nIndex++; } } } BOOL CDlgAlignCamera::DestroyWindow() { // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다. EnterCriticalSection(&m_csImageCaptured); for (VectorCameraImageViewIt it=m_vecCameraImageView.begin(); it!=m_vecCameraImageView.end(); it++) { CCameraImageView* pView = static_cast(*it); pView->DestroyWindow(); } LeaveCriticalSection(&m_csImageCaptured); m_SharedImageData.DeleteMemory(); return __super::DestroyWindow(); } void CDlgAlignCamera::OnTimer(UINT_PTR nIDEvent) { // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다. if (nIDEvent==1000) { KillTimer(nIDEvent); int TempScore0; int TempScore1; int nViewIndex = 2; for (VectorCameraImageViewIt it=m_vecCameraImageView.begin(); it!=m_vecCameraImageView.end(); it++) { if (m_SharedImageData.GetUpdated(nViewIndex) || m_bAlignResultUpdate == TRUE) { if (m_bAlignResultUpdate == TRUE) m_bAlignResultUpdate = FALSE; if (m_SharedImageData.LockImageData(nViewIndex)) { const SSharedImageInfo* pImageInfo = m_SharedImageData.GetImageInfo(nViewIndex); const BYTE* pImageData = m_SharedImageData.GetImageData(nViewIndex); if (pImageInfo && pImageData) { if ((*it)->SetOriginImage(pImageInfo->nImageWidth, pImageInfo->nImageHeight, pImageInfo->nImageChannels, pImageInfo->nImageWidthStep, pImageData)) { (*it)->SetRulerGab(300.0); (*it)->SetRulerGab(pImageInfo->dRulerGab); // um (*it)->SetResolution(pImageInfo->dResolution); // um switch (pImageInfo->nCameraIndex) { case 0: (*it)->d_FindScore = m_AlignResult.dFindScore[0]; (*it)->d_MatchingRate = d_MatchingRate; TempScore0 = m_AlignResult.dFindScore[0] * 100; if ((*it)->d_FindScore != 0) { if ((*it)->d_FindScore > (*it)->d_MatchingRate) { CString TempStr; TempStr.Format(_T("1st OK %d%%"), TempScore0); (*it)->SetViewName(TempStr); } else if ((*it)->d_FindScore < (*it)->d_MatchingRate) { CString TempStr; TempStr.Format(_T("1st NG %d%%"), TempScore0); (*it)->SetViewName(TempStr); } else { (*it)->SetViewName(_T("1st")); } } else { (*it)->SetViewName(_T("1st")); } break; case 1: (*it)->d_FindScore = m_AlignResult.dFindScore[1]; (*it)->d_MatchingRate = d_MatchingRate; TempScore1 = m_AlignResult.dFindScore[1] * 100; if ((*it)->d_FindScore != 0) { if ((*it)->d_FindScore > (*it)->d_MatchingRate) { CString TempStr; TempStr.Format(_T("2nd OK %d%%"), TempScore1); (*it)->SetViewName(TempStr); } else if ((*it)->d_FindScore < (*it)->d_MatchingRate) { CString TempStr; TempStr.Format(_T("2nd NG %d%%"), TempScore1); (*it)->SetViewName(TempStr); } else { (*it)->SetViewName(_T("2nd")); } } else { (*it)->SetViewName(_T("2nd")); } break; } (*it)->Invalidate(TRUE); } } m_SharedImageData.UnlockImageData(nViewIndex); } } nViewIndex++; } SetTimer(nIDEvent, 100, NULL); } CDialog::OnTimer(nIDEvent); } void CDlgAlignCamera::OnBnClickedButtonAlignProcess() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. if (m_pDAC2P==NULL) return; m_pDAC2P->DAC2P_ManualAlignProcess(); } void CDlgAlignCamera::OnBnClickedRadioImageMode() { UpdateData(TRUE); SetImageMode(m_nImageMode); } void CDlgAlignCamera::SetImageMode(int nMode) { m_nImageMode = nMode; UpdateData(FALSE); if (m_nImageMode==View_Camera) { SetTimer(1000, 100, NULL); return; } KillTimer(1000); if (m_pDAC2P) { int nIndex = 0; for (VectorCameraImageViewIt it=m_vecCameraImageView.begin(); it!=m_vecCameraImageView.end(); it++) { CCHImageData imageData; if (m_pDAC2P->DAC2P_GetAlignImage(nMode, nIndex, &imageData)) { (*it)->SetOriginImage(&imageData); } nIndex++; } } } void CDlgAlignCamera::OnBnClickedButtonGetTempleteImage() { if (m_pDAC2P==NULL) return; m_pDAC2P->DAC2P_SaveAlignTempImage(); } BOOL CDlgAlignCamera::OnEraseBkgnd(CDC* pDC) { // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다. CRect rect; GetClientRect(&rect); __super::OnEraseBkgnd(pDC); pDC->FillSolidRect(rect, RGB(38,38,38) ); return TRUE; } HBRUSH CDlgAlignCamera::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = __super::OnCtlColor(pDC, pWnd, nCtlColor); CRect rect; CString strClass = _T(""); UINT nID = pWnd->GetDlgCtrlID(); if(nCtlColor == CTLCOLOR_STATIC) { pDC->SetTextColor(RGB(255,255,255)); pDC->SetBkColor(RGB(38,38,38)); hbr = (HBRUSH)GetStockObject(NULL_BRUSH); } // TODO: 기본값이 적당하지 않으면 다른 브러시를 반환합니다. return hbr; }