// ViewScanImage.cpp : 备泅 颇老涝聪促.
|
//
|
|
#include "stdafx.h"
|
#include "EdgeInspector_App.h"
|
#include "ViewMain_ScanImage.h"
|
#include "afxdialogex.h"
|
#include "Global_Define.h"
|
#include "Glass_Data.h"
|
|
enum TYPE_MANUAL_CMD
|
{
|
M_CMD_PROC_SHORT_START,
|
M_CMD_PROC_LONG_START,
|
M_CMD_PROC_ALL_START,
|
M_CMD_IMG_LOAD_ALL,
|
M_CMD_IMG_SAVE_ALL,
|
M_CMD_IMG_LOAD_SIDE,
|
M_CMD_IMG_SAVE_SIDE,
|
|
};
|
|
// CViewScanImage 措拳 惑磊涝聪促.
|
|
IMPLEMENT_DYNAMIC(CViewMain_ScanImage, CDialogEx)
|
|
CViewMain_ScanImage::CViewMain_ScanImage(CWnd* pParent /*=NULL*/)
|
: CDialogEx(CViewMain_ScanImage::IDD, pParent)
|
{
|
m_nShowSelect =0;
|
m_dZoom = 1;
|
m_pManualProcess = NULL;
|
m_nIndex = 0;
|
m_nThreadCmd = 0;
|
m_IV2M = NULL;
|
m_pHardware = NULL;
|
m_pGlassData = NULL;
|
}
|
|
CViewMain_ScanImage::~CViewMain_ScanImage()
|
{
|
}
|
|
void CViewMain_ScanImage::DoDataExchange(CDataExchange* pDX)
|
{
|
DDX_Control(pDX, IDC_SCROLLBAR_V_1 , m_ctrlScrollV[0]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_2 , m_ctrlScrollV[1]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_3 , m_ctrlScrollV[2]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_4 , m_ctrlScrollV[3]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_5 , m_ctrlScrollV[4]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_6 , m_ctrlScrollV[5]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_7 , m_ctrlScrollV[6]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_8 , m_ctrlScrollV[7]);
|
|
DDX_Control(pDX, IDC_SCROLLBAR_H_1 , m_ctrlScrollH[0]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_2 , m_ctrlScrollH[1]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_3 , m_ctrlScrollH[2]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_4 , m_ctrlScrollH[3]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_5 , m_ctrlScrollH[4]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_6 , m_ctrlScrollH[5]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_7 , m_ctrlScrollH[6]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_8 , m_ctrlScrollH[7]);
|
|
|
DDX_Control(pDX, IDC_BTN_LOAD1 , m_btnLoad[0]);
|
DDX_Control(pDX, IDC_BTN_LOAD2 , m_btnLoad[1]);
|
DDX_Control(pDX, IDC_BTN_LOAD3 , m_btnLoad[2]);
|
DDX_Control(pDX, IDC_BTN_LOAD4 , m_btnLoad[3]);
|
|
DDX_Control(pDX, IDC_BTN_LOAD5 , m_btnLoad[4]);
|
DDX_Control(pDX, IDC_BTN_LOAD6 , m_btnLoad[5]);
|
DDX_Control(pDX, IDC_BTN_LOAD7 , m_btnLoad[6]);
|
DDX_Control(pDX, IDC_BTN_LOAD8 , m_btnLoad[7]);
|
|
|
|
DDX_Control(pDX, IDC_BTN_SAVE1 , m_btnSave[0]);
|
DDX_Control(pDX, IDC_BTN_SAVE2 , m_btnSave[1]);
|
DDX_Control(pDX, IDC_BTN_SAVE3 , m_btnSave[2]);
|
DDX_Control(pDX, IDC_BTN_SAVE4 , m_btnSave[3]);
|
|
DDX_Control(pDX, IDC_BTN_SAVE5 , m_btnSave[4]);
|
DDX_Control(pDX, IDC_BTN_SAVE6 , m_btnSave[5]);
|
DDX_Control(pDX, IDC_BTN_SAVE7 , m_btnSave[6]);
|
DDX_Control(pDX, IDC_BTN_SAVE8 , m_btnSave[7]);
|
|
|
|
DDX_Control(pDX, IDC_UPDN_WIDTH1 , m_chkWithScorll[0]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH2 , m_chkWithScorll[1]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH3 , m_chkWithScorll[2]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH4 , m_chkWithScorll[3]);
|
|
DDX_Control(pDX, IDC_UPDN_WIDTH5 , m_chkWithScorll[4]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH6 , m_chkWithScorll[5]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH7 , m_chkWithScorll[6]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH8 , m_chkWithScorll[7]);
|
|
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO1 , m_staticCamInfo[0]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO2 , m_staticCamInfo[1]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO3 , m_staticCamInfo[2]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO4 , m_staticCamInfo[3]);
|
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO5 , m_staticCamInfo[4]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO6 , m_staticCamInfo[5]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO7 , m_staticCamInfo[6]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO8 , m_staticCamInfo[7]);
|
|
DDX_Control(pDX, IDC_SLIDER_ZOOM, m_sliderZoom);
|
|
CDialogEx::DoDataExchange(pDX);
|
}
|
|
|
BEGIN_MESSAGE_MAP(CViewMain_ScanImage, CDialogEx)
|
ON_WM_VSCROLL()
|
ON_WM_HSCROLL()
|
|
ON_BN_CLICKED(IDC_BTN_LOAD1, &CViewMain_ScanImage::OnBnClickedBtnLoad1)
|
ON_BN_CLICKED(IDC_BTN_SAVE1, &CViewMain_ScanImage::OnBnClickedBtnSave1)
|
ON_BN_CLICKED(IDC_BTN_LOAD2, &CViewMain_ScanImage::OnBnClickedBtnLoad2)
|
ON_BN_CLICKED(IDC_BTN_SAVE2, &CViewMain_ScanImage::OnBnClickedBtnSave2)
|
ON_BN_CLICKED(IDC_BTN_LOAD3, &CViewMain_ScanImage::OnBnClickedBtnLoad3)
|
ON_BN_CLICKED(IDC_BTN_SAVE3, &CViewMain_ScanImage::OnBnClickedBtnSave3)
|
ON_BN_CLICKED(IDC_BTN_LOAD4, &CViewMain_ScanImage::OnBnClickedBtnLoad4)
|
ON_BN_CLICKED(IDC_BTN_SAVE4, &CViewMain_ScanImage::OnBnClickedBtnSave4)
|
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_ZOOM, &CViewMain_ScanImage::OnNMCustomdrawSliderZoom)
|
ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER_ZOOM, &CViewMain_ScanImage::OnNMReleasedcaptureSliderZoom)
|
ON_WM_MOUSEWHEEL()
|
ON_BN_CLICKED(IDC_UPDN_WIDTH1, &CViewMain_ScanImage::OnBnClickedUpdnWidth1)
|
|
ON_BN_CLICKED(IDC_UPDN_WIDTH2, &CViewMain_ScanImage::OnBnClickedUpdnWidth2)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH3, &CViewMain_ScanImage::OnBnClickedUpdnWidth3)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH4, &CViewMain_ScanImage::OnBnClickedUpdnWidth4)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH6, &CViewMain_ScanImage::OnBnClickedUpdnWidth6)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH5, &CViewMain_ScanImage::OnBnClickedUpdnWidth5)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH7, &CViewMain_ScanImage::OnBnClickedUpdnWidth7)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH8, &CViewMain_ScanImage::OnBnClickedUpdnWidth8)
|
ON_BN_CLICKED(IDC_BTN_LOAD5, &CViewMain_ScanImage::OnBnClickedBtnLoad5)
|
ON_BN_CLICKED(IDC_BTN_SAVE5, &CViewMain_ScanImage::OnBnClickedBtnSave5)
|
ON_BN_CLICKED(IDC_BTN_LOAD6, &CViewMain_ScanImage::OnBnClickedBtnLoad6)
|
ON_BN_CLICKED(IDC_BTN_SAVE6, &CViewMain_ScanImage::OnBnClickedBtnSave6)
|
ON_BN_CLICKED(IDC_BTN_LOAD7, &CViewMain_ScanImage::OnBnClickedBtnLoad7)
|
ON_BN_CLICKED(IDC_BTN_SAVE7, &CViewMain_ScanImage::OnBnClickedBtnSave7)
|
ON_BN_CLICKED(IDC_BTN_LOAD8, &CViewMain_ScanImage::OnBnClickedBtnLoad8)
|
ON_BN_CLICKED(IDC_BTN_SAVE8, &CViewMain_ScanImage::OnBnClickedBtnSave8)
|
ON_BN_CLICKED(IDC_CHECK_AUTO_DEFECT_VIEW, &CViewMain_ScanImage::OnBnClickedCheckAutoDefectView)
|
ON_WM_SHOWWINDOW()
|
ON_WM_TIMER()
|
ON_WM_PAINT()
|
ON_MESSAGE(WM_POCESS_STATUS, OnProcessStatus)
|
END_MESSAGE_MAP()
|
|
BEGIN_EVENTSINK_MAP(CViewMain_ScanImage, CDialogEx)
|
ON_EVENT(CViewMain_ScanImage, IDC_BTN_IMG_SHORT, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedBtnImgShort, VTS_NONE)
|
ON_EVENT(CViewMain_ScanImage, IDC_BTN_IMG_LONG, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedBtnImgLong, VTS_NONE)
|
ON_EVENT(CViewMain_ScanImage, IDC_BTN_IMG_BOTH, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedBtnImgBoth, VTS_NONE)
|
ON_EVENT(CViewMain_ScanImage, IDC_BTN_INIT_DISPLAY, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedBtnInitDisplay, VTS_NONE)
|
ON_EVENT(CViewMain_ScanImage, IDC_BTN_PROC, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedBtnProc, VTS_NONE)
|
ON_EVENT(CViewMain_ScanImage, IDC_BTN_LOAD_ALL, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedLoadAll, VTS_NONE)
|
ON_EVENT(CViewMain_ScanImage, IDC_SAVE_ALL, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedSaveAll, VTS_NONE)
|
END_EVENTSINK_MAP()
|
|
|
// CViewScanImage 皋矫瘤 贸府扁涝聪促.
|
BOOL CViewMain_ScanImage::OnInitDialog()
|
{
|
UpdateData(FALSE);
|
|
m_sliderZoom.SetRange(0,8);
|
m_sliderZoom.SetPos(0);
|
|
int i;
|
for( i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE;i++)
|
{
|
m_btnLoad[i].m_bTransparent = TRUE;
|
m_btnSave[i].m_bTransparent = TRUE;
|
|
|
m_btnLoad[i].SetImage(IDB_BTN_LOAD, IDB_BTN_LOAD_PUSH);
|
m_btnSave[i].SetImage(IDB_BTN_SAVE, IDB_BTN_SAVE_PUSH);
|
m_chkWithScorll[i].SetImage(IDB_LED_OFF);
|
m_chkWithScorll[i].SetCheckedImage(IDB_LED_ON);
|
m_bWithScroll[i] = 1;
|
}
|
|
int nSide;
|
CRect rc2(0,0,10,10);
|
for(i = 0 ; i < MAX_PANEL_SIDE * UPDN_TYPE; i++)
|
{
|
nSide = GetSideIdx(i);
|
//C,CB A, AB, D,DB , B,BB
|
|
m_frameImg[i].SetSideIdx(nSide);
|
m_frameImg[i].SetImageBuffer(NULL, IMAGE_WIDTH, IMAGE_HEIGHT, MAX_FRAM_COUNT);
|
m_frameImg[i].SetSideIdx(0);
|
m_frameImg[i].SetGlassData(m_pGlassData);
|
m_frameImg[i].Create(NULL,NULL,WS_VISIBLE | WS_CHILD,rc2,this,0);
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i,0));
|
m_frameImg[i].ResetViewOption(MODE_VIEW_DEFECT);
|
}
|
|
m_bInitDlg = TRUE;
|
|
ChangeCtrPos(3);
|
|
SetZoom(0.2);
|
|
m_nShowSelect = 0;
|
|
((CButton*)GetDlgItem(IDC_CHECK_AUTO_DEFECT_VIEW))->SetCheck(TRUE);
|
|
return TRUE;
|
}
|
|
BOOL CViewMain_ScanImage::PreTranslateMessage(MSG* pMsg)
|
{
|
if( pMsg->message == WM_KEYDOWN )
|
{
|
if(pMsg->wParam == VK_RETURN
|
|| pMsg->wParam == VK_ESCAPE )
|
{
|
::TranslateMessage(pMsg);
|
::DispatchMessage(pMsg);
|
return TRUE; // DO NOT process further
|
}
|
}
|
|
return CDialog::PreTranslateMessage(pMsg);
|
}
|
|
void CViewMain_ScanImage::OnShowWindow(BOOL bShow, UINT nStatus)
|
{
|
if(bShow == TRUE)
|
{
|
int nSide;
|
CString strTitle;
|
for(int i = 0 ; i < MAX_PANEL_SIDE * UPDN_TYPE; i++)
|
{
|
nSide = GetSideIdx(i);
|
m_frameImg[i].SetSideIdx(nSide);
|
m_frameImg[i].SetGlassData(m_pGlassData);
|
|
CPoint ptDisplayPos = m_frameImg[i].GetDisplayPos();
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i,ptDisplayPos.y));
|
m_frameImg[i].Invalidate();
|
|
if(m_pHardware != NULL)
|
{
|
CCameraSettings *pCamera = NULL;
|
if(i < MAX_PANEL_SIDE) // Long side
|
{
|
pCamera = m_pHardware->GetCameraSettings(i,0);
|
}
|
else
|
{
|
pCamera = m_pHardware->GetCameraSettings(i%MAX_PANEL_SIDE,1);
|
}
|
|
if(pCamera != NULL)
|
{
|
double dPixelSizeX = pCamera->m_dConvResolution[0];
|
double dPixelSizeY = pCamera->m_dScanResolution[0];
|
m_frameImg[i].SetPixelSize(dPixelSizeX, dPixelSizeY);
|
}
|
|
strTitle.Format(_T("BORD[%d] CHANNEL[%d]"),pCamera->m_iCamera, 0);
|
m_staticCamInfo[i].SetWindowText(strTitle);
|
}
|
}
|
|
m_bInitDlg = TRUE;
|
|
ChangeCtrPos(m_nShowSelect);
|
|
SetZoom(0.2);
|
}
|
}
|
|
void CViewMain_ScanImage::OnPaint()
|
{
|
CPaintDC dc(this); // device context for painting
|
|
|
}
|
|
void CViewMain_ScanImage::SetZoom(double dZoom)
|
{
|
m_dZoom = dZoom;
|
UpdateZoom();
|
}
|
|
void CViewMain_ScanImage::SetGlassData(CGlass_Data *pGlass)
|
{
|
m_pGlassData = pGlass;
|
}
|
|
BYTE* CViewMain_ScanImage::GetBufferPoint(int nViewIndex,int nPos /*= 0*/)
|
{
|
BYTE *add = NULL;
|
int nIdx_Side = GetSideIdx(nViewIndex);
|
|
LPBYTE plpBuf = NULL;
|
if(m_IV2M != NULL)
|
plpBuf = m_IV2M->IV2M_GetGrabBufferByDimension((DimensionDir)nIdx_Side,nPos);
|
|
return plpBuf;
|
}
|
|
LRESULT CViewMain_ScanImage::OnProcessStatus(WPARAM wParam, LPARAM lParam)
|
{
|
PROG_MSG MsgJob = *((PROG_MSG*)wParam);
|
|
int nIndex = GetViewIndex(MsgJob.nSide);
|
if(MsgJob.nState == 2)
|
{
|
InitScrollInfo(MsgJob.nSide,1);
|
|
m_ctrlScrollV[nIndex].EnableWindow(TRUE);
|
|
double dZoom = m_frameImg[nIndex].GetZoom();
|
|
CPoint ptOrg = m_frameImg[nIndex].GetDisplayPos();
|
CRect rtWndRect = m_frameImg[nIndex].GetWndRect();
|
|
ptOrg.y = MsgJob.nDispLine;
|
|
if(m_pGlassData != NULL)
|
{
|
CSide_Data *pSideData = m_pGlassData->GetSideData((DimensionDir)MsgJob.nSide);
|
if(pSideData != NULL)
|
ptOrg.y = CHKMAX(0,pSideData->m_nGlassStartLine - (int)((rtWndRect.Height()/2)/ dZoom));
|
}
|
|
m_frameImg[nIndex].SetDisplayPos(ptOrg);
|
m_frameImg[nIndex].SetImageBuffer(GetBufferPoint(nIndex, ptOrg.y));
|
m_frameImg[nIndex].SetGlassData(m_pGlassData);
|
m_frameImg[nIndex].Invalidate();
|
}
|
else
|
{
|
/*
|
if(fabs(m_dZoom - 1.) > 0.01)
|
{
|
m_dZoom = 0.2;
|
m_sliderZoom.SetPos(0);
|
|
CString strTmp;
|
strTmp.Format(_T("X %.2f"),m_dZoom);
|
GetDlgItem(IDC_ST_ZOOM)->SetWindowText(strTmp);
|
|
UpdateZoom();
|
}
|
*/
|
|
//g_pLog->DisplayMessage(_T("Frame Display %d"),nIndex);
|
CPoint ptOrg = m_frameImg[nIndex].GetDisplayPos();
|
ptOrg.y = MsgJob.nDispLine;
|
|
m_frameImg[nIndex].SetDisplayPos(ptOrg);
|
m_frameImg[nIndex].SetImageBuffer(GetBufferPoint(nIndex,ptOrg.y));
|
m_frameImg[nIndex].SetGlassData(m_pGlassData);
|
m_frameImg[nIndex].Invalidate();
|
}
|
return 1;
|
}
|
|
void CViewMain_ScanImage::SetupImageSave()
|
{
|
ManualThreadStart(M_CMD_IMG_SAVE_ALL,-1);
|
}
|
|
void CViewMain_ScanImage::SetRecipe(CHardwareSettings *pHW)
|
{
|
m_pHardware = pHW;
|
}
|
|
void CViewMain_ScanImage::ResetView()
|
{
|
for(int i = 0; i <8 ; i++)
|
{
|
m_ctrlScrollV[i].EnableWindow(FALSE);
|
}
|
}
|
|
void CViewMain_ScanImage::ViewRefresh(PROG_MSG ProcMsg)
|
{
|
SendMessage(WM_POCESS_STATUS,(WPARAM)&ProcMsg, ProcMsg.nSide);
|
}
|
|
int CViewMain_ScanImage::GetSideIdx(int nViewIndex)
|
{
|
int nID = 0;
|
|
switch(nViewIndex)
|
{
|
case 0: nID = DIMENSION_C; break;
|
case 1: nID = DIMENSION_C + MAX_PANEL_SIDE; break;
|
case 2: nID = DIMENSION_A; break;
|
case 3: nID = DIMENSION_A + MAX_PANEL_SIDE; break;
|
case 4: nID = DIMENSION_D; break;
|
case 5: nID = DIMENSION_D + MAX_PANEL_SIDE; break;
|
case 6: nID = DIMENSION_B; break;
|
case 7: nID = DIMENSION_B + MAX_PANEL_SIDE; break;
|
default:
|
AfxMessageBox(_T("CViewImage::GetPanelID(int nViewIndex) call Error"));
|
break;
|
}
|
|
return nID;
|
}
|
|
void CViewMain_ScanImage::ChangeCtrPos(int nMode)
|
{
|
m_nShowSelect = nMode;
|
|
int nInfo = 20;
|
int nHScroll = 20;
|
int nImgWidth = 450;
|
int nImgHeight = 350;
|
|
int i = 0;
|
CPoint OrgPt(10,5),pt;
|
pt = OrgPt;
|
|
|
SetRedraw(FALSE);
|
for(i = 0; i < 8 ; i ++)
|
{
|
m_btnLoad[i].SetRedraw(FALSE);
|
m_btnSave[i].SetRedraw(FALSE);
|
m_staticCamInfo[i].SetRedraw(FALSE);
|
m_ctrlScrollV[i].SetRedraw(FALSE);
|
m_ctrlScrollH[i].SetRedraw(FALSE);
|
m_chkWithScorll[i].SetRedraw(FALSE);
|
m_frameImg[i].SetRedraw(FALSE);
|
}
|
|
switch(nMode)
|
{
|
case 0:
|
|
// Long
|
pt.x = OrgPt.x;
|
pt.y = OrgPt.y;
|
|
|
for(i = 0; i < 4; i++)
|
{
|
m_btnLoad[i].MoveWindow(pt.x,pt.y,nInfo,nInfo,FALSE);
|
m_btnSave[i].MoveWindow(pt.x + nImgWidth - nInfo ,pt.y,nInfo,nInfo,FALSE);
|
m_staticCamInfo[i].MoveWindow(pt.x + nInfo ,pt.y,nImgWidth - nInfo *2 ,nInfo,FALSE);
|
m_frameImg[i].MoveWindow(pt.x,pt.y + nInfo,nImgWidth,nImgHeight,FALSE);
|
CRect rtWnd;
|
m_frameImg[i].GetClientRect(rtWnd);
|
m_frameImg[i].SetWndRect(rtWnd);
|
// m_frameImg[i].ChangeRect();
|
|
m_chkWithScorll[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo + nImgHeight,nHScroll,nInfo,FALSE);
|
m_ctrlScrollV[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo,nHScroll,nImgHeight,FALSE);
|
m_ctrlScrollH[i].MoveWindow(pt.x,pt.y + nInfo + nImgHeight,nImgWidth,nInfo,FALSE);
|
pt.x += nImgWidth + nHScroll;
|
}
|
|
// Short
|
pt.x = OrgPt.x;
|
pt.y = OrgPt.y + nImgHeight + nInfo + nHScroll + 10;
|
for(i = 4; i < 8; i++)
|
{
|
m_btnLoad[i].MoveWindow(pt.x,pt.y,nInfo,nInfo,FALSE);
|
m_btnSave[i].MoveWindow(pt.x + nImgWidth - nInfo ,pt.y,nInfo,nInfo,FALSE);
|
m_staticCamInfo[i].MoveWindow(pt.x + nInfo ,pt.y,nImgWidth - nInfo *2 ,nInfo,FALSE);
|
m_frameImg[i].MoveWindow(pt.x,pt.y + nInfo,nImgWidth,nImgHeight,FALSE);
|
CRect rtWnd;
|
m_frameImg[i].GetClientRect(rtWnd);
|
m_frameImg[i].SetWndRect(rtWnd);
|
//m_frameImg[i].ChangeRect();
|
|
m_chkWithScorll[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo + nImgHeight,nHScroll,nInfo,FALSE);
|
m_ctrlScrollV[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo,nHScroll,nImgHeight,FALSE);
|
m_ctrlScrollH[i].MoveWindow(pt.x,pt.y + nInfo + nImgHeight,nImgWidth,nInfo,FALSE);
|
pt.x += nImgWidth + nHScroll;
|
}
|
break;
|
|
case 1: // long
|
pt.x = OrgPt.x;
|
pt.y = OrgPt.y;
|
|
nImgHeight = 750;
|
for(i = 0; i < 4; i++)
|
{
|
m_btnLoad[i].MoveWindow(pt.x,pt.y,nInfo,nInfo,FALSE);
|
m_btnSave[i].MoveWindow(pt.x + nImgWidth - nInfo ,pt.y,nInfo,nInfo,FALSE);
|
m_staticCamInfo[i].MoveWindow(pt.x + nInfo ,pt.y,nImgWidth - nInfo *2 ,nInfo,FALSE);
|
m_frameImg[i].MoveWindow(pt.x,pt.y + nInfo,nImgWidth,nImgHeight);
|
CRect rtWnd;
|
m_frameImg[i].GetClientRect(rtWnd);
|
m_frameImg[i].SetWndRect(rtWnd);
|
//m_frameImg[i].ChangeRect();
|
m_chkWithScorll[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo + nImgHeight,nHScroll,nInfo,FALSE);
|
m_ctrlScrollV[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo,nHScroll,nImgHeight,FALSE);
|
m_ctrlScrollH[i].MoveWindow(pt.x,pt.y + nInfo + nImgHeight,nImgWidth,nInfo,FALSE);
|
pt.x += nImgWidth + nHScroll;
|
}
|
break;
|
|
|
case 2:// Short
|
pt.x = OrgPt.x;
|
pt.y = OrgPt.y;
|
nImgHeight = 750;
|
for(i = 4; i < 8; i++)
|
{
|
m_btnLoad[i].MoveWindow(pt.x,pt.y,nInfo,nInfo,FALSE);
|
m_btnSave[i].MoveWindow(pt.x + nImgWidth - nInfo ,pt.y,nInfo,nInfo,FALSE);
|
m_staticCamInfo[i].MoveWindow(pt.x + nInfo ,pt.y,nImgWidth - nInfo *2 ,nInfo,FALSE);
|
m_frameImg[i].MoveWindow(pt.x,pt.y + nInfo,nImgWidth,nImgHeight,FALSE);
|
CRect rtWnd;
|
m_frameImg[i].GetClientRect(rtWnd);
|
m_frameImg[i].SetWndRect(rtWnd);
|
// m_frameImg[i].ChangeRect();
|
m_chkWithScorll[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo + nImgHeight,nHScroll,nInfo,FALSE);
|
m_ctrlScrollV[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo,nHScroll,nImgHeight,FALSE);
|
m_ctrlScrollH[i].MoveWindow(pt.x,pt.y + nInfo + nImgHeight,nImgWidth,nInfo,FALSE);
|
pt.x += nImgWidth + nHScroll;
|
}
|
break;
|
case 3:
|
|
// Long
|
pt.x = OrgPt.x;
|
pt.y = OrgPt.y;
|
|
|
for(i = 0; i < 4; i++)
|
{
|
m_btnLoad[i].MoveWindow(pt.x,pt.y,nInfo,nInfo,FALSE);
|
m_btnSave[i].MoveWindow(pt.x + nImgWidth - nInfo ,pt.y,nInfo,nInfo,FALSE);
|
m_staticCamInfo[i].MoveWindow(pt.x + nInfo ,pt.y,nImgWidth - nInfo *2 ,nInfo,FALSE);
|
m_frameImg[i].MoveWindow(pt.x,pt.y + nInfo,nImgWidth,nImgHeight,FALSE);
|
CRect rtWnd;
|
m_frameImg[i].GetClientRect(rtWnd);
|
m_frameImg[i].SetWndRect(rtWnd);
|
//m_frameImg[i].ChangeRect();
|
|
m_chkWithScorll[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo + nImgHeight,nHScroll,nInfo,FALSE);
|
m_ctrlScrollV[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo,nHScroll,nImgHeight,FALSE);
|
m_ctrlScrollH[i].MoveWindow(pt.x,pt.y + nInfo + nImgHeight,nImgWidth,nInfo,FALSE);
|
pt.x += nImgWidth + nHScroll;
|
}
|
|
|
// Short
|
pt.x = OrgPt.x;
|
pt.y = OrgPt.y + nImgHeight + nInfo + nHScroll + 10;
|
for(i = 4; i < 8; i++)
|
{
|
m_btnLoad[i].MoveWindow(pt.x,pt.y,nInfo,nInfo,FALSE);
|
m_btnSave[i].MoveWindow(pt.x + nImgWidth - nInfo ,pt.y,nInfo,nInfo,FALSE);
|
m_staticCamInfo[i].MoveWindow(pt.x + nInfo ,pt.y,nImgWidth - nInfo *2 ,nInfo,FALSE);
|
m_frameImg[i].MoveWindow(pt.x,pt.y + nInfo,nImgWidth,nImgHeight,FALSE);
|
CRect rtWnd;
|
m_frameImg[i].GetClientRect(rtWnd);
|
m_frameImg[i].SetWndRect(rtWnd);
|
//m_frameImg[i].ChangeRect();
|
|
m_chkWithScorll[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo + nImgHeight,nHScroll,nInfo,FALSE);
|
m_ctrlScrollV[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo,nHScroll,nImgHeight,FALSE);
|
m_ctrlScrollH[i].MoveWindow(pt.x,pt.y + nInfo + nImgHeight,nImgWidth,nInfo,FALSE);
|
pt.x += nImgWidth + nHScroll;
|
}
|
break;
|
}
|
|
switch(nMode)
|
{
|
case 0:
|
for(i = 0; i < 8; i++)
|
{
|
m_btnLoad[i].ShowWindow(SW_SHOW);
|
m_btnSave[i].ShowWindow(SW_SHOW);
|
m_staticCamInfo[i].ShowWindow(SW_SHOW);
|
m_ctrlScrollV[i].ShowWindow(SW_SHOW);
|
m_ctrlScrollH[i].ShowWindow(SW_SHOW);
|
m_chkWithScorll[i].ShowWindow(SW_SHOW);
|
m_frameImg[i].ShowWindow(SW_SHOW);
|
}
|
break;
|
|
case 1:
|
for(i = 4; i < 8; i++)
|
{
|
m_btnLoad[i].ShowWindow(SW_HIDE);
|
m_btnSave[i].ShowWindow(SW_HIDE);
|
m_staticCamInfo[i].ShowWindow(SW_HIDE);
|
m_ctrlScrollV[i].ShowWindow(SW_HIDE);
|
m_ctrlScrollH[i].ShowWindow(SW_HIDE);
|
m_chkWithScorll[i].ShowWindow(SW_HIDE);
|
m_frameImg[i].ShowWindow(SW_HIDE);
|
}
|
|
for(i = 0; i < 4; i++)
|
{
|
m_btnLoad[i].ShowWindow(SW_SHOW);
|
m_btnSave[i].ShowWindow(SW_SHOW);
|
m_staticCamInfo[i].ShowWindow(SW_SHOW);
|
m_ctrlScrollV[i].ShowWindow(SW_SHOW);
|
m_ctrlScrollH[i].ShowWindow(SW_SHOW);
|
m_chkWithScorll[i].ShowWindow(SW_SHOW);
|
m_frameImg[i].ShowWindow(SW_SHOW);
|
}
|
break;
|
|
case 2:
|
for(i = 0; i < 4; i++)
|
{
|
m_btnLoad[i].ShowWindow(SW_HIDE);
|
m_btnSave[i].ShowWindow(SW_HIDE);
|
m_staticCamInfo[i].ShowWindow(SW_HIDE);
|
m_ctrlScrollV[i].ShowWindow(SW_HIDE);
|
m_ctrlScrollH[i].ShowWindow(SW_HIDE);
|
m_chkWithScorll[i].ShowWindow(SW_HIDE);
|
m_frameImg[i].ShowWindow(SW_HIDE);
|
}
|
|
for(i = 4; i < 8; i++)
|
{
|
m_btnLoad[i].ShowWindow(SW_SHOW);
|
m_btnSave[i].ShowWindow(SW_SHOW);
|
m_staticCamInfo[i].ShowWindow(SW_SHOW);
|
m_ctrlScrollV[i].ShowWindow(SW_SHOW);
|
m_ctrlScrollH[i].ShowWindow(SW_SHOW);
|
m_chkWithScorll[i].ShowWindow(SW_SHOW);
|
m_frameImg[i].ShowWindow(SW_SHOW);
|
}
|
break;
|
case 3:
|
for(i = 0; i < 8; i++)
|
{
|
m_btnLoad[i].ShowWindow(SW_HIDE);
|
m_btnSave[i].ShowWindow(SW_HIDE);
|
m_staticCamInfo[i].ShowWindow(SW_HIDE);
|
m_ctrlScrollV[i].ShowWindow(SW_HIDE);
|
m_ctrlScrollH[i].ShowWindow(SW_HIDE);
|
m_chkWithScorll[i].ShowWindow(SW_HIDE);
|
m_frameImg[i].ShowWindow(SW_HIDE);
|
}
|
break;
|
}
|
//InitScrollInfo(-1,1);
|
SetRedraw(TRUE);
|
Invalidate(TRUE);
|
}
|
|
void CViewMain_ScanImage::InitScrollInfo(int nSide /*= -1*/,int nScrollPos /*= 0*/)
|
{
|
int i =0;
|
SCROLLINFO scrollInfoV;
|
SCROLLINFO scrollInfoH;
|
|
int nPos_V;
|
int nPos_H;
|
|
scrollInfoV.cbSize = sizeof(SCROLLINFO);
|
scrollInfoV.fMask = SIF_ALL;
|
scrollInfoV.nMin = 1;
|
scrollInfoV.nPos = 1;
|
scrollInfoV.nTrackPos = 400;
|
scrollInfoV.nMax = INT_MAX;
|
|
|
scrollInfoH.cbSize = sizeof(SCROLLINFO);
|
scrollInfoH.fMask = SIF_ALL;
|
scrollInfoH.nMin = 1;
|
scrollInfoH.nPos = 1;
|
scrollInfoH.nTrackPos = 64;
|
|
double dZoom = m_frameImg[0].GetZoom();
|
|
|
scrollInfoV.nPage = m_frameImg[0].GetWndRect().Height();
|
scrollInfoH.nPage = (int)(m_frameImg[0].GetWndRect().Width() / dZoom);
|
scrollInfoH.nMax = IMAGE_WIDTH;
|
|
CSide_Data* pSideData = NULL;
|
if(nSide == -1)
|
{
|
for(i = 0 ; i < MAX_PANEL_SIDE * UPDN_TYPE; i++)
|
{
|
nSide = GetSideIdx(i);
|
|
nPos_V = m_ctrlScrollV[i].GetScrollPos();
|
nPos_H = m_ctrlScrollH[i].GetScrollPos();
|
|
if(nScrollPos == 0)
|
{
|
nPos_V = 0;
|
nPos_H = 0;
|
}
|
|
if(m_pGlassData != NULL)
|
{
|
pSideData = m_pGlassData->GetSideData((DimensionDir)nSide);
|
}
|
|
if(pSideData != NULL)
|
{
|
int nEndLIne = pSideData->m_nGlassEndLine;
|
if(nEndLIne <= 0)
|
nEndLIne = pSideData->m_nPreGlassEndLine;
|
scrollInfoV.nMax = nEndLIne - pSideData->m_nGlassStartLine + (int)(m_frameImg[i].GetWndRect().Height() * dZoom);
|
}
|
else
|
{
|
if(i%2)
|
scrollInfoV.nMax = MAX_IMAGE_LINE_LONG - (int)(m_frameImg[i].GetWndRect().Height() / dZoom);
|
else
|
scrollInfoV.nMax = MAX_IMAGE_LINE_SHORT - (int)(m_frameImg[i].GetWndRect().Height() / dZoom);
|
}
|
|
if(m_pHardware == NULL)
|
{
|
if(i%2)
|
scrollInfoV.nMax = CHKMIN(MAX_IMAGE_LINE_LONG - (int)(m_frameImg[i].GetWndRect().Height() / dZoom),scrollInfoV.nMax);
|
else
|
scrollInfoV.nMax = CHKMIN(MAX_IMAGE_LINE_SHORT - (int)(m_frameImg[i].GetWndRect().Height() / dZoom),scrollInfoV.nMax);
|
}
|
else
|
{
|
int iCam = m_pHardware->GetCameraIndexToDimension((DimensionDir)nSide);
|
int nMaxLine = g_pBase->m_pMemFrameNo[iCam]*g_pBase->m_pFrameHeight[iCam];
|
|
scrollInfoV.nMax = CHKMIN(nMaxLine - int(m_frameImg[i].GetWndRect().Height() / dZoom),scrollInfoV.nMax);
|
}
|
|
m_ctrlScrollV[i].SetScrollInfo(&scrollInfoV);
|
m_ctrlScrollV[i].SetScrollPos(nPos_V);
|
|
m_ctrlScrollH[i].SetScrollInfo(&scrollInfoH);
|
m_ctrlScrollH[i].SetScrollPos(nPos_H);
|
}
|
}
|
else
|
{
|
int iView = GetViewIndex(nSide);
|
|
if(m_pGlassData != NULL)
|
{
|
pSideData = m_pGlassData->GetSideData((DimensionDir)nSide);
|
}
|
|
nPos_V = m_ctrlScrollV[iView].GetScrollPos();
|
nPos_H = m_ctrlScrollH[iView].GetScrollPos();
|
|
if(pSideData != NULL)
|
{
|
int nEndLIne = pSideData->m_nGlassEndLine;
|
if(nEndLIne <= 0)
|
nEndLIne = pSideData->m_nPreGlassEndLine;
|
|
scrollInfoV.nMax = nEndLIne - pSideData->m_nGlassStartLine + m_frameImg[iView].GetWndRect().Height();
|
}
|
|
if(m_pHardware == NULL)
|
{
|
if(i%2)
|
scrollInfoV.nMax = CHKMIN(MAX_IMAGE_LINE_LONG - (int)(m_frameImg[iView].GetWndRect().Height() / dZoom),scrollInfoV.nMax);
|
else
|
scrollInfoV.nMax = CHKMIN(MAX_IMAGE_LINE_SHORT - (int)(m_frameImg[iView].GetWndRect().Height() / dZoom),scrollInfoV.nMax);
|
|
}
|
else
|
{
|
int iCam = m_pHardware->GetCameraIndexToDimension((DimensionDir)nSide);
|
int nMaxLine = g_pBase->m_pMemFrameNo[iCam]*g_pBase->m_pFrameHeight[iCam];
|
|
scrollInfoV.nMax = CHKMIN(nMaxLine - int(m_frameImg[iView].GetWndRect().Height() / dZoom),scrollInfoV.nMax);
|
}
|
|
|
if(nScrollPos == 0)
|
{
|
nPos_V = 0;
|
nPos_H = 0;
|
}
|
|
scrollInfoV.nPos = nPos_V;
|
m_ctrlScrollV[iView].SetScrollInfo(&scrollInfoV);
|
m_ctrlScrollV[iView].SetScrollPos(nPos_V);
|
|
scrollInfoH.nPos = nPos_H;
|
m_ctrlScrollH[iView].SetScrollInfo(&scrollInfoH);
|
m_ctrlScrollH[iView].SetScrollPos(nPos_H);
|
}
|
|
}
|
|
void CViewMain_ScanImage::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
{
|
int pos;
|
int nScrolIndex = -1;
|
int i,nSide =-1;
|
|
for(i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE ; i++)
|
{
|
if(pScrollBar->m_hWnd==m_ctrlScrollV[i].m_hWnd)
|
{
|
nScrolIndex = i;
|
break;
|
}
|
}
|
|
if(nScrolIndex != -1)
|
{
|
|
nSide = GetSideIdx(nScrolIndex);
|
|
SCROLLINFO si;
|
|
si.fMask=SIF_ALL;
|
m_ctrlScrollV[nScrolIndex].GetScrollInfo(&si,SIF_ALL);
|
|
switch(nSBCode)
|
{
|
|
case SB_LINEUP:
|
si.nPos = si.nPos -1;
|
break;
|
case SB_LINEDOWN:
|
si.nPos = si.nPos +1;
|
break;
|
case SB_PAGEUP:
|
si.nPos-=si.nPage;
|
break;
|
case SB_PAGEDOWN:
|
si.nPos+=si.nPage;
|
break;
|
case SB_THUMBTRACK:
|
si.nPos = si.nTrackPos;
|
break;
|
|
}
|
|
if(si.nPos>(int)(si.nMax-si.nMin -si.nPage+1))
|
si.nPos=si.nMax-si.nMin-si.nPage+1;
|
|
if(si.nPos<si.nMin)
|
si.nPos=si.nMin;
|
|
si.fMask=SIF_POS;
|
pos = si.nPos - 1;
|
|
|
int nOffset = 0;
|
CSide_Data* pSideData = NULL;
|
|
if(m_bWithScroll[nScrolIndex] == TRUE)
|
{
|
if(nScrolIndex%2 == 0)
|
{
|
for(i = nScrolIndex ; i < nScrolIndex +2; i++)
|
{
|
nSide = GetSideIdx(i);
|
m_ctrlScrollV[i].SetScrollInfo(&si);
|
|
if(m_pGlassData != NULL)
|
{
|
pSideData = m_pGlassData->GetSideData((DimensionDir)nSide);
|
}
|
|
CPoint ptOrg = m_frameImg[i].GetDisplayPos();
|
CRect rtWndRect = m_frameImg[i].GetWndRect();
|
|
if(pSideData != NULL)
|
{
|
ptOrg.y = max(0,pos + pSideData->m_nGlassStartLine - rtWndRect.Height()/2);
|
}
|
else
|
ptOrg.y = max(0,pos - rtWndRect.Height()/2);
|
|
m_frameImg[i].SetSideIdx(nSide);
|
m_frameImg[i].SetDisplayPos(ptOrg);
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i, ptOrg.y));
|
m_frameImg[i].SetGlassData(m_pGlassData);
|
m_frameImg[i].Invalidate();
|
}
|
}
|
else if(nScrolIndex == 1 || nScrolIndex == 5)
|
{
|
for(i = nScrolIndex -1; i < nScrolIndex +3; i++)
|
{
|
nSide = GetSideIdx(i);
|
m_ctrlScrollV[i].SetScrollInfo(&si);
|
if(m_pGlassData != NULL)
|
{
|
pSideData = m_pGlassData->GetSideData((DimensionDir)nSide);
|
}
|
|
CPoint ptOrg = m_frameImg[i].GetDisplayPos();
|
CRect rtWndRect = m_frameImg[i].GetWndRect();
|
|
if(pSideData != NULL)
|
{
|
ptOrg.y = max(0,pos + pSideData->m_nGlassStartLine - rtWndRect.Height()/2);
|
}
|
else
|
ptOrg.y = max(0,pos - rtWndRect.Height()/2);
|
|
m_frameImg[i].SetSideIdx(nSide);
|
m_frameImg[i].SetDisplayPos(ptOrg);
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i, ptOrg.y));
|
m_frameImg[i].SetGlassData(m_pGlassData);
|
m_frameImg[i].Invalidate();
|
}
|
}
|
else
|
{
|
m_ctrlScrollV[nScrolIndex].SetScrollInfo(&si);
|
if(m_pGlassData != NULL)
|
{
|
pSideData = m_pGlassData->GetSideData((DimensionDir)nSide);
|
}
|
|
CPoint ptOrg = m_frameImg[i].GetDisplayPos();
|
CRect rtWndRect = m_frameImg[i].GetWndRect();
|
|
if(pSideData != NULL)
|
{
|
ptOrg.y = max(0,pos + pSideData->m_nGlassStartLine - rtWndRect.Height()/2);
|
}
|
else
|
ptOrg.y = max(0,pos - rtWndRect.Height()/2);
|
|
m_frameImg[i].SetSideIdx(nSide);
|
m_frameImg[i].SetDisplayPos(ptOrg);
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i, ptOrg.y));
|
m_frameImg[i].SetGlassData(m_pGlassData);
|
m_frameImg[i].Invalidate();
|
}
|
}
|
else
|
{
|
m_ctrlScrollV[nScrolIndex].SetScrollInfo(&si);
|
if(m_pGlassData != NULL)
|
{
|
pSideData = m_pGlassData->GetSideData((DimensionDir)nSide);
|
}
|
|
CPoint ptOrg = m_frameImg[i].GetDisplayPos();
|
CRect rtWndRect = m_frameImg[i].GetWndRect();
|
|
if(pSideData != NULL)
|
{
|
ptOrg.y = max(0,pos + pSideData->m_nGlassStartLine - rtWndRect.Height()/2);
|
}
|
else
|
ptOrg.y = max(0,pos - rtWndRect.Height()/2);
|
|
m_frameImg[i].SetSideIdx(nSide);
|
m_frameImg[i].SetDisplayPos(ptOrg);
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i, ptOrg.y));
|
m_frameImg[i].SetGlassData(m_pGlassData);
|
m_frameImg[i].Invalidate();
|
}
|
}
|
CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
|
}
|
|
void CViewMain_ScanImage::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
{
|
// TODO: 咯扁俊 皋矫瘤 贸府扁 内靛甫 眠啊 棺/肚绰 扁夯蔼阑 龋免钦聪促.
|
if(!pScrollBar)
|
{
|
return CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
|
}
|
|
|
int nScrolIndex = -1;
|
int nSide = -1;
|
|
//CString strTemp;
|
//strTemp.Format("%d", (int)nPos);
|
//theApp.SetStatusBarText(strTemp);
|
|
|
int i =0;
|
for(i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE ; i++)
|
{
|
if(pScrollBar->m_hWnd==m_ctrlScrollH[i].m_hWnd)
|
{
|
nScrolIndex = i;
|
break;
|
}
|
}
|
|
if(nScrolIndex != -1)
|
{
|
nSide = GetSideIdx(nScrolIndex);
|
|
SCROLLINFO si;
|
si.fMask=SIF_ALL;
|
m_ctrlScrollH[nScrolIndex].GetScrollInfo(&si,SIF_ALL);
|
|
switch(nSBCode)
|
{
|
case SB_LINEUP:
|
si.nPos--;
|
break;
|
case SB_LINEDOWN:
|
si.nPos++;
|
break;
|
case SB_PAGEUP:
|
si.nPos-=si.nPage;
|
break;
|
case SB_PAGEDOWN:
|
si.nPos+=si.nPage;
|
break;
|
case SB_THUMBTRACK:
|
si.nPos=nPos;
|
break;
|
}
|
|
if(si.nPos>(int)(si.nMax-si.nMin-si.nPage+1)) si.nPos=si.nMax-si.nMin-si.nPage+1;
|
if(si.nPos<si.nMin) si.nPos=si.nMin;
|
si.fMask=SIF_POS;
|
m_ctrlScrollH[nScrolIndex].SetScrollInfo(&si);
|
|
CPoint ptOrg = m_frameImg[i].GetDisplayPos();
|
ptOrg.x = si.nPos;
|
m_frameImg[i].SetDisplayPos(ptOrg);
|
m_frameImg[nScrolIndex].Invalidate();
|
}
|
|
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
|
}
|
|
int CViewMain_ScanImage::GetViewIndex(int nSide)
|
{
|
int nID = 0;
|
|
switch(nSide)
|
{
|
case 0: nID = DIMENSION_C; break;
|
case 1: nID = DIMENSION_C + MAX_PANEL_SIDE; break;
|
case 2: nID = DIMENSION_A; break;
|
case 3: nID = DIMENSION_A + MAX_PANEL_SIDE; break;
|
case 4: nID = DIMENSION_D; break;
|
case 5: nID = DIMENSION_D + MAX_PANEL_SIDE; break;
|
case 6: nID = DIMENSION_B; break;
|
case 7: nID = DIMENSION_B + MAX_PANEL_SIDE; break;
|
|
default:
|
AfxMessageBox(_T("CViewImage::GetViewIndex(int nSide) call Error"));
|
break;
|
}
|
|
return nID;
|
}
|
|
void CViewMain_ScanImage::UpdateZoom()
|
{
|
for(int i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE;i++)
|
{
|
m_frameImg[i].SetZoom(m_dZoom);
|
InitScrollInfo(-1,1);
|
m_frameImg[i].Invalidate(FALSE);
|
}
|
}
|
|
void CViewMain_ScanImage::OnBnClickedBtnImgBoth() {ChangeCtrPos(0);}
|
void CViewMain_ScanImage::OnBnClickedBtnImgShort() {ChangeCtrPos(2);}
|
void CViewMain_ScanImage::OnBnClickedBtnImgLong() {ChangeCtrPos(1);}
|
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth1() {(m_bWithScroll[0] == FALSE) ? m_bWithScroll[0] = TRUE : m_bWithScroll[0] = FALSE;}
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth2() {(m_bWithScroll[1] == FALSE) ? m_bWithScroll[1] = TRUE : m_bWithScroll[1] = FALSE;}
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth3() {(m_bWithScroll[2] == FALSE) ? m_bWithScroll[2] = TRUE : m_bWithScroll[2] = FALSE;}
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth4() {(m_bWithScroll[3] == FALSE) ? m_bWithScroll[3] = TRUE : m_bWithScroll[3] = FALSE;}
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth6() {(m_bWithScroll[4] == FALSE) ? m_bWithScroll[4] = TRUE : m_bWithScroll[4] = FALSE;}
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth5() {(m_bWithScroll[5] == FALSE) ? m_bWithScroll[5] = TRUE : m_bWithScroll[5] = FALSE;}
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth7() {(m_bWithScroll[6] == FALSE) ? m_bWithScroll[6] = TRUE : m_bWithScroll[6] = FALSE;}
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth8() {(m_bWithScroll[7] == FALSE) ? m_bWithScroll[7] = TRUE : m_bWithScroll[7] = FALSE;}
|
|
|
|
void CViewMain_ScanImage::OnBnClickedBtnLoad1() {ManualThreadStart(M_CMD_IMG_LOAD_SIDE,0); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad2() {ManualThreadStart(M_CMD_IMG_LOAD_SIDE,1); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad3() {ManualThreadStart(M_CMD_IMG_LOAD_SIDE,2); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad4() {ManualThreadStart(M_CMD_IMG_LOAD_SIDE,3); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad5() {ManualThreadStart(M_CMD_IMG_LOAD_SIDE,4); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad6() {ManualThreadStart(M_CMD_IMG_LOAD_SIDE,5); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad7() {ManualThreadStart(M_CMD_IMG_LOAD_SIDE,6); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad8() {ManualThreadStart(M_CMD_IMG_LOAD_SIDE,7); }
|
|
|
void CViewMain_ScanImage::OnBnClickedBtnSave1() {ManualThreadStart(M_CMD_IMG_SAVE_SIDE,0); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave2() {ManualThreadStart(M_CMD_IMG_SAVE_SIDE,1); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave3() {ManualThreadStart(M_CMD_IMG_SAVE_SIDE,2); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave4() {ManualThreadStart(M_CMD_IMG_SAVE_SIDE,3); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave5() {ManualThreadStart(M_CMD_IMG_SAVE_SIDE,4); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave6() {ManualThreadStart(M_CMD_IMG_SAVE_SIDE,5); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave7() {ManualThreadStart(M_CMD_IMG_SAVE_SIDE,6); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave8() {ManualThreadStart(M_CMD_IMG_SAVE_SIDE,7); }
|
|
void CViewMain_ScanImage::OnBnClickedLoadAll() {ManualThreadStart(M_CMD_IMG_LOAD_ALL,-1);}
|
void CViewMain_ScanImage::OnBnClickedSaveAll() {ManualThreadStart(M_CMD_IMG_SAVE_ALL,-1);}
|
|
BOOL CViewMain_ScanImage::ManualThreadStart(int nCmd,int nIndex /*= -1*/)
|
{
|
if(m_pManualProcess) {
|
DWORD dwWait = ::WaitForSingleObject(m_pManualProcess->m_hThread, 1000);
|
if (dwWait == WAIT_TIMEOUT) {
|
DWORD dwExitCode;
|
if ((::GetExitCodeThread(m_pManualProcess->m_hThread, &dwExitCode)) && (dwExitCode == STILL_ACTIVE)) {
|
::TerminateThread(m_pManualProcess->m_hThread, dwExitCode);
|
m_pManualProcess = NULL;
|
g_pLog->DisplayMessage(_T("Previous manual process was terminated due to timeout."));
|
}
|
}
|
else {
|
m_pManualProcess = NULL;
|
if (dwWait == WAIT_OBJECT_0) {
|
g_pLog->DisplayMessage(_T("Previous manual process completed successfully."));
|
}
|
else {
|
g_pLog->DisplayMessage(_T("Previous manual process was terminated or failed."));
|
}
|
}
|
}
|
|
if (m_pManualProcess != NULL) {
|
g_pLog->DisplayMessage(_T("Manual Process is already running. Please wait until it finishes."));
|
return FALSE;
|
}
|
|
m_nIndex = nIndex;
|
m_nThreadCmd = nCmd;
|
m_pManualProcess = AfxBeginThread(ManualProcessAll,this);
|
if (!m_pManualProcess) {
|
g_pLog->DisplayMessage(_T("Failed to start manual process thread."));
|
return FALSE;
|
}
|
|
return TRUE;
|
}
|
|
BOOL CViewMain_ScanImage::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
|
{
|
int nPos = m_sliderZoom.GetPos();
|
if(zDelta > 0)
|
m_sliderZoom.SetPos(nPos+1);
|
else
|
m_sliderZoom.SetPos(nPos-1);
|
|
UpdateZoom();
|
return CDialogEx::OnMouseWheel(nFlags, zDelta, pt);
|
}
|
|
void CViewMain_ScanImage::SaveFullImageAll()
|
{
|
if (m_pGlassData == NULL || m_IV2M == NULL) {
|
return;
|
}
|
|
int iView;
|
CPoint ptStart;
|
int nLength;
|
const int nOneFrameSize = 50000;
|
CString strPath,strLog;
|
int iSide;
|
int nTotalLength = 0;
|
int nFrame = 0;
|
CGlassRecipe *pGlassRcp = m_pGlassData->GetGlassRecipe();
|
|
#if OFFLINE_KEY == 1
|
if (NULL == pGlassRcp) return;
|
#endif
|
|
CString strRcpName = pGlassRcp->GetRecipeName();
|
CString strGlassID = g_pBase->m_strHPanelID;
|
|
if(strGlassID.IsEmpty() == TRUE) {
|
strGlassID = _T("Manual_ID");
|
}
|
if(strRcpName.IsEmpty() == TRUE) {
|
strRcpName = _T("TestRcp");
|
}
|
|
strGlassID.Trim(_T(' '));
|
|
CTime time = CTime::GetCurrentTime();
|
CString strDate, strTime;
|
|
strDate.Format(_T("%04d%02d%02d"),time.GetYear(),time.GetMonth(),time.GetDay());
|
strTime.Format(_T("%02d%02d%02d"),time.GetHour(),time.GetMinute(),time.GetSecond());
|
|
for(iView=0;iView<MAX_DIMENSION_COUNT;iView++) {
|
iSide = GetSideIdx(iView);
|
|
int iCam = m_pHardware->GetCameraIndexToDimension((DimensionDir)iSide);
|
int iScan = m_pHardware->GetScanToDimension((DimensionDir)iSide);
|
|
CCameraSettings *pCamera = m_pHardware->GetCameraSettings(iCam,iScan);
|
if (pCamera == NULL) {
|
return;
|
}
|
|
nTotalLength = (pCamera->m_nGrabFrameCount-1)*pCamera->m_FrameSize.cy;
|
|
ptStart.x = 0;
|
ptStart.y = max(0,0);
|
|
int nMaxSize = (pCamera->m_nGrabFrameCount-1)*pCamera->m_FrameSize.cy;
|
|
CSide_Data* pSideData = m_pGlassData->GetSideData((DimensionDir)iSide);
|
if(pSideData != NULL) {
|
ptStart.y = max(0,pSideData->m_nGlassStartLine-1000);
|
nTotalLength = min((int)((pSideData->m_nPreGlassEndLine + 1000) - ptStart.y),nMaxSize);
|
}
|
|
if (nTotalLength < 10000) {
|
nTotalLength = nMaxSize;
|
}
|
|
nFrame = nTotalLength / nOneFrameSize;
|
if (ptStart.y < 0) {
|
ptStart.y = 0;
|
}
|
|
for(int i = 0; i < nFrame ; i++) {
|
nLength = nOneFrameSize;
|
|
if (ptStart.y + nLength >= nMaxSize) {
|
continue;
|
}
|
|
strPath.Format(_T("%s\\DebugFullImage\\%s\\%s\\%s\\%s\\%s__%s_%d"),PATH_INSPECTION_DATA,strDate,strRcpName,strGlassID,strTime,strGlassID,PANEL_SIDE[iSide],i);
|
m_IV2M->IV2M_SaveFullImage(strPath,iSide,ptStart,nLength);
|
g_pLog->DisplayMessage(_T("%s %d Save Completed : %s"),PANEL_SIDE[iSide],i,strPath);
|
|
ptStart.y += nLength;
|
}
|
|
nLength = nTotalLength%nOneFrameSize;
|
if(nLength > 10) {
|
if(ptStart.y+nLength < nMaxSize) {
|
strPath.Format(_T("%s\\DebugFullImage\\%s\\%s\\%s\\%s\\%s__%s_%d"),PATH_INSPECTION_DATA,strDate,strRcpName,strGlassID,strTime,strGlassID,PANEL_SIDE[iSide],nFrame);
|
m_IV2M->IV2M_SaveFullImage(strPath,iSide,ptStart,nLength);
|
}
|
}
|
|
g_pLog->DisplayMessage(_T("%s %d Save Completed : %s"),PANEL_SIDE[iSide],nFrame,strPath);
|
}
|
}
|
|
void CViewMain_ScanImage::SaveFullImage(int nViewIndex)
|
{
|
CPoint ptStart;
|
int nLength;
|
const int nOneFrameSize = 50000;
|
CString strPath,strLog;
|
int iSide = GetSideIdx(nViewIndex);
|
int nTotalLength = 0;
|
int nFrame = 0;
|
|
if (m_pGlassData == NULL || m_IV2M == NULL) {
|
return;
|
}
|
|
CGlassRecipe *pGlassRcp = m_pGlassData->GetGlassRecipe();
|
CString strRcpName = pGlassRcp->GetRecipeName();
|
|
int iCam = m_pHardware->GetCameraIndexToDimension((DimensionDir)iSide);
|
int iScan = m_pHardware->GetScanToDimension((DimensionDir)iSide);
|
|
CCameraSettings *pCamera = m_pHardware->GetCameraSettings(iCam,iScan);
|
if (pCamera == NULL) {
|
return;
|
}
|
|
nTotalLength = pCamera->m_nGrabFrameCount*pCamera->m_FrameSize.cy;
|
nFrame = nTotalLength/nOneFrameSize;
|
|
ptStart.x = 0;
|
ptStart.y = max(0,0);
|
|
CSide_Data *pSideData = m_pGlassData->GetSideData((DimensionDir)iSide);
|
if(pSideData != NULL) {
|
ptStart.y = max(0,pSideData->m_nGlassStartLine-1000);
|
|
nTotalLength = min((pSideData->m_nGlassEndLine + 1000) - ptStart.y,pCamera->m_nGrabFrameCount*pCamera->m_FrameSize.cy);
|
}
|
|
CString strGlassID = g_pBase->m_strHPanelID;
|
if(strGlassID.IsEmpty() == TRUE) {
|
strGlassID = _T("Manual_ID");
|
}
|
|
if(strRcpName.IsEmpty() == TRUE) {
|
strRcpName = _T("TestRcp");
|
}
|
|
strGlassID.Trim(_T(' '));
|
|
CTime time = CTime::GetCurrentTime();
|
CString strDate,strTime;
|
|
strDate.Format(_T("%04d%02d%02d"),time.GetYear(),time.GetMonth(),time.GetDay());
|
strTime.Format(_T("%02d%02d%02d"),time.GetHour(),time.GetMinute(),time.GetSecond());
|
|
for(int i = 0; i < nFrame ; i++) {
|
nLength = nOneFrameSize;
|
|
strPath.Format(_T("%s\\DebugFullImage\\%s\\%s\\%s\\%s\\%s__%s_%d"),PATH_INSPECTION_DATA,strDate,strRcpName,strGlassID,strTime,strGlassID,PANEL_SIDE[iSide],i);
|
|
m_IV2M->IV2M_SaveFullImage(strPath,iSide,ptStart,nLength);
|
ptStart.y += nLength;
|
|
g_pLog->DisplayMessage(_T("%s %d Save Completed : %s"),PANEL_SIDE[iSide],i,strPath);
|
}
|
|
nLength = nTotalLength % nOneFrameSize;
|
if(nLength) {
|
strPath.Format(_T("%s\\DebugFullImage\\%s\\%s\\%s\\%s\\%s__%s_%d"),PATH_INSPECTION_DATA,strDate,strRcpName,strGlassID,strTime,strGlassID,PANEL_SIDE[iSide],nFrame);
|
|
m_IV2M->IV2M_SaveFullImage(strPath,iSide,ptStart,nLength);
|
|
g_pLog->DisplayMessage(_T("%s %d Save Completed : %s"),PANEL_SIDE[iSide],nFrame,strPath);
|
}
|
}
|
|
UINT CViewMain_ScanImage::ManualProcessAll(LPVOID pParam)
|
{
|
CViewMain_ScanImage *pDlg = (CViewMain_ScanImage*)pParam;
|
int i =0;
|
if(pDlg->m_nThreadCmd == M_CMD_PROC_ALL_START
|
|| pDlg->m_nThreadCmd == M_CMD_PROC_SHORT_START
|
|| pDlg->m_nThreadCmd == M_CMD_PROC_LONG_START)
|
{
|
pDlg->m_IV2M->IV2M_InspectionProcessAll(pDlg->m_nThreadCmd);
|
}
|
else if(pDlg->m_nThreadCmd == M_CMD_IMG_LOAD_ALL)
|
{
|
if(pDlg->m_IV2M == NULL)
|
return 0;
|
|
pDlg->m_IV2M->IV2M_LoadImageFullFile(-1,pDlg->m_pGlassData, [&] (BYTE iSide)
|
{
|
int iView = pDlg->GetViewIndex(iSide);
|
|
pDlg->InitScrollInfo(iSide,0);
|
pDlg->m_frameImg[iView].Invalidate(FALSE);
|
pDlg->m_frameImg[iView].Invalidate();
|
});
|
}
|
else if(pDlg->m_nThreadCmd == M_CMD_IMG_SAVE_ALL)
|
{
|
pDlg->SaveFullImageAll();
|
}
|
else if(pDlg->m_nThreadCmd == M_CMD_IMG_LOAD_SIDE)
|
{
|
pDlg->m_IV2M->IV2M_LoadImageFullFile(pDlg->GetSideIdx(pDlg->m_nIndex),pDlg->m_pGlassData, [&] (BYTE iSide)
|
{
|
int iView = pDlg->GetViewIndex(iSide);
|
|
pDlg->InitScrollInfo(iSide,0);
|
pDlg->m_frameImg[iView].Invalidate(FALSE);
|
pDlg->m_frameImg[iView].Invalidate();
|
});
|
}
|
else if(pDlg->m_nThreadCmd == M_CMD_IMG_SAVE_SIDE)
|
{
|
pDlg->SaveFullImage(pDlg->m_nIndex);
|
}
|
else;
|
|
return 0;
|
}
|
|
void CViewMain_ScanImage::OnTimer(UINT_PTR nIDEvent)
|
{
|
#if FALSE
|
if(nIDEvent == 1)
|
{
|
|
}
|
#endif
|
CDialogEx::OnTimer(nIDEvent);
|
}
|
|
void CViewMain_ScanImage::OnNMCustomdrawSliderZoom(NMHDR *pNMHDR, LRESULT *pResult)
|
{
|
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
|
// TODO: Add your control notification handler code here
|
|
CString strTmp;
|
int nPos = m_sliderZoom.GetPos();
|
|
|
if(nPos > 4)
|
m_dZoom = 1 + (nPos - 4) * 0.25;
|
// m_dZoom = 1 + (nPos - 4) * 0.2;
|
else if(nPos < 4)
|
m_dZoom = 1 /double(5-nPos);
|
else
|
m_dZoom = 1;
|
|
|
strTmp.Format(_T("X %.2f"),m_dZoom);
|
GetDlgItem(IDC_ST_ZOOM)->SetWindowText(strTmp);
|
*pResult = 0;
|
}
|
|
void CViewMain_ScanImage::OnNMReleasedcaptureSliderZoom(NMHDR *pNMHDR, LRESULT *pResult)
|
{
|
UpdateZoom();
|
*pResult = 0;
|
}
|
|
void CViewMain_ScanImage::OnBnClickedBtnInitDisplay()
|
{
|
for(int i = 0; i <8 ; i++)
|
{
|
InitScrollInfo(i,0);
|
|
int nSide = GetSideIdx(i);
|
|
m_frameImg[i].SetSideIdx(nSide);
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i,0));
|
m_frameImg[i].Invalidate();
|
}
|
|
if(m_IV2M != NULL)
|
{
|
m_IV2M->IV2M_InitView(VIEW_SCANIMAGE);
|
}
|
}
|
|
void CViewMain_ScanImage::OnBnClickedBtnProc()
|
{
|
switch(m_nShowSelect)
|
{
|
case 0:
|
ManualThreadStart(M_CMD_PROC_ALL_START );
|
break;
|
|
case 1:
|
ManualThreadStart(M_CMD_PROC_LONG_START );
|
break;
|
|
case 2:
|
ManualThreadStart(M_CMD_PROC_SHORT_START);
|
break;
|
}
|
}
|
|
void CViewMain_ScanImage::OnBnClickedCheckAutoDefectView()
|
{
|
BOOL bCheck = ((CButton*)GetDlgItem(IDC_CHECK_AUTO_DEFECT_VIEW))->GetCheck();
|
|
g_pBase->m_bAutoDefectView = bCheck;
|
|
/*
|
BOOL bCheck = ((CButton*)GetDlgItem(IDC_CHECK_AUTO_SIZE))->GetCheck();
|
|
for(int i = 0 ; i < 8 ; i++)
|
{
|
if(bCheck)
|
m_frameImg[i].SetMode(MODE_AUTO_MEASURE);
|
else
|
m_frameImg[i].ResetMode(MODE_AUTO_MEASURE);
|
}
|
*/
|
}
|