mrDarker
2025-07-16 1dbe46cd9d0f181d08d5a69f72d8548628a13b9d
优化:显示在流程中解锁,并且把文件字符集统一替换成UTF-8(BOM)
已修改158个文件
4812 ■■■■ 文件已修改
EdgeInspector_App/BICommon.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/DefectStorage.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/DefectStorage.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/Glass_Data.cpp 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/Glass_Data.h 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/History.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/PostProcess.cpp 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/PostProcess.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/StopWatch.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/StopWatch.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/TransDataManager.cpp 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/TransDataManager.h 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/Transfer_Data.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Data/Transfer_Data.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Defect.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Define/Global_Define.h 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Define/InspectionBase.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Define/InspectionBase.h 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Define/StatusMonitor.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Define/StatusMonitor.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/DlgLicenseInfo.cpp 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/DlgLicenseInfo.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/DlgSideDimensionSetting.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/DlgSideDimensionSetting.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/DlgSideExceptoinSetting.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/DlgSideExceptoinSetting.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/DlgSideNotchSetting.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/DlgSideNotchSetting.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/DlgSideUserDefectSetting.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/DlgSideUserDefectSetting.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/EdgeInspector_App.cpp 104 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/EdgeInspector_App.h 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/EdgeInspector_AppDoc.cpp 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/EdgeInspector_AppDoc.h 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/EdgeInspector_AppView.cpp 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/EdgeInspector_AppView.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Fitting/CHDataFitting.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Fitting/CHDataFitting.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Grabber/MulticamControl.cpp 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Grabber/MulticamControl.h 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Grabber/RadientControl.cpp 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Grabber/RadientControl.h 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Grabber/SapControl.cpp 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Grabber/SapControl.h 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Grabber/SapLineGrab.cpp 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Grabber/SapLineGrab.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Grabber/SoliosControl.cpp 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Grabber/SoliosControl.h 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/InterfaceManager.cpp 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/InterfaceManager.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/LanguageControl.cpp 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/LanguageControl.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/License/Worker_UpdateLicense.cpp 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/License/Worker_UpdateLicense.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/LicenseChecker.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/LicenseChecker.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Light/ExternLightControl.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Light/ExternLightControl.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Light/ExternLightControlAKPNV.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Light/ExternLightControlAKPNV.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Light/ExternLightControlLCP.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Light/ExternLightControlLCP.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Light/LightManager.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Light/LightManager.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/MainFrm.cpp 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/MainFrm.h 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/MilControl_Common.h 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/PLC/Control_Interface.cpp 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/PLC/Control_Interface.h 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/PLC/Control_Interface_New.cpp 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/PLC/Control_Interface_New.h 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Process/InspectCamera.cpp 2960 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Process/InspectCamera.h 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Process/ThreadControl.cpp 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Process/ThreadControl.h 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Recipe/GlassRecipe.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Recipe/GlassRecipe.h 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Recipe/HardwareSettings.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Recipe/HardwareSettings.h 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Side_Data.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Side_Data.h 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Thread/PriorityThread.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Thread/PriorityThread.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Thread/Thread_CheckSeq.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Thread/Thread_CheckSeq.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Thread/Thread_ControlIF.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Thread/Thread_ControlIF.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Thread/Thread_Send.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Thread/Thread_Send.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Thread/Thread_ViewRefresh.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Thread/Thread_ViewRefresh.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/TriggerBoard/TriggerControl_Mvsol.cpp 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/TriggerBoard/TriggerControl_Mvsol.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/DisplayMessage.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/DisplayMessage.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/General_Draw.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/General_Draw.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/MImageStatic.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/MImageStatic.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/PixelPtr.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/Server_MemDC.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/Singleton.h 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/Splash.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/Splash.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/btnenh.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/btnenh.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/cellsmanager.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/cellsmanager.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/font.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/font.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/surfacecolor.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/surfacecolor.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/textdescriptor.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/textdescriptor.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/texture.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/UITool/texture.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/DlgLogin.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/DlgLogin.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/EdgeImageViewer.cpp 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/EdgeImageViewer.h 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/FrameImg.cpp 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/FrameImg.h 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ImgDefect.cpp 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ImgDefect.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ImgListView.cpp 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ImgListView.h 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewLampControl.cpp 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewLampControl.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewMain_Defect.cpp 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewMain_Defect.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewMain_HWSetting.cpp 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewMain_HWSetting.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewMain_LiveCam.cpp 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewMain_LiveCam.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewMain_ScanImage.cpp 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewMain_ScanImage.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewMain_Status.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewMain_Status.h 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewPPIDNew.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewPPIDNew.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewRecipeList.cpp 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewRecipeList.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewRecipeNew.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewRecipeNew.h 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/ViewMain_Information.cpp 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/ViewMain_Information.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/ViewMain_Recipe.cpp 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/ViewMain_Recipe.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/WebSocket/ThreadPool.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/WebSocket/ThreadPool.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/WebSocket/WebSocketClient.cpp 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/WebSocket/WebSocketClient.h 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/WebSocket/WebSocketClientPool.cpp 122 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/WebSocket/WebSocketClientPool.h 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/resource.h 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/stdafx.cpp 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/stdafx.h 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/targetver.h 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/BICommon.h
@@ -1,4 +1,4 @@
#ifndef BL_COMMON_H
#ifndef BL_COMMON_H
#define BL_COMMON_H
#include <windows.h>
EdgeInspector_App/Data/DefectStorage.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "DefectStorage.h"
#include "SISBuffer.h"
#include "BlobStorage.h"
@@ -46,7 +46,7 @@
        delete[] m_pDefect;
    }
    // 16俺狼 å’¯ç›’阑 æ•Œä¿ƒ..恐? éƒ´å¹²..
    // 16俺狼 å’¯ç›’阑 æ•Œä¿ƒ..恐? éƒ´å¹²..
    int    DefectSapce= maxDefect+ 16;
    m_pDefect= new CDefect[DefectSapce];
EdgeInspector_App/Data/DefectStorage.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "AssemDefect.h"
@@ -35,7 +35,7 @@
class CDefectControl : public CDefectStorage
{
public:// Defect å‚ˆä»·ä½• çœ å•Š.
public:// Defect å‚ˆä»·ä½• çœ å•Š.
    CDefectControl();
    virtual ~CDefectControl();
    
EdgeInspector_App/Data/Glass_Data.cpp
@@ -1,4 +1,4 @@
// Glass.cpp: implementation of the CGlass class.
// Glass.cpp: implementation of the CGlass class.
//
//////////////////////////////////////////////////////////////////////
@@ -185,15 +185,15 @@
    arrString.clear();
    CString strData = strDataInput;
    strData.Trim();  //??3y??óD????μ??é??
    strData.Trim();  //??3y??óD????μ??é??
    if (strData.IsEmpty()) {
        return TRUE;
    }
    if (-1 == strData.Find(strSign)) {   //2?°üo?·???·?
    if (-1 == strData.Find(strSign)) {   //2?°üo?·???·?
        arrString.push_back(strData);
        return TRUE;
    }
    while (0 == strData.Find(strSign)) {   //?-?·é?3yê×??é?μ?·???·?
    while (0 == strData.Find(strSign)) {   //?-?·é?3yê×??é?μ?·???·?
        strData.Delete(0, strSign.GetLength());
    }
    strData += strSign;
EdgeInspector_App/Data/Glass_Data.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include <vector>
#include "Global_Define.h"
@@ -96,8 +96,8 @@
    BOOL                    m_bInspectComplete;
    BOOL                    m_bJudgeNG;    // TRUE : NG, FALSE : OK
    // Defect
    MapDefect                m_MapDefect_NG;                // æ¬çªƒæ²¥ç„Š (NG)
    MapDefect                m_MapDefect_OK;                // æ¬çªƒæ²¥ç„Š (OK)
    MapDefect                m_MapDefect_NG;                // æ¬çªƒæ²¥ç„Š (NG)
    MapDefect                m_MapDefect_OK;                // æ¬çªƒæ²¥ç„Š (OK)
    int                        m_nCurDefectIdx_Total;
    int                        m_nCurDefectIdx_NG;
@@ -119,7 +119,7 @@
    CString                    m_strLoadingTimeFileName;
    CString                    m_strLoadingDayFileName;
    // Stage theta ç„Šæ²¥
    // Stage theta ç„Šæ²¥
    short                    m_nStageLongTheta[2];
    short                    m_nStageShortTheta[2];    
EdgeInspector_App/Data/History.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "Global_Define.h"
EdgeInspector_App/Data/PostProcess.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "PostProcess.h"
#include "Config.h"
#include "FreeImage.h"
@@ -180,7 +180,7 @@
    if (glass_id.IsEmpty() == TRUE)
        glass_id.Format(_T("MANUAL_ID"));
    // èŽ·å–å½“å‰äº§å“åŠ è½½æ—¶é—´
    // èŽ·å–å½“å‰äº§å“åŠ è½½æ—¶é—´
    CTime tGlassLoading = m_pGlassData->GetLoadingTime();
    CString measure_data;
@@ -249,11 +249,11 @@
    CString measure_file_path;
    if (m_pHardware->m_bSaveResultByHour) {
        // æŒ‰å°æ—¶ä¿å­˜ç»“æžœ
        // æŒ‰å°æ—¶ä¿å­˜ç»“æžœ
        measure_file_path.Format(_T("%s\\%s_%02d_MeasureData.csv"), m_strResultFolder, g_pBase->m_strLoadingDay, tGlassLoading.GetHour());
    }
    else {
        // ä¸æŒ‰å°æ—¶ä¿å­˜ç»“æžœ
        // ä¸æŒ‰å°æ—¶ä¿å­˜ç»“æžœ
        measure_file_path.Format(_T("%s\\%s_MeasureData.csv"), m_strResultFolder, g_pBase->m_strLoadingDay);
    }
@@ -293,9 +293,9 @@
            CString strDefectType = g_strDefectType[pDefect->m_DefectInfo.m_DefectLoc];
            if ((strDefectType.Compare(_T("Chip")) == 0 || strDefectType.Compare(_T("In_Chip")) == 0))
            {
                // èŽ·å–å½“å‰æ—¶é—´
                // èŽ·å–å½“å‰æ—¶é—´
                std::time_t now = std::time(nullptr);
                // ä½¿ç”¨localtime_s代替localtime
                // ä½¿ç”¨localtime_s代替localtime
                std::tm nowTm;
                localtime_s(&nowTm, &now);
@@ -379,9 +379,9 @@
            if ((strDefectType.Compare(_T("Chip")) == 0 || strDefectType.Compare(_T("In_Chip")) == 0))
            {
                // èŽ·å–å½“å‰æ—¶é—´
                // èŽ·å–å½“å‰æ—¶é—´
                std::time_t now = std::time(nullptr);
                // ä½¿ç”¨localtime_s代替localtime
                // ä½¿ç”¨localtime_s代替localtime
                std::tm nowTm;
                localtime_s(&nowTm, &now);
@@ -412,11 +412,11 @@
    CString Chip_file_path;
    if (m_pHardware->m_bSaveResultByHour) {
        // æŒ‰å°æ—¶ä¿å­˜ç»“æžœ
        // æŒ‰å°æ—¶ä¿å­˜ç»“æžœ
        Chip_file_path.Format(_T("%s\\%s_%02d_ChipData.csv"), m_strResultFolder, g_pBase->m_strLoadingDay, tGlassLoading.GetHour());
    }
    else {
        // ä¸æŒ‰å°æ—¶ä¿å­˜ç»“æžœ
        // ä¸æŒ‰å°æ—¶ä¿å­˜ç»“æžœ
        Chip_file_path.Format(_T("%s\\%s_ChipData.csv"), m_strResultFolder, g_pBase->m_strLoadingDay);
    }
    
@@ -441,11 +441,11 @@
    CString Defect_file_path;
    if (m_pHardware->m_bSaveResultByHour) {
        // æŒ‰å°æ—¶ä¿å­˜ç»“æžœ
        // æŒ‰å°æ—¶ä¿å­˜ç»“æžœ
        Defect_file_path.Format(_T("%s\\%s_%02d_DefectData.csv"), m_strResultFolder, g_pBase->m_strLoadingDay, tGlassLoading.GetHour());
    }
    else {
        // ä¸æŒ‰å°æ—¶ä¿å­˜ç»“æžœ
        // ä¸æŒ‰å°æ—¶ä¿å­˜ç»“æžœ
        Defect_file_path.Format(_T("%s\\%s_DefectData.csv"), m_strResultFolder, g_pBase->m_strLoadingDay);
    }
@@ -630,7 +630,7 @@
    BOOL bSuccess = TRUE;
    Lock();
    // æ ‡é¢˜æ–‡æœ¬
    // æ ‡é¢˜æ–‡æœ¬
    CString strTitle;
    int nSideIdx = (0 <= pDefect->m_DefectInfo.m_nSideIdx && pDefect->m_DefectInfo.m_nSideIdx < MAX_SIDE_COUNT) ? pDefect->m_DefectInfo.m_nSideIdx : MAX_SIDE_COUNT;
    int nCategoryIdx = (0 <= pDefect->m_DefectInfo.m_DefectLoc && pDefect->m_DefectInfo.m_DefectLoc < DefectLoc_None) ? pDefect->m_DefectInfo.m_DefectLoc : DefectLoc_Unknown;
@@ -900,7 +900,7 @@
    // 3. Corner
    
    // A æƒ‘何 å®˜è¹¿
    // A æƒ‘何 å®˜è¹¿
    vecStrTitle.push_back(_T("CORNER_1_X"));
    strTemp.Format(_T("%d"), m_pGlassData->GetSideData(DIMENSION_A)->m_nBottomCornerWidth);
    vecStrResultData.push_back(strTemp);
@@ -908,7 +908,7 @@
    strTemp.Format(_T("%d"), m_pGlassData->GetSideData(DIMENSION_A)->m_nBottomCornerHeight);
    vecStrResultData.push_back(strTemp);
    // C æƒ‘何 å®˜è¹¿
    // C æƒ‘何 å®˜è¹¿
    vecStrTitle.push_back(_T("CORNER_2_X"));
    strTemp.Format(_T("%d"), m_pGlassData->GetSideData(DIMENSION_C)->m_nBottomCornerWidth);
    vecStrResultData.push_back(strTemp);
@@ -916,7 +916,7 @@
    strTemp.Format(_T("%d"), m_pGlassData->GetSideData(DIMENSION_C)->m_nBottomCornerHeight);
    vecStrResultData.push_back(strTemp);
    // C æƒ‘何 å•ª
    // C æƒ‘何 å•ª
    vecStrTitle.push_back(_T("CORNER_3_X"));
    strTemp.Format(_T("%d"), m_pGlassData->GetSideData(DIMENSION_C)->m_nTopCornerWidth);
    vecStrResultData.push_back(strTemp);
@@ -924,7 +924,7 @@
    strTemp.Format(_T("%d"), m_pGlassData->GetSideData(DIMENSION_C)->m_nTopCornerHeight);
    vecStrResultData.push_back(strTemp);
    // A æƒ‘何 å•ª
    // A æƒ‘何 å•ª
    vecStrTitle.push_back(_T("CORNER_4_X"));
    strTemp.Format(_T("%d"), m_pGlassData->GetSideData(DIMENSION_A)->m_nTopCornerWidth);
    vecStrResultData.push_back(strTemp);
@@ -983,7 +983,7 @@
    CSide_Data* pSideData_UP = NULL;
    CSide_Data* pSideData_DN = NULL;
    // Notch乐绰 æ èŒ«æ‰
    // Notch乐绰 æ èŒ«æ‰
    for(int nSideIdx=0; nSideIdx<MAX_PANEL_SIDE; nSideIdx++)
    {
        pSideData_UP = m_pGlassData->GetSideData(arryWriteOrder_UP[nSideIdx]);
@@ -995,7 +995,7 @@
    for(int nNotchIdx=0; nNotchIdx<MAX_SIDE_NOTCH_COUNT; nNotchIdx++)
    {
        // 4-2. Dimension, é…’阀搁栏肺 èžŸæ²¥
        // 4-2. Dimension, é…’阀搁栏肺 èžŸæ²¥
        for(int nMeasureIdx = 0; nMeasureIdx < MAX_SIDE_NOTCH_MEASURE_COUNT; nMeasureIdx++)
        {
            strTemp.Format(_T("NOTCH_%d_DIM_%d"), nNotchIdx+1, nMeasureIdx+1);
@@ -1032,7 +1032,7 @@
    // Save Path
    CString strFilePath;
    if (m_pHardware->m_bSaveResultByHour) {
        // æŒ‰å°æ—¶ä¿å­˜ï¼Œç»‘定玻璃 Loading Time
        // æŒ‰å°æ—¶ä¿å­˜ï¼Œç»‘定玻璃 Loading Time
        strFilePath.Format(_T("D:\\Data\\%s\\%s\\%d\\%02d\\%02d\\%s_%s_%02d.csv"),
            m_pHardware->GetMachineName(),
            m_pHardware->GetLineID(),
@@ -1044,7 +1044,7 @@
            tLoadingTime.GetHour());
    }
    else {
        // æŒ‰å¤©ä¿å­˜ï¼Œç»‘定玻璃 Loading Time
        // æŒ‰å¤©ä¿å­˜ï¼Œç»‘定玻璃 Loading Time
        strFilePath.Format(_T("D:\\Data\\%s\\%s\\%d\\%02d\\%02d\\%s_%s.csv"),
            m_pHardware->GetMachineName(),
            m_pHardware->GetLineID(),
@@ -1774,7 +1774,7 @@
    
    /*
    pDefect->m_nUMOriginX = (int)((double) (pDefect->m_DefectInfo.m_ptDefectPos_pxl.y - nStartLine) * dScanRes);
    pDefect->m_nUMOriginY = (int)((double) (pDefect->m_DefectInfo.m_ptDefectPos_pxl.x * dConvRes));        // èæ²¥ éž˜å¤¸..
    pDefect->m_nUMOriginY = (int)((double) (pDefect->m_DefectInfo.m_ptDefectPos_pxl.x * dConvRes));        // èæ²¥ éž˜å¤¸..
    */
    CSIDE_PARM* pSideParam = &pRecipe->m_SideParam[pDefect->m_DefectInfo.m_nSideIdx];
@@ -2017,13 +2017,13 @@
    TCHAR szTemp[MAX_PATH];
    wcscpy_s(szTemp, MAX_PATH, strFolder);
    szTemp[strFolder.GetLength() + 1] = NULL; // NULL巩磊啊 æ»´ä¿º ç”¸ç»¢å•Šå…· èŒ„促.
    szTemp[strFolder.GetLength() + 1] = NULL; // NULL巩磊啊 æ»´ä¿º ç”¸ç»¢å•Šå…· èŒ„促.
    FileOp.hwnd = NULL;
    FileOp.wFunc = FO_DELETE;
    FileOp.pFrom = NULL;
    FileOp.pTo = NULL;
    FileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI; // çŠ¬ç‰¢çš‹çŸ«ç˜¤å•Š æ•‘哆档废 æ±²æ²¥
    FileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI; // çŠ¬ç‰¢çš‹çŸ«ç˜¤å•Š æ•‘哆档废 æ±²æ²¥
    FileOp.fAnyOperationsAborted = false;
    FileOp.hNameMappings = NULL;
    FileOp.lpszProgressTitle = NULL;
EdgeInspector_App/Data/PostProcess.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "Global_Define.h"
#include "HardwareSettings.h"
@@ -58,7 +58,7 @@
    BOOL            DeleteFolder(const CString &strFolder);
    
private:
    CRITICAL_SECTION m_criticalSection; //?ï¿¥3aá?
    CRITICAL_SECTION m_criticalSection; //?ï¿¥3aá?
    inline void Lock() { ::InitializeCriticalSection(&m_criticalSection); }
    inline void Unlock() { ::DeleteCriticalSection(&m_criticalSection); }
EdgeInspector_App/Data/StopWatch.cpp
@@ -1,4 +1,4 @@
// StopWatch.cpp: implementation of the CStopWatch class.
// StopWatch.cpp: implementation of the CStopWatch class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
EdgeInspector_App/Data/StopWatch.h
@@ -1,4 +1,4 @@
// StopWatch.h: interface for the CStopWatch class.
// StopWatch.h: interface for the CStopWatch class.
//
//////////////////////////////////////////////////////////////////////
EdgeInspector_App/Data/TransDataManager.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "TransDataManager.h"
#include <fstream>
#include <iostream>
@@ -46,10 +46,10 @@
    EnumPackType ePackType = eAscii;
    CString tmpItemByte;
    char LineStr[200];        //茄 ä¸´çªœå›° ä½¬ç»¢ç”¸æžç»° æ»šæ¬º
    char *tmpStr;            //窜困肺 è°—篮 å•捞磐甫 å•Šåºœè™ç»° å™¨ç‰¢ç£
    char LineStr[200];        //茄 ä¸´çªœå›° ä½¬ç»¢ç”¸æžç»° æ»šæ¬º
    char *tmpStr;            //窜困肺 è°—篮 å•捞磐甫 å•Šåºœè™ç»° å™¨ç‰¢ç£
    char *strType;
    char seps[]=" ,\t\n";    //备盒磊
    char seps[]=" ,\t\n";    //备盒磊
    std::ifstream input;
    input.open(FilePath, std::ios::in /*| std::ios::nocreate*/);
@@ -95,7 +95,7 @@
    int KeyValue = 0;
    if (Key == -1)
    {
        KeyValue = (int)m_TransDataPackMap.size();    //父老 èœ¡è€ è™è”¼é˜‘ æž—瘤 è‡¼æ æ æŽªæ¶é‰´æ è‚º é‰´çž’利牢 ç‰¢éƒ¸èƒ¶ è”¼æž è™è”¼æž å‡³
        KeyValue = (int)m_TransDataPackMap.size();    //父老 èœ¡è€ è™è”¼é˜‘ æž—瘤 è‡¼æ æ æŽªæ¶é‰´æ è‚º é‰´çž’利牢 ç‰¢éƒ¸èƒ¶ è”¼æž è™è”¼æž å‡³
    }
    else KeyValue = Key;
@@ -274,7 +274,7 @@
        int k = Fstr.GetLength();
        //傍归阑 ç»çŸ©ä¿ƒ
        //傍归阑 ç»çŸ©ä¿ƒ
        for(i=0;i<Fstr.GetLength();i++)
        {
            if(Fstr.Mid(i,1) != " ")
@@ -282,7 +282,7 @@
        }
        k = returnValue.GetLength();
        //酒公繁 dataæ¡£ ç»æ æ "*" è´¸åºœèŒ„促
        //酒公繁 dataæ¡£ ç»æ æ "*" è´¸åºœèŒ„促
        if(returnValue.GetLength() == 0)
            returnValue.Format("*");
        else if(returnValue.Mid(0,1) == "")
EdgeInspector_App/Data/TransDataManager.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include <map>
@@ -12,7 +12,7 @@
    eAscii = 0,
    eUnsignedDec
};
class CTransDataPack            //拱幅 æ²¥ç„Š class.
class CTransDataPack            //拱幅 æ²¥ç„Š class.
{
protected:
    int                m_nIndex;
@@ -66,10 +66,10 @@
        }
    }
    int                GetIndex()                    {return m_nIndex;};        //拱幅 æ²¥ç„Šç‹¼ é‰´è¾‘
    int                GetByte()                    {return m_nByte;};        //拱幅 æ²¥ç„Šç‹¼ è¾¨æž.
    int                GetIndex()                    {return m_nIndex;};        //拱幅 æ²¥ç„Šç‹¼ é‰´è¾‘
    int                GetByte()                    {return m_nByte;};        //拱幅 æ²¥ç„Šç‹¼ è¾¨æž.
    EnumPackType    GetPackType()        {return m_ePackType;}
    char*            GetValue()                    {return m_pstrData;};    //拱幅 æ²¥ç„Šç‹¼ è”¼
    char*            GetValue()                    {return m_pstrData;};    //拱幅 æ²¥ç„Šç‹¼ è”¼
    void            SetValue(char* pstrData)
    {
@@ -92,42 +92,42 @@
    virtual ~CTransDataManager();
    CTransDataManager& operator=(const CTransDataManager& rhs);
    // æª¬æ‰æ‹³
    // æª¬æ‰æ‹³
    void    ResetPackData();
    // 16柳荐 -> 10柳荐(int)
    // 16柳荐 -> 10柳荐(int)
    int        Hex2Dec(CString hex_str);                
    // 16柳荐 -> ä½•龋绝绰 10柳荐(short)
    // 16柳荐 -> ä½•龋绝绰 10柳荐(short)
    short    Hex2SignedDec(CString hex_str);
    // é…’胶虐 -> 16柳荐 å·©ç£Šå‡¯
    // é…’胶虐 -> 16柳荐 å·©ç£Šå‡¯
    CString Asc2Hex(CStringA hex_str);
    // èƒ¶é£˜å‚… -> 16柳荐
    // èƒ¶é£˜å‚… -> 16柳荐
    BOOL    StrToHex(CHAR* pchData, CHAR* pchDataSrc, INT nLength, BOOL bWordReverse = FALSE);
    // 16柳荐 -> ä½•龋乐绰 10柳荐
    // 16柳荐 -> ä½•龋乐绰 10柳荐
    UINT    Hex2UnsignedDec(CString hex_str);
    // å†µé› -> 10柳荐
    // å†µé› -> 10柳荐
    UINT    GetDataWord2Dec(CString buff, int ap, BOOL hi_bit);
    // å†µé› -> å·©ç£Šå‡¯
    // å†µé› -> å·©ç£Šå‡¯
    CString GetDataWord2Str(CString& value, int& addr, int length);
    // æ‹±å¹… æ²¥ç„Š è¾‘æ‘¹
    // æ‹±å¹… æ²¥ç„Š è¾‘æ‘¹
    BOOL    SearchValueInMap(CString Name, CString& ReturnValue, int& ByteLength);
    // æ‹±å¹… æ²¥ç„Š è¾‘æ‘¹
    // æ‹±å¹… æ²¥ç„Š è¾‘æ‘¹
    BOOL    SearchValueInMap(CString Name, int& nReturnValue, int& ByteLength);
    // PLC å•捞磐 -> ç”˜
    // PLC å•捞磐 -> ç”˜
    BOOL    InsertPLCValueToPack(CString keyName, char* pstrData);
    // è”¼ è¾‘摹
    // è”¼ è¾‘摹
    BOOL    GetPackDataAll(CString &Name, int Index, int &Byte, CString &Value);
    // æ‹±å¹… å•捞磐 å‚ˆçœ‰ å¢¨æ¬¾é£˜
    // æ‹±å¹… å•捞磐 å‚ˆçœ‰ å¢¨æ¬¾é£˜
    int        GetDataPackTotalNumber();
    // æ‹±å¹… å•捞磐 å‚ˆçœ‰ å®˜æžé£˜
    // æ‹±å¹… å•捞磐 å‚ˆçœ‰ å®˜æžé£˜
    int        GetDataPackTotalByteSize(){return m_DataPackTotalByteSize;};
    // PLC å•捞磐 -> ç”˜
    // PLC å•捞磐 -> ç”˜
    BOOL    InsertPLCValueToMap(char* pstrRawData,int nLength);
    // æ‹±å¹…单捞磐 å™¨æ† æ®¿åºŸ
    // æ‹±å¹…单捞磐 å™¨æ† æ®¿åºŸ
    void    InsertTransItemToMap(CString ItemName, int ItemByte, int Key=-1, EnumPackType ePackType = eAscii);
    // æ‹±å¹…单捞磐 å™¨æ† ä½¬æ‰
    // æ‹±å¹…单捞磐 å™¨æ† ä½¬æ‰
    BOOL    LoadTransItemFromFile(CString FilePath);
    CString    GetItemName(int nIndex);
@@ -136,7 +136,7 @@
    void    ResetData();
private:
    int m_DataPackTotalByteSize;
    std::map<CString,CTransDataPack*>            m_TransDataPackMap;            //拱幅沥焊 æžæŠš, è¾¨æž, è”¼ä¿Š æŽªèŒ„ ç”˜ ç‰§æŠ›æžå‘ˆ
    std::map<CString,CTransDataPack*>::iterator    m_TransDataPackMapiterator;    //拱幅 æ²¥ç„Š å•Šåºœè™ç»° å™¨ç‰¢ç£
    std::vector<CString>                        m_vTransDataList;            //拱幅 æ²¥ç„Š åºœèƒ¶é£˜
    std::map<CString,CTransDataPack*>            m_TransDataPackMap;            //拱幅沥焊 æžæŠš, è¾¨æž, è”¼ä¿Š æŽªèŒ„ ç”˜ ç‰§æŠ›æžå‘ˆ
    std::map<CString,CTransDataPack*>::iterator    m_TransDataPackMapiterator;    //拱幅 æ²¥ç„Š å•Šåºœè™ç»° å™¨ç‰¢ç£
    std::vector<CString>                        m_vTransDataList;            //拱幅 æ²¥ç„Š åºœèƒ¶é£˜
};
EdgeInspector_App/Data/Transfer_Data.cpp
@@ -1,4 +1,4 @@
#include "stdafx.h"
#include "stdafx.h"
#include "Transfer_Data.h"
CTransfer_Data::CTransfer_Data()
EdgeInspector_App/Data/Transfer_Data.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "TransDataManager.h"
EdgeInspector_App/Defect.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#define        DEFECTIMAGE_WIDTH        1024
#define        DEFECTIMAGE_HEIGHT        500
@@ -190,7 +190,7 @@
    int                m_nJudge_Type;
    // Exception Area
    int                m_nExceptionArea;        // 0 : å›ºå™¨çªƒ, 1 : æ··å¨„ å§é­”, 2 : è‚¯å‚ˆ å™¨çªƒ
    int                m_nExceptionArea;        // 0 : å›ºå™¨çªƒ, 1 : æ··å¨„ å§é­”, 2 : è‚¯å‚ˆ å™¨çªƒ
    // User Defect Idx
    int                m_nUserDefectAreaIdx;
EdgeInspector_App/Define/Global_Define.h
@@ -1,4 +1,4 @@
#ifndef GLOBAL_DEFINE_H
#ifndef GLOBAL_DEFINE_H
#define GLOBAL_DEFINE_H
#include <map>
@@ -42,11 +42,11 @@
#define CHKMAX(a,b)    (((a) > (b)) ? (a) : (b))
#define CHKMIN(a,b)    (((a) < (b)) ? (a) : (b))
#define MAX_PANEL_SIDE                            4            // æ è
#define    UPDN_TYPE                                2            // æƒ‘窍 éžæž ä¹ç»°ç‰ˆå¿« 2 çªå”±çˆ¶ ä¹ç»°ç‰ˆå¿« 1
#define MAX_PANEL_SIDE                            4            // æ è
#define    UPDN_TYPE                                2            // æƒ‘窍 éžæž ä¹ç»°ç‰ˆå¿« 2 çªå”±çˆ¶ ä¹ç»°ç‰ˆå¿« 1
#define MAX_SIDE_COUNT                            8
#define MAX_CORNER_DIMENSION_MEASURE_COUNT        5
#define MAX_SIDE_DIMENSION_MEASURE_COUNT        16            // å¼¥æŽª Frame è çˆ¶æ€’
#define MAX_SIDE_DIMENSION_MEASURE_COUNT        16            // å¼¥æŽª Frame è çˆ¶æ€’
#define MAX_SIDE_EXCEPTION_AREA_COUNT            32
#define MAX_SIDE_USER_DEFECT_AREA_COUNT            32
@@ -87,7 +87,7 @@
    enum    EmSplashCmd                    {emShow=0, emHide, emText};
    enum    ScanDirectionIns            { SD_Forward = 0, SD_Backward, SD_Unknown };    // Glass æ‰éœ– Scan è§„æ°¢.
    enum    ScanDirectionIns            { SD_Forward = 0, SD_Backward, SD_Unknown };    // Glass æ‰éœ– Scan è§„æ°¢.
    enum    DimensionDir                { DIMENSION_A=0, DIMENSION_B, DIMENSION_C, DIMENSION_D,DIMENSION_A_DN, DIMENSION_B_DN, DIMENSION_C_DN, DIMENSION_D_DN, DIMENSION_NONE};
    enum    EM_CORNER_JUDGE                {A_ZONE_CRACK=0,B_ZONE_CRACK,B_ZONE_BURR,C_ZONE_CRACK,C_ZONE_BURR, D_ZONE_CRACK, EDGE_THINCRACK, CHIP_WHITE};
@@ -188,17 +188,17 @@
#define IMAGE_WIDTH                        4096 // 8192//2048
#define IMAGE_HEIGHT                    1024    
#define MAX_IMAGE_FRAME                    160//100
#define MAX_IMAGE_FRAME_SHORT            160//100            // å¼¥æŽª æ©‡é¥­çƒ™ è
#define MAX_IMAGE_FRAME_LONG            160//100            // å¼¥æŽª æ©‡é¥­çƒ™ è
#define MAX_IMAGE_FRAME_SHORT            160//100            // å¼¥æŽª æ©‡é¥­çƒ™ è
#define MAX_IMAGE_FRAME_LONG            160//100            // å¼¥æŽª æ©‡é¥­çƒ™ è
#define MAX_SIDE_INSPECT_AREA_COUNT        12
#define MAX_IMAGE_LINE_SHORT    MAX_IMAGE_FRAME_SHORT          * IMAGE_HEIGHT // å¼¥æŽª æ‰¼ç‰¢è
#define MAX_IMAGE_LINE_LONG        MAX_IMAGE_FRAME_LONG          * IMAGE_HEIGHT // å¼¥æŽª æ‰¼ç‰¢è
#define MAX_IMAGE_LINE_SHORT    MAX_IMAGE_FRAME_SHORT          * IMAGE_HEIGHT // å¼¥æŽª æ‰¼ç‰¢è
#define MAX_IMAGE_LINE_LONG        MAX_IMAGE_FRAME_LONG          * IMAGE_HEIGHT // å¼¥æŽª æ‰¼ç‰¢è
#define MAX_IMAGE_LINE            MAX_IMAGE_LINE_LONG
#define MAX_LIMIT_LINE            (MAX_IMAGE_FRAME - 1) * IMAGE_HEIGHT
#define MAX_IMAGE_LINE_MARGIN        ((MAX_IMAGE_FRAME+50) * IMAGE_HEIGHT) //(150 * IMAGE_HEIGHT) // å¼¥æŽª æ‰¼ç‰¢è
#define MAX_IMAGE_LINE_MARGIN        ((MAX_IMAGE_FRAME+50) * IMAGE_HEIGHT) //(150 * IMAGE_HEIGHT) // å¼¥æŽª æ‰¼ç‰¢è
#define ALIGN_4BYTE(width)        (width + 3)/4*4
#define PI                        3.14159265358979323846
@@ -331,53 +331,53 @@
#define MAX_SIDE_INSPECT_TYPE 8
struct WSSendData {
    //=======================待定==========================
    //uint8_t operation;      // æ“ä½œç¬¦ (1字节)
    //uint8_t operand;        // æ“ä½œæ•° (1字节)
    //uint16_t blockNumber;   // å›¾åƒå—编号 (2字节无符号整数)
    //uint32_t dataOffset;    // æ•°æ®åç§» (4字节无符号整数)
    //=======================待定==========================
    //uint8_t operation;      // æ“ä½œç¬¦ (1字节)
    //uint8_t operand;        // æ“ä½œæ•° (1字节)
    //uint16_t blockNumber;   // å›¾åƒå—编号 (2字节无符号整数)
    //uint32_t dataOffset;    // æ•°æ®åç§» (4字节无符号整数)
    //=====================================================
    uint8_t nCheckType = 0;       // æ£€æµ‹ç±»åž‹
    uint8_t nRecipe = 0;          // é…æ–¹
    uint8_t nLineType = 0;        // çº¿åˆ«ç±»åž‹
    uint8_t nIndex = 0;           // å›¾ç‰‡åºå·
    uint8_t nFrameIdx = 0;        // å¸§åºå·
    uint8_t nScanIdx = 0;         // ä¾§åˆ«
    uint8_t nNGType = 0;          // NG ç±»åž‹
    uint8_t nPosition = 0;        // ä½ç½®
    uint8_t    nState = 0;           // ×´Ì¬
    uint16_t nEdgeX = 0;          // X方向边缘坐标
    uint16_t nEdgeY = 0;          // X方向边缘坐标
    uint16_t nNPointY = 0;        // Y方向NG区域坐标
    uint16_t nWidth = 0;          // å›¾åƒå®½åº¦
    uint16_t nHeight = 0;         // å›¾åƒé«˜åº¦
    double dTimeStamp = 0.0;      // æ—¶é—´æˆ³
    uint16_t nLeft = 0;           // åœ¨åŽŸå›¾çš„ä½ç½®
    uint16_t nTop = 0;            // åœ¨åŽŸå›¾çš„ä½ç½®
    std::string strSN = "";       // åºåˆ—号
    std::vector<char> image = {}; // å›¾åƒæ•°æ® (二进制数据)
    uint8_t nCheckType = 0;       // æ£€æµ‹ç±»åž‹
    uint8_t nRecipe = 0;          // é…æ–¹
    uint8_t nLineType = 0;        // çº¿åˆ«ç±»åž‹
    uint8_t nIndex = 0;           // å›¾ç‰‡åºå·
    uint8_t nFrameIdx = 0;        // å¸§åºå·
    uint8_t nScanIdx = 0;         // ä¾§åˆ«
    uint8_t nNGType = 0;          // NG ç±»åž‹
    uint8_t nPosition = 0;        // ä½ç½®
    uint8_t    nState = 0;           // çŠ¶æ€
    uint16_t nEdgeX = 0;          // X方向边缘坐标
    uint16_t nEdgeY = 0;          // X方向边缘坐标
    uint16_t nNPointY = 0;        // Y方向NG区域坐标
    uint16_t nWidth = 0;          // å›¾åƒå®½åº¦
    uint16_t nHeight = 0;         // å›¾åƒé«˜åº¦
    double dTimeStamp = 0.0;      // æ—¶é—´æˆ³
    uint16_t nLeft = 0;           // åœ¨åŽŸå›¾çš„ä½ç½®
    uint16_t nTop = 0;            // åœ¨åŽŸå›¾çš„ä½ç½®
    std::string strSN = "";       // åºåˆ—号
    std::vector<char> image = {}; // å›¾åƒæ•°æ® (二进制数据)
};
struct WSReceiveData {
    // å®šä¹‰ä¸€ä¸ªè¡¨ç¤ºNG位置的结构体
    // å®šä¹‰ä¸€ä¸ªè¡¨ç¤ºNG位置的结构体
    struct NGPosition {
        uint8_t nNGType = 0;     // NG ç±»åž‹
        uint16_t nLeft = 0;      // åœ¨åŽŸå›¾çš„ä½ç½®
        uint16_t nTop = 0;       // åœ¨åŽŸå›¾çš„ä½ç½®
        uint16_t nRight = 0;     // åœ¨åŽŸå›¾çš„ä½ç½®
        uint16_t nBottom = 0;    // åœ¨åŽŸå›¾çš„ä½ç½®
        uint8_t nNGType = 0;     // NG ç±»åž‹
        uint16_t nLeft = 0;      // åœ¨åŽŸå›¾çš„ä½ç½®
        uint16_t nTop = 0;       // åœ¨åŽŸå›¾çš„ä½ç½®
        uint16_t nRight = 0;     // åœ¨åŽŸå›¾çš„ä½ç½®
        uint16_t nBottom = 0;    // åœ¨åŽŸå›¾çš„ä½ç½®
    };
    uint8_t nRecipe = 0;         // é…æ–¹
    uint8_t nLineType = 0;       // çº¿åˆ«ç±»åž‹
    uint8_t nIndex = 0;          // å›¾ç‰‡åºå·
    uint8_t nFrameIdx = 0;       // å¸§åºå·
    uint8_t nScanIdx = 0;        // ä¾§åˆ«
    std::string strSN = "";      // åºåˆ—号
    double dTimeStamp = 0.0;     // æ—¶é—´æˆ³
    uint8_t nGNum = 0;           // NG æ•°é‡
    std::vector<NGPosition> ngPosArray = {}; // NG ä½ç½®æ•°ç»„
    uint8_t nRecipe = 0;         // é…æ–¹
    uint8_t nLineType = 0;       // çº¿åˆ«ç±»åž‹
    uint8_t nIndex = 0;          // å›¾ç‰‡åºå·
    uint8_t nFrameIdx = 0;       // å¸§åºå·
    uint8_t nScanIdx = 0;        // ä¾§åˆ«
    std::string strSN = "";      // åºåˆ—号
    double dTimeStamp = 0.0;     // æ—¶é—´æˆ³
    uint8_t nGNum = 0;           // NG æ•°é‡
    std::vector<NGPosition> ngPosArray = {}; // NG ä½ç½®æ•°ç»„
};
#endif // GLOBAL_DEFINE_H
EdgeInspector_App/Define/InspectionBase.cpp
@@ -1,4 +1,4 @@
#include "stdafx.h"
#include "stdafx.h"
#include "config.h"
const TCHAR *PANEL_SIDE[]        = {_T("A_TOP"), _T("B_TOP"), _T("C_TOP"), _T("D_TOP"),_T("A_BOT"), _T("B_BOT"), _T("C_BOT"), _T("D_BOT")};
EdgeInspector_App/Define/InspectionBase.h
@@ -1,4 +1,4 @@
// HMX64Fundamentals.h: interface for the CHMX64Fundamentals class.
// HMX64Fundamentals.h: interface for the CHMX64Fundamentals class.
//
//////////////////////////////////////////////////////////////////////
@@ -17,17 +17,17 @@
public:            
    CStringArray        m_strCamCCA;
    CStringArray        m_strCamCVI;    
    int                    *m_pBufferSize;            // Grab俊辑 Buffer狼 å†œæ‰.
    int                    *m_pBufferCount;            // Grab Buffer狼 è.
    int                    *m_pMemFrameNo;            // è§’力 çš‹è‘›åºœ æ©‡é¥­çƒ™ è
    int                    *m_pBufferSize;            // Grab俊辑 Buffer狼 å†œæ‰.
    int                    *m_pBufferCount;            // Grab Buffer狼 è.
    int                    *m_pMemFrameNo;            // è§’力 çš‹è‘›åºœ æ©‡é¥­çƒ™ è
    int                    *m_pCameraPort;
    int                    *m_pFrameHeight;
    int                    *m_pFrameWidth;    
    int                    *m_nBoardID;
    int                    *m_nBoardCh;
    AcqMode                m_AcqMode;
    int                    m_nFrameDefectPixel;    // èŒ„ Frame狼 å¼¥æŽª æ¬çªƒ Pixel è
    int                    m_nMaxDefect;            // miniont,2011-04-28, å¼¥æŽª æ¬çªƒ ä¿ºè
    int                    m_nFrameDefectPixel;    // èŒ„ Frame狼 å¼¥æŽª æ¬çªƒ Pixel è
    int                    m_nMaxDefect;            // miniont,2011-04-28, å¼¥æŽª æ¬çªƒ ä¿ºè
    int                    m_nCameraCount;    
    int                    m_nScanCount;
    int                    m_nThreadCount;
EdgeInspector_App/Define/StatusMonitor.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "StatusMonitor.h"
@@ -66,13 +66,13 @@
    TCHAR szTemp[MAX_PATH];
    wcscpy_s(szTemp, MAX_PATH, strFolder);
    szTemp[strFolder.GetLength() + 1] = NULL; // NULL巩磊啊 æ»´ä¿º ç”¸ç»¢å•Šå…· èŒ„促.
    szTemp[strFolder.GetLength() + 1] = NULL; // NULL巩磊啊 æ»´ä¿º ç”¸ç»¢å•Šå…· èŒ„促.
    FileOp.hwnd = NULL;
    FileOp.wFunc = FO_DELETE;
    FileOp.pFrom = NULL;
    FileOp.pTo = NULL;
    FileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI; // çŠ¬ç‰¢çš‹çŸ«ç˜¤å•Š æ•‘哆档废 æ±²æ²¥
    FileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI; // çŠ¬ç‰¢çš‹çŸ«ç˜¤å•Š æ•‘哆档废 æ±²æ²¥
    FileOp.fAnyOperationsAborted = false;
    FileOp.hNameMappings = NULL;
    FileOp.lpszProgressTitle = NULL;
EdgeInspector_App/Define/StatusMonitor.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "Singleton.h"
#include "Config.h"
@@ -16,13 +16,13 @@
#include "LicenseChecker.h"
/* 
Main Interface ç‹¼ Instance Pointer ç”« çˆ±ç»Š ä¹ç»°ä¿ƒ.
Main Interface ç‹¼ Instance Pointer ç”« çˆ±ç»Š ä¹ç»°ä¿ƒ.
UI俊辑绰 Main Interface ç«‹è¾Ÿé˜‘ çªéœ¸ç™»æ æƒ‘龋 æ›¼ç‚¼æžéª¨è‚º,
UI俊辑绰 Main Interface ç«‹è¾Ÿé˜‘ çªéœ¸ç™»æ æƒ‘龋 æ›¼ç‚¼æžéª¨è‚º,
CStatusMonitor è‚º é˜¿ Instance ä¿Š ç«‹è¾Ÿçªæ¡£åºŸ çªç£Š
CStatusMonitor è‚º é˜¿ Instance ä¿Š ç«‹è¾Ÿçªæ¡£åºŸ çªç£Š
UI ä»˜ä¿ƒ Interface çˆ¶é›ç»°èŠ­ è“–满栏聪瘪
UI ä»˜ä¿ƒ Interface çˆ¶é›ç»°èŠ­ è“–满栏聪瘪
*/
class CStatusMonitor : public Singleton<CStatusMonitor>
EdgeInspector_App/DlgLicenseInfo.cpp
@@ -1,4 +1,4 @@
// DlgLicenseInfo.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// DlgLicenseInfo.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -7,7 +7,7 @@
#include "afxdialogex.h"
// CDlgLicenseInfo æŽªæ‹³ æƒ‘磊涝聪促.
// CDlgLicenseInfo æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CDlgLicenseInfo, CDialogEx)
@@ -48,16 +48,16 @@
    // key status
    switch (status.nKeyStatus)
    {
    case LicenseKey_NotConnected:    // æ¥·æ¬ æ•‘凳
    case LicenseKey_NotConnected:    // æ¥·æ¬ æ•‘凳
        strValue = L"Key Status = Not Connected";
        break;
    case LicenseKey_NotCertified:    // ç‰¢åˆ˜ æ•‘凳
    case LicenseKey_NotCertified:    // ç‰¢åˆ˜ æ•‘凳
        strValue = L"Key Status = Not Certified";
        break;
    case LicenseKey_NotActivated:    // åŠå·±æ‹³ æ•‘凳
    case LicenseKey_NotActivated:    // åŠå·±æ‹³ æ•‘凳
        strValue = L"Key Status = Not Activated";
        break;
    case LicenseKey_Activated:        // åŠå·±æ‹³ å‡³
    case LicenseKey_Activated:        // åŠå·±æ‹³ å‡³
        strValue = L"Key Status = Activated";
        break;
    }
@@ -85,4 +85,4 @@
END_MESSAGE_MAP()
// CDlgLicenseInfo çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
// CDlgLicenseInfo çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
EdgeInspector_App/DlgLicenseInfo.h
@@ -1,21 +1,21 @@
#pragma once
#pragma once
#include "StatusMonitor.h"
// CDlgLicenseInfo æŽªæ‹³ æƒ‘磊涝聪促.
// CDlgLicenseInfo æŽªæ‹³ æƒ‘磊涝聪促.
class CDlgLicenseInfo : public CDialogEx
{
    DECLARE_DYNAMIC(CDlgLicenseInfo)
public:
    CDlgLicenseInfo(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CDlgLicenseInfo(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CDlgLicenseInfo();
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_DIALOG_LICENSE };
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    DECLARE_MESSAGE_MAP()
EdgeInspector_App/DlgSideDimensionSetting.cpp
@@ -1,4 +1,4 @@
// DlgSideDimensionSetting.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// DlgSideDimensionSetting.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -7,7 +7,7 @@
#include "afxdialogex.h"
// CDlgSideDimensionSetting æŽªæ‹³ æƒ‘磊涝聪促.
// CDlgSideDimensionSetting æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CDlgSideDimensionSetting, CDialogEx)
EdgeInspector_App/DlgSideDimensionSetting.h
@@ -1,25 +1,25 @@
#pragma once
#pragma once
#include "GridCtrl.h"
#include "GlassRecipe.h"
#include "Glass_Data.h"
// CDlgSideDimensionSetting æŽªæ‹³ æƒ‘磊涝聪促.
// CDlgSideDimensionSetting æŽªæ‹³ æƒ‘磊涝聪促.
class CDlgSideDimensionSetting : public CDialogEx
{
    DECLARE_DYNAMIC(CDlgSideDimensionSetting)
public:
    CDlgSideDimensionSetting(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CDlgSideDimensionSetting(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CDlgSideDimensionSetting();
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_DLG_SIDE_DIMENSION_SETTING };
protected:
    virtual BOOL OnInitDialog();
    BOOL PreTranslateMessage(MSG* pMsg);
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    DECLARE_MESSAGE_MAP()
EdgeInspector_App/DlgSideExceptoinSetting.cpp
@@ -1,4 +1,4 @@
// DlgSideExceptoinSetting.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// DlgSideExceptoinSetting.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -7,7 +7,7 @@
#include "afxdialogex.h"
// CDlgSideDimensionSetting æŽªæ‹³ æƒ‘磊涝聪促.
// CDlgSideDimensionSetting æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CDlgSideExceptoinSetting, CDialogEx)
EdgeInspector_App/DlgSideExceptoinSetting.h
@@ -1,26 +1,26 @@
#pragma once
#pragma once
#include "GridCtrl.h"
#include "GlassRecipe.h"
#include "Glass_Data.h"
#include "EdgeImageViewer.h"
// CDlgSideExceptoinSetting æŽªæ‹³ æƒ‘磊涝聪促.
// CDlgSideExceptoinSetting æŽªæ‹³ æƒ‘磊涝聪促.
class CDlgSideExceptoinSetting : public CDialogEx
{
    DECLARE_DYNAMIC(CDlgSideExceptoinSetting)
public:
    CDlgSideExceptoinSetting(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CDlgSideExceptoinSetting(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CDlgSideExceptoinSetting();
    // æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    // æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_DLG_SIDE_EXCEPTION_SETTING };
protected:
    virtual BOOL OnInitDialog();
    BOOL PreTranslateMessage(MSG* pMsg);
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    DECLARE_MESSAGE_MAP()
EdgeInspector_App/DlgSideNotchSetting.cpp
@@ -1,4 +1,4 @@
// DlgSideNotchSetting.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// DlgSideNotchSetting.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -8,7 +8,7 @@
#include "Global_Define.h"
// CDlgSideNotchSetting æŽªæ‹³ æƒ‘磊涝聪促.
// CDlgSideNotchSetting æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CDlgSideNotchSetting, CDialogEx)
@@ -281,7 +281,7 @@
    vecParams.push_back(strTemp);
    strTemp.Format(_T("Use Notch Defect"));
    vecParams.push_back(strTemp);
    strTemp.Format(_T("Inspect Threshold (″)"));
    strTemp.Format(_T("Inspect Threshold (″)"));
    vecParams.push_back(strTemp);
    strTemp.Format(_T("Inspect Offset"));
    vecParams.push_back(strTemp);
EdgeInspector_App/DlgSideNotchSetting.h
@@ -1,26 +1,26 @@
#pragma once
#pragma once
#include "GridCtrl.h"
#include "GlassRecipe.h"
#include "Glass_Data.h"
#include "EdgeImageViewer.h"
// CDlgSideNotchSetting æŽªæ‹³ æƒ‘磊涝聪促.
// CDlgSideNotchSetting æŽªæ‹³ æƒ‘磊涝聪促.
class CDlgSideNotchSetting : public CDialogEx
{
    DECLARE_DYNAMIC(CDlgSideNotchSetting)
public:
    CDlgSideNotchSetting(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CDlgSideNotchSetting(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CDlgSideNotchSetting();
    // æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    // æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_DLG_SIDE_NOTCH_SETTING };
protected:
    virtual BOOL OnInitDialog();
    BOOL PreTranslateMessage(MSG* pMsg);
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    DECLARE_MESSAGE_MAP()
EdgeInspector_App/DlgSideUserDefectSetting.cpp
@@ -1,4 +1,4 @@
// DlgSideUserDefectSetting.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// DlgSideUserDefectSetting.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -7,7 +7,7 @@
#include "afxdialogex.h"
// CDlgSideDimensionSetting æŽªæ‹³ æƒ‘磊涝聪促.
// CDlgSideDimensionSetting æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CDlgSideUserDefectSetting, CDialogEx)
EdgeInspector_App/DlgSideUserDefectSetting.h
@@ -1,26 +1,26 @@
#pragma once
#pragma once
#include "GridCtrl.h"
#include "GlassRecipe.h"
#include "Glass_Data.h"
#include "EdgeImageViewer.h"
// CDlgSideUserDefectSetting æŽªæ‹³ æƒ‘磊涝聪促.
// CDlgSideUserDefectSetting æŽªæ‹³ æƒ‘磊涝聪促.
class CDlgSideUserDefectSetting : public CDialogEx
{
    DECLARE_DYNAMIC(CDlgSideUserDefectSetting)
public:
    CDlgSideUserDefectSetting(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CDlgSideUserDefectSetting(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CDlgSideUserDefectSetting();
    // æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    // æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_DLG_SIDE_USER_DEFECT_SETTING };
protected:
    virtual BOOL OnInitDialog();
    BOOL PreTranslateMessage(MSG* pMsg);
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    DECLARE_MESSAGE_MAP()
EdgeInspector_App/EdgeInspector_App.cpp
@@ -1,5 +1,5 @@
// EdgeInspector_App.cpp : è§ˆä¾© æ©‡è‚ºå¼Šä¼ä¿Š æŽªèŒ„ åŠªè´°èƒ¶ æ‚¼ç´¯é˜‘ æ²¥ç‹¼é’¦èªä¿ƒ.

// EdgeInspector_App.cpp : è§ˆä¾© æ©‡è‚ºå¼Šä¼ä¿Š æŽªèŒ„ åŠªè´°èƒ¶ æ‚¼ç´¯é˜‘ æ²¥ç‹¼é’¦èªä¿ƒ.
//
#include "stdafx.h"
@@ -23,7 +23,7 @@
BOOL g_bUse_SaveAllDMP = FALSE;
LONG WINAPI MyUnhandledExceptionFilter(EXCEPTION_POINTERS* pExceptionInfo) {
    // å¤ªé˜‹îަ冼遂伲
    // å¤ªé˜‹îަ冼遂伲
    char szFileName[MAX_PATH];
    struct stat buffer;
    if (stat("D:\\Inspection\\Temp", &buffer) != 0)
@@ -96,7 +96,7 @@
    snprintf(szFileName, MAX_PATH, "D:\\Inspection\\Temp\\EdgeInspector_DmpFile.dmp");
    // ?孙冼遂
    // ?孙冼遂
    HANDLE hFile = CreateFileA(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile != INVALID_HANDLE_VALUE) {
        MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
@@ -104,7 +104,7 @@
        dumpInfo.ThreadId = GetCurrentThreadId();
        dumpInfo.ClientPointers = TRUE;
        // ?忑dump冼遂
        // ?忑dump冼遂
        BOOL success = MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile, g_bUse_SaveAllDMP ? MiniDumpWithFullMemory : MiniDumpFilterMemory, &dumpInfo, NULL, NULL);
        CloseHandle(hFile);
@@ -126,57 +126,57 @@
BEGIN_MESSAGE_MAP(CEdgeInspector_App, CWinAppEx)
    ON_COMMAND(ID_APP_ABOUT, &CEdgeInspector_App::OnAppAbout)
    // é’Žéœ– é¢‡è€é˜‘ æ‰æª¬è‚º çªç»° å·©è¾‘ ç–™é£žæ¶èªä¿ƒ.
    // é’Žéœ– é¢‡è€é˜‘ æ‰æª¬è‚º çªç»° å·©è¾‘ ç–™é£žæ¶èªä¿ƒ.
    ON_COMMAND(ID_FILE_NEW, &CWinAppEx::OnFileNew)
    ON_COMMAND(ID_FILE_OPEN, &CWinAppEx::OnFileOpen)
    // é’Žéœ– ç‰¢å°– æ±²æ²¥ ç–™é£žæ¶èªä¿ƒ.
    // é’Žéœ– ç‰¢å°– æ±²æ²¥ ç–™é£žæ¶èªä¿ƒ.
    ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinAppEx::OnFilePrintSetup)
END_MESSAGE_MAP()
// CEdgeInspector_App ç§¯å·±
// CEdgeInspector_App ç§¯å·±
CEdgeInspector_App::CEdgeInspector_App()
{
    SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
    m_bHiColorIcons = TRUE;
    // ä¿ƒçŸ« çŸ«ç´¯ åŒ…府磊 ç˜¤ç›”
    // ä¿ƒçŸ« çŸ«ç´¯ åŒ…府磊 ç˜¤ç›”
    m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS;
#ifdef _MANAGED
    // è§ˆä¾© æ©‡è‚ºå¼Šä¼é˜‘ å‚ä¾© æ”«ç»¢ ç¹é¸¥çƒ™ ç˜¤ç›”阑 è¤ä¾©çªå’¯ å‘¼é›èŒ„ ç‰ˆå¿«(/clr):
    //     1) æž çœ å•Š æ±²æ²¥ç¯® ä¿ƒçŸ« çŸ«ç´¯ åŒ…府磊 ç˜¤ç›”捞 åŠ›æŽªè‚º ç´¯æ‚¼çªç»° å• éž˜å¤¸é’¦èªä¿ƒ.
    //     2) æ©‡è‚ºç’ƒé£˜ä¿Šè¾‘ å‘¼é›çªå¦¨æ System.Windows.Forms俊 æŽªèŒ„ æ›¼ç‚¼ç”« çœ å•Šç§¦å…· é’¦èªä¿ƒ.
    // è§ˆä¾© æ©‡è‚ºå¼Šä¼é˜‘ å‚ä¾© æ”«ç»¢ ç¹é¸¥çƒ™ ç˜¤ç›”阑 è¤ä¾©çªå’¯ å‘¼é›èŒ„ ç‰ˆå¿«(/clr):
    //     1) æž çœ å•Š æ±²æ²¥ç¯® ä¿ƒçŸ« çŸ«ç´¯ åŒ…府磊 ç˜¤ç›”捞 åŠ›æŽªè‚º ç´¯æ‚¼çªç»° å• éž˜å¤¸é’¦èªä¿ƒ.
    //     2) æ©‡è‚ºç’ƒé£˜ä¿Šè¾‘ å‘¼é›çªå¦¨æ System.Windows.Forms俊 æŽªèŒ„ æ›¼ç‚¼ç”« çœ å•Šç§¦å…· é’¦èªä¿ƒ.
    System::Windows::Forms::Application::SetUnhandledExceptionMode(System::Windows::Forms::UnhandledExceptionMode::ThrowException);
#endif
    // TODO: é…’è´° è§ˆä¾© æ©‡è‚ºå¼Šä¼ ID å·©ç£Šå‡¯é˜‘ ç»Šèœ¡ ID å·©ç£Šå‡¯è‚º å®˜æ“ç»žçŸ«å·(鼻厘).
    // å·©ç£Šå‡¯ä¿Š æŽªèŒ„ è¾‘ä¾¥: CompanyName.ProductName.SubProduct.VersionInformation
    // TODO: é…’è´° è§ˆä¾© æ©‡è‚ºå¼Šä¼ ID å·©ç£Šå‡¯é˜‘ ç»Šèœ¡ ID å·©ç£Šå‡¯è‚º å®˜æ“ç»žçŸ«å·(鼻厘).
    // å·©ç£Šå‡¯ä¿Š æŽªèŒ„ è¾‘ä¾¥: CompanyName.ProductName.SubProduct.VersionInformation
    SetAppID(_T("EdgeInspector_App.AppID.NoVersion"));
    // TODO: å’¯æ‰ä¿Š ç§¯å·± å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    // InitInstance俊 è‘›ç”µ åå¤¸èŒ„ æª¬æ‰æ‹³ ç´¯è¯€é˜‘ ç¡…摹钦聪促.
    // TODO: å’¯æ‰ä¿Š ç§¯å·± å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    // InitInstance俊 è‘›ç”µ åå¤¸èŒ„ æª¬æ‰æ‹³ ç´¯è¯€é˜‘ ç¡…摹钦聪促.
    m_bCreateBase = FALSE;
    m_bCreateLog = FALSE;
    m_hMutex = NULL;
}
// èœ¡è€èŒ„ CEdgeInspector_App ä¿ºçœ‰æ¶èªä¿ƒ.
// èœ¡è€èŒ„ CEdgeInspector_App ä¿ºçœ‰æ¶èªä¿ƒ.
CEdgeInspector_App theApp;
// CEdgeInspector_App æª¬æ‰æ‹³
// CEdgeInspector_App æª¬æ‰æ‹³
BOOL CEdgeInspector_App::InitInstance()
{
    // è§ˆä¾© æ©‡è‚ºå¼Šä¼ æ¦‚聪其胶飘啊 ComCtl32.dll æ»šå‚ˆ 6 æžæƒ‘阑 è¤ä¾©çªå’¯ åŽšæž—å€” èƒ¶é¸¥è€é˜‘
    // è¤ä¾©çªæ¡£åºŸ ç˜¤æ²¥çªç»° ç‰ˆå¿«, Windows XP æƒ‘俊辑 é¦†é›çŸ« InitCommonControlsEx()啊 éž˜å¤¸é’¦èªä¿ƒ.
    // InitCommonControlsEx()甫 è¤ä¾©çªç˜¤ è‡¼æ æ èŠ’é˜‘ çˆ¶ç”¸ è ç»åš¼èªä¿ƒ.
    // è§ˆä¾© æ©‡è‚ºå¼Šä¼ æ¦‚聪其胶飘啊 ComCtl32.dll æ»šå‚ˆ 6 æžæƒ‘阑 è¤ä¾©çªå’¯ åŽšæž—å€” èƒ¶é¸¥è€é˜‘
    // è¤ä¾©çªæ¡£åºŸ ç˜¤æ²¥çªç»° ç‰ˆå¿«, Windows XP æƒ‘俊辑 é¦†é›çŸ« InitCommonControlsEx()啊 éž˜å¤¸é’¦èªä¿ƒ.
    // InitCommonControlsEx()甫 è¤ä¾©çªç˜¤ è‡¼æ æ èŠ’é˜‘ çˆ¶ç”¸ è ç»åš¼èªä¿ƒ.
    INITCOMMONCONTROLSEX InitCtrls;
    InitCtrls.dwSize = sizeof(InitCtrls);
    // è§ˆä¾© æ©‡è‚ºå¼Šä¼ä¿Šè¾‘ è¤ä¾©ä¸” è‘›ç”µ å‚ä¾© ç‰§é£˜è´¹ åŠªè´°èƒ¶ç”« å™¨çªƒçªæ¡£åºŸ
    // æž äº²æ ¼é˜‘ æ±²æ²¥çªç»žçŸ«å·.
    // è§ˆä¾© æ©‡è‚ºå¼Šä¼ä¿Šè¾‘ è¤ä¾©ä¸” è‘›ç”µ å‚ä¾© ç‰§é£˜è´¹ åŠªè´°èƒ¶ç”« å™¨çªƒçªæ¡£åºŸ
    // æž äº²æ ¼é˜‘ æ±²æ²¥çªç»žçŸ«å·.
    InitCtrls.dwICC = ICC_WIN95_CLASSES;
    InitCommonControlsEx(&InitCtrls);
@@ -192,7 +192,7 @@
        }
    }
    // OLE æ‰¼æžå®çŸ¾åºœç”« æª¬æ‰æ‹³é’¦èªä¿ƒ.
    // OLE æ‰¼æžå®çŸ¾åºœç”« æª¬æ‰æ‹³é’¦èªä¿ƒ.
    if (!AfxOleInit())
    {
        AfxMessageBox(IDP_OLE_INIT_FAILED);
@@ -203,18 +203,18 @@
    EnableTaskbarInteraction(FALSE);
    // RichEdit ç‰§é£˜è´¹é˜‘ è¤ä¾©çªå¦¨æ  AfxInitRichEdit2()啊 ä¹ç»¢å…· é’¦èªä¿ƒ.
    // RichEdit ç‰§é£˜è´¹é˜‘ è¤ä¾©çªå¦¨æ  AfxInitRichEdit2()啊 ä¹ç»¢å…· é’¦èªä¿ƒ.
    // AfxInitRichEdit2();
    // é’Žéœ– æª¬æ‰æ‹³
    // æžç”¸ æ‰ç“·é˜‘ è¤ä¾©çªç˜¤ è‡¼ç»Š å¼¥è¾† è§’青 é¢‡è€ç‹¼ å†œæ‰ç”« ä¸´æžå¦¨æ
    // é…’贰俊辑 éž˜å¤¸ ç»ç»° æ¼‚æ²¥ æª¬æ‰æ‹³
    // é£Žå‡­é˜‘ åŠ›èŠ­ç§¦å…· é’¦èªä¿ƒ.
    // ç§¦å¯¸ æ±²æ²¥æž åŽ†åŽ˜ç­‰ é¥­ç˜¤èƒ¶é£˜åºœ è™ç”« å‡½ç‰ˆçªç»žçŸ«å·.
    // TODO: æž å·©ç£Šå‡¯é˜‘ é›€è¤ è‚šç»° ç‚¼æµç‹¼ æžæŠšè‹ž éžç¯®
    // åˆ©ä¾‹èŒ„ éƒ´ä¾©æ è‚º èæ²¥ç§¦å…· é’¦èªä¿ƒ.
    SetRegistryKey(_T("肺拿 è§ˆä¾© æ©‡è‚ºå¼Šä¼ ä»˜è¿‡è¤ä¿Šè¾‘ ç§¯å·±ç­‰ è§ˆä¾© æ©‡è‚ºå¼Šä¼"));
    LoadStdProfileSettings(4);  // MRU甫 å™¨çªƒçªå’¯ é’Žéœ– INI é¢‡è€ å¯è®°é˜‘ è‚ºé›é’¦èªä¿ƒ.
    // é’Žéœ– æª¬æ‰æ‹³
    // æžç”¸ æ‰ç“·é˜‘ è¤ä¾©çªç˜¤ è‡¼ç»Š å¼¥è¾† è§’青 é¢‡è€ç‹¼ å†œæ‰ç”« ä¸´æžå¦¨æ
    // é…’贰俊辑 éž˜å¤¸ ç»ç»° æ¼‚æ²¥ æª¬æ‰æ‹³
    // é£Žå‡­é˜‘ åŠ›èŠ­ç§¦å…· é’¦èªä¿ƒ.
    // ç§¦å¯¸ æ±²æ²¥æž åŽ†åŽ˜ç­‰ é¥­ç˜¤èƒ¶é£˜åºœ è™ç”« å‡½ç‰ˆçªç»žçŸ«å·.
    // TODO: æž å·©ç£Šå‡¯é˜‘ é›€è¤ è‚šç»° ç‚¼æµç‹¼ æžæŠšè‹ž éžç¯®
    // åˆ©ä¾‹èŒ„ éƒ´ä¾©æ è‚º èæ²¥ç§¦å…· é’¦èªä¿ƒ.
    SetRegistryKey(_T("肺拿 è§ˆä¾© æ©‡è‚ºå¼Šä¼ ä»˜è¿‡è¤ä¿Šè¾‘ ç§¯å·±ç­‰ è§ˆä¾© æ©‡è‚ºå¼Šä¼"));
    LoadStdProfileSettings(4);  // MRU甫 å™¨çªƒçªå’¯ é’Žéœ– INI é¢‡è€ å¯è®°é˜‘ è‚ºé›é’¦èªä¿ƒ.
    if (NULL != g_pBase)
    {
@@ -236,35 +236,35 @@
    theApp.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL,
        RUNTIME_CLASS(CMFCToolTipCtrl), &ttParams);
    // è§ˆä¾© æ©‡è‚ºå¼Šä¼ç‹¼ å·©è¾‘ è¢æ•²å¤é˜‘ æ®¿åºŸé’¦èªä¿ƒ. å·©è¾‘ è¢æ•²å¤ç¯®
    //  å·©è¾‘, æ©‡é¥­çƒ™ èŠ’ æ£º è½° è¤æžç‹¼ æ¥·æ¬ å¼€ä¸”阑 é’¦èªä¿ƒ.
    // è§ˆä¾© æ©‡è‚ºå¼Šä¼ç‹¼ å·©è¾‘ è¢æ•²å¤é˜‘ æ®¿åºŸé’¦èªä¿ƒ. å·©è¾‘ è¢æ•²å¤ç¯®
    //  å·©è¾‘, æ©‡é¥­çƒ™ èŠ’ æ£º è½° è¤æžç‹¼ æ¥·æ¬ å¼€ä¸”阑 é’¦èªä¿ƒ.
    CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
        IDR_MAINFRAME,
        RUNTIME_CLASS(CEdgeInspector_AppDoc),
        RUNTIME_CLASS(CMainFrame),       // æž— SDI æ©‡é¥­çƒ™ èŠ’æ¶èªä¿ƒ.
        RUNTIME_CLASS(CMainFrame),       // æž— SDI æ©‡é¥­çƒ™ èŠ’æ¶èªä¿ƒ.
        RUNTIME_CLASS(CEdgeInspector_AppView));
    if (!pDocTemplate)
        return FALSE;
    AddDocTemplate(pDocTemplate);
    // é’Žéœ– å¤¹ ç–™é£ž, DDE, é¢‡è€ å‡¯æ‰ä¿Š æŽªèŒ„ ç–™é£žä¸´é˜‘ å¤‡å·© ç›’籍钦聪促.
    // é’Žéœ– å¤¹ ç–™é£ž, DDE, é¢‡è€ å‡¯æ‰ä¿Š æŽªèŒ„ ç–™é£žä¸´é˜‘ å¤‡å·© ç›’籍钦聪促.
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    // ç–™é£žä¸´ä¿Š ç˜¤æ²¥ç­‰ ç–™é£žé˜‘ å¼èƒ¶è©æ‘¹é’¦èªä¿ƒ.
    // è§ˆä¾© æ©‡è‚ºå¼Šä¼æž /RegServer, /Register, /Unregserver è‚šç»° /Unregister肺 çŸ«ç´¯ç­‰ ç‰ˆå¿« FALSE甫 é¦†åˆ¸é’¦èªä¿ƒ.
    // ç–™é£žä¸´ä¿Š ç˜¤æ²¥ç­‰ ç–™é£žé˜‘ å¼èƒ¶è©æ‘¹é’¦èªä¿ƒ.
    // è§ˆä¾© æ©‡è‚ºå¼Šä¼æž /RegServer, /Register, /Unregserver è‚šç»° /Unregister肺 çŸ«ç´¯ç­‰ ç‰ˆå¿« FALSE甫 é¦†åˆ¸é’¦èªä¿ƒ.
    if (!ProcessShellCommand(cmdInfo))
        return FALSE;
    // èŠ’ çªå”±çˆ¶ æª¬æ‰æ‹³ç™»èŒæ éª¨è‚º æžç”« é’ŽçŸ«çªç»Š è¯€å•捞飘钦聪促.
    // èŠ’ çªå”±çˆ¶ æª¬æ‰æ‹³ç™»èŒæ éª¨è‚º æžç”« é’ŽçŸ«çªç»Š è¯€å•捞飘钦聪促.
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();
    // ç«‹å›ºè¤å•Š ä¹é˜‘ ç‰ˆå¿«ä¿Šçˆ¶ DragAcceptFiles甫 é¾‹å…é’¦èªä¿ƒ.
    //  SDI è§ˆä¾© æ©‡è‚ºå¼Šä¼ä¿Šè¾‘ç»° ProcessShellCommand é¥¶ä¿Š æžçŸ¾èŒ„ é¾‹å…æž æƒ¯ç§¯ç§¦å…· é’¦èªä¿ƒ.
    // ç«‹å›ºè¤å•Š ä¹é˜‘ ç‰ˆå¿«ä¿Šçˆ¶ DragAcceptFiles甫 é¾‹å…é’¦èªä¿ƒ.
    //  SDI è§ˆä¾© æ©‡è‚ºå¼Šä¼ä¿Šè¾‘ç»° ProcessShellCommand é¥¶ä¿Š æžçŸ¾èŒ„ é¾‹å…æž æƒ¯ç§¯ç§¦å…· é’¦èªä¿ƒ.
    CMainFrame* pMain = static_cast<CMainFrame*>(AfxGetMainWnd());
    //pMain->SetDoc(static_cast<CAlignInspectionDoc*>(pMain->GetActiveDocument()));
@@ -280,29 +280,29 @@
    CloseHandle(m_hMutex);
    //TODO: çœ å•ŠèŒ„ çœ å•Š åºœå®¶èƒ¶ç”« è´¸åºœé’¦èªä¿ƒ.
    //TODO: çœ å•ŠèŒ„ çœ å•Š åºœå®¶èƒ¶ç”« è´¸åºœé’¦èªä¿ƒ.
    AfxOleTerm(FALSE);
    return CWinAppEx::ExitInstance();
}
// CEdgeInspector_App çš‹çŸ«ç˜¤ è´¸åºœæ‰
// CEdgeInspector_App çš‹çŸ«ç˜¤ è´¸åºœæ‰
// è§ˆä¾© æ©‡è‚ºå¼Šä¼ æ²¥ç„Šä¿Š è¤ä¾©ç™»ç»° CAboutDlg æŽªæ‹³ æƒ‘磊涝聪促.
// è§ˆä¾© æ©‡è‚ºå¼Šä¼ æ²¥ç„Šä¿Š è¤ä¾©ç™»ç»° CAboutDlg æŽªæ‹³ æƒ‘磊涝聪促.
class CAboutDlg : public CDialogEx
{
public:
    CAboutDlg();
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_ABOUTBOX };
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
// å¤‡æ³…涝聪促.
// å¤‡æ³…涝聪促.
protected:
    DECLARE_MESSAGE_MAP()
};
@@ -319,14 +319,14 @@
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// æŽªæ‹³ æƒ‘磊甫 è§’青窍扁 å›°èŒ„ è§ˆä¾© æ©‡è‚ºå¼Šä¼ ç–™é£žæ¶èªä¿ƒ.
// æŽªæ‹³ æƒ‘磊甫 è§’青窍扁 å›°èŒ„ è§ˆä¾© æ©‡è‚ºå¼Šä¼ ç–™é£žæ¶èªä¿ƒ.
void CEdgeInspector_App::OnAppAbout()
{
    CAboutDlg aboutDlg;
    aboutDlg.DoModal();
}
// CEdgeInspector_App è¤ä¾©ç£Š ç˜¤æ²¥ è‚ºé›/历厘 çš‹è¾‘靛
// CEdgeInspector_App è¤ä¾©ç£Š ç˜¤æ²¥ è‚ºé›/历厘 çš‹è¾‘靛
void CEdgeInspector_App::PreLoadState()
{
@@ -345,7 +345,7 @@
{
}
// CEdgeInspector_App çš‹çŸ«ç˜¤ è´¸åºœæ‰
// CEdgeInspector_App çš‹çŸ«ç˜¤ è´¸åºœæ‰
EdgeInspector_App/EdgeInspector_App.h
@@ -1,17 +1,17 @@
// EdgeInspector_App.h : EdgeInspector_App è§ˆä¾© æ©‡è‚ºå¼Šä¼ä¿Š æŽªèŒ„ æž— åº†æ­¹ é¢‡è€

// EdgeInspector_App.h : EdgeInspector_App è§ˆä¾© æ©‡è‚ºå¼Šä¼ä¿Š æŽªèŒ„ æž— åº†æ­¹ é¢‡è€
//
#pragma once
#ifndef __AFXWIN_H__
    #error "PCH俊 æŽªç§¦ æž é¢‡è€é˜‘ å™¨çªƒçªæ‰ å‚ˆä¿Š 'stdafx.h'甫 å™¨çªƒé’¦èªä¿ƒ."
    #error "PCH俊 æŽªç§¦ æž é¢‡è€é˜‘ å™¨çªƒçªæ‰ å‚ˆä¿Š 'stdafx.h'甫 å™¨çªƒé’¦èªä¿ƒ."
#endif
#include "resource.h"       // æž— æ‰é¾‹æ¶èªä¿ƒ.
#include "resource.h"       // æž— æ‰é¾‹æ¶èªä¿ƒ.
// CEdgeInspector_App:
// æž åŠªè´°èƒ¶ç‹¼ å¤‡æ³…俊 æŽªç§¦è¾‘ç»° EdgeInspector_App.cpp阑 æ›¼ç‚¼çªç»žçŸ«å·.
// æž åŠªè´°èƒ¶ç‹¼ å¤‡æ³…俊 æŽªç§¦è¾‘ç»° EdgeInspector_App.cpp阑 æ›¼ç‚¼çªç»žçŸ«å·.
//
class CEdgeInspector_App : public CWinAppEx
@@ -21,15 +21,15 @@
    ULONG_PTR        m_gdiplusToken;
    BOOL            m_bCreateBase;    
    BOOL            m_bCreateLog;        // è¾†ä¸°çŸ« çœ‰å†œç”« å›°ç§¦.
    BOOL            m_bCreateLog;        // è¾†ä¸°çŸ« çœ‰å†œç”« å›°ç§¦.
    HANDLE            m_hMutex;        
// çŠæ²¥ç‹¼æ¶èªä¿ƒ.
// çŠæ²¥ç‹¼æ¶èªä¿ƒ.
public:
    virtual BOOL InitInstance();
    virtual int ExitInstance();
// å¤‡æ³…涝聪促.
// å¤‡æ³…涝聪促.
    UINT  m_nAppLook;
    BOOL  m_bHiColorIcons;
EdgeInspector_App/EdgeInspector_AppDoc.cpp
@@ -1,10 +1,10 @@
// EdgeInspector_AppDoc.cpp : CEdgeInspector_AppDoc åŠªè´°èƒ¶ç‹¼ å¤‡æ³…

// EdgeInspector_AppDoc.cpp : CEdgeInspector_AppDoc åŠªè´°èƒ¶ç‹¼ å¤‡æ³…
//
#include "stdafx.h"
// SHARED_HANDLERSç»° å›ºåºœ ç„Šæ‰, ç»µå®¶é­„ å¼Šè¦† æ£º å…«ç¥¸ éž˜ç£ è´¸åºœæ‰ç”« å¤‡æ³…窍绰 ATL æ©‡è‚ºç’ƒé£˜ä¿Šè¾‘ æ²¥ç‹¼ä¸” è ä¹æ å“¥
// ç§¦å¯¸ æ©‡è‚ºç’ƒé£˜å®¢ å·©è¾‘ å†…靛甫 å‚èœ¡çªæ¡£åºŸ ç§¦ å‡›èªä¿ƒ.
// SHARED_HANDLERSç»° å›ºåºœ ç„Šæ‰, ç»µå®¶é­„ å¼Šè¦† æ£º å…«ç¥¸ éž˜ç£ è´¸åºœæ‰ç”« å¤‡æ³…窍绰 ATL æ©‡è‚ºç’ƒé£˜ä¿Šè¾‘ æ²¥ç‹¼ä¸” è ä¹æ å“¥
// ç§¦å¯¸ æ©‡è‚ºç’ƒé£˜å®¢ å·©è¾‘ å†…靛甫 å‚èœ¡çªæ¡£åºŸ ç§¦ å‡›èªä¿ƒ.
#ifndef SHARED_HANDLERS
#include "EdgeInspector_App.h"
#endif
@@ -25,11 +25,11 @@
END_MESSAGE_MAP()
// CEdgeInspector_AppDoc ç§¯å·±/家戈
// CEdgeInspector_AppDoc ç§¯å·±/家戈
CEdgeInspector_AppDoc::CEdgeInspector_AppDoc()
{
    // TODO: å’¯æ‰ä¿Š è€é›€å·± ç§¯å·± å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    // TODO: å’¯æ‰ä¿Š è€é›€å·± ç§¯å·± å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
}
@@ -42,8 +42,8 @@
    if (!CDocument::OnNewDocument())
        return FALSE;
    // TODO: å’¯æ‰ä¿Š çŠæª¬æ‰æ‹³ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    // SDI å·©è¾‘ç»° æž å·©è¾‘甫 ä¿ƒçŸ« è¤ä¾©é’¦èªä¿ƒ.
    // TODO: å’¯æ‰ä¿Š çŠæª¬æ‰æ‹³ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    // SDI å·©è¾‘ç»° æž å·©è¾‘甫 ä¿ƒçŸ« è¤ä¾©é’¦èªä¿ƒ.
    return TRUE;
}
@@ -57,20 +57,20 @@
{
    if (ar.IsStoring())
    {
        // TODO: å’¯æ‰ä¿Š åŽ†åŽ˜ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
        // TODO: å’¯æ‰ä¿Š åŽ†åŽ˜ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    }
    else
    {
        // TODO: å’¯æ‰ä¿Š è‚ºçˆ¹ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
        // TODO: å’¯æ‰ä¿Š è‚ºçˆ¹ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    }
}
#ifdef SHARED_HANDLERS
// ç»µå®¶é­„ å¼Šè¦†é˜‘ ç˜¤ç›”钦聪促.
// ç»µå®¶é­„ å¼Šè¦†é˜‘ ç˜¤ç›”钦聪促.
void CEdgeInspector_AppDoc::OnDrawThumbnail(CDC& dc, LPRECT lprcBounds)
{
    // å·©è¾‘狼 å•捞磐甫 å¼Šåºœå¦¨æ æž å†…靛甫 èæ²¥çªç»žçŸ«å·.
    // å·©è¾‘狼 å•捞磐甫 å¼Šåºœå¦¨æ æž å†…靛甫 èæ²¥çªç»žçŸ«å·.
    dc.FillSolidRect(lprcBounds, RGB(255, 255, 255));
    CString strText = _T("TODO: implement thumbnail drawing here");
@@ -88,14 +88,14 @@
    dc.SelectObject(pOldFont);
}
// å…«ç¥¸ è´¸åºœæ‰ç”« ç˜¤ç›”钦聪促.
// å…«ç¥¸ è´¸åºœæ‰ç”« ç˜¤ç›”钦聪促.
void CEdgeInspector_AppDoc::InitializeSearchContent()
{
    CString strSearchContent;
    // å·©è¾‘狼 å•捞磐俊辑 å…«ç¥¸ èƒ½åˆ¨æ˜Žç”« æ±²æ²¥é’¦èªä¿ƒ.
    // èƒ½åˆ¨æ˜Ž ä½•盒篮 ";"肺 å¤‡ç›’登绢具 é’¦èªä¿ƒ.
    // å·©è¾‘狼 å•捞磐俊辑 å…«ç¥¸ èƒ½åˆ¨æ˜Žç”« æ±²æ²¥é’¦èªä¿ƒ.
    // èƒ½åˆ¨æ˜Ž ä½•盒篮 ";"肺 å¤‡ç›’登绢具 é’¦èªä¿ƒ.
    // æŠ—: strSearchContent = _T("point;rectangle;circle;ole object;");
    // æŠ—: strSearchContent = _T("point;rectangle;circle;ole object;");
    SetSearchContent(strSearchContent);
}
@@ -119,7 +119,7 @@
#endif // SHARED_HANDLERS
// CEdgeInspector_AppDoc æŸ³çªœ
// CEdgeInspector_AppDoc æŸ³çªœ
#ifdef _DEBUG
void CEdgeInspector_AppDoc::AssertValid() const
@@ -134,4 +134,4 @@
#endif //_DEBUG
// CEdgeInspector_AppDoc ç–™é£ž
// CEdgeInspector_AppDoc ç–™é£ž
EdgeInspector_App/EdgeInspector_AppDoc.h
@@ -1,5 +1,5 @@
// EdgeInspector_AppDoc.h : CEdgeInspector_AppDoc åŠªè´°èƒ¶ç‹¼ ç‰¢ç£å…¶æžèƒ¶

// EdgeInspector_AppDoc.h : CEdgeInspector_AppDoc åŠªè´°èƒ¶ç‹¼ ç‰¢ç£å…¶æžèƒ¶
//
@@ -8,17 +8,17 @@
class CEdgeInspector_AppDoc : public CDocument
{
protected: // serialization俊辑父 çˆ¶ç”¸ç»¢ç¬¼èªä¿ƒ.
protected: // serialization俊辑父 çˆ¶ç”¸ç»¢ç¬¼èªä¿ƒ.
    CEdgeInspector_AppDoc();
    DECLARE_DYNCREATE(CEdgeInspector_AppDoc)
// æ¼‚己涝聪促.
// æ¼‚己涝聪促.
public:
// ç´¯è¯€æ¶èªä¿ƒ.
// ç´¯è¯€æ¶èªä¿ƒ.
public:
// çŠæ²¥ç‹¼æ¶èªä¿ƒ.
// çŠæ²¥ç‹¼æ¶èªä¿ƒ.
public:
    virtual BOOL OnNewDocument();
    virtual void Serialize(CArchive& ar);
@@ -27,7 +27,7 @@
    virtual void OnDrawThumbnail(CDC& dc, LPRECT lprcBounds);
#endif // SHARED_HANDLERS
// å¤‡æ³…涝聪促.
// å¤‡æ³…涝聪促.
public:
    virtual ~CEdgeInspector_AppDoc();
#ifdef _DEBUG
@@ -37,12 +37,12 @@
protected:
// ç§¯å·±ç­‰ çš‹çŸ«ç˜¤ ç”˜ çªƒè
// ç§¯å·±ç­‰ çš‹çŸ«ç˜¤ ç”˜ çªƒè
protected:
    DECLARE_MESSAGE_MAP()
#ifdef SHARED_HANDLERS
    // å…«ç¥¸ è´¸åºœæ‰ä¿Š æŽªèŒ„ å…«ç¥¸ èƒ½åˆ¨æ˜Žç”« æ±²æ²¥çªç»° æ¡£å¿«å›º çªƒè
    // å…«ç¥¸ è´¸åºœæ‰ä¿Š æŽªèŒ„ å…«ç¥¸ èƒ½åˆ¨æ˜Žç”« æ±²æ²¥çªç»° æ¡£å¿«å›º çªƒè
    void SetSearchContent(const CString& value);
#endif // SHARED_HANDLERS
};
EdgeInspector_App/EdgeInspector_AppView.cpp
@@ -1,5 +1,5 @@
// EdgeInspector_AppView.cpp : CEdgeInspector_AppView åŠªè´°èƒ¶ç‹¼ å¤‡æ³…

// EdgeInspector_AppView.cpp : CEdgeInspector_AppView åŠªè´°èƒ¶ç‹¼ å¤‡æ³…
//
#include "stdafx.h"
@@ -13,7 +13,7 @@
// CEdgeInspector_AppView
// CEdgeInspector_AppView ç§¯å·±/家戈
// CEdgeInspector_AppView ç§¯å·±/家戈
IMPLEMENT_DYNCREATE(CEdgeInspector_AppView, CFormView)
@@ -62,13 +62,13 @@
BOOL CEdgeInspector_AppView::PreCreateWindow(CREATESTRUCT& cs)
{
    // TODO: CREATESTRUCT cs甫 èæ²¥çªå’¯ å’¯æ‰ä¿Šè¾‘
    //  Window åŠªè´°èƒ¶ è‚šç»° èƒ¶é¸¥è€é˜‘ èæ²¥é’¦èªä¿ƒ.
    // TODO: CREATESTRUCT cs甫 èæ²¥çªå’¯ å’¯æ‰ä¿Šè¾‘
    //  Window åŠªè´°èƒ¶ è‚šç»° èƒ¶é¸¥è€é˜‘ èæ²¥é’¦èªä¿ƒ.
    return CFormView::PreCreateWindow(cs);
}
// CEdgeInspector_AppView æŸ³çªœ
// CEdgeInspector_AppView æŸ³çªœ
void CEdgeInspector_AppView::DoDataExchange(CDataExchange* pDX)
{
@@ -93,7 +93,7 @@
    ON_EVENT(CEdgeInspector_AppView, IDC_BTN_MAIN_EXIT, DISPID_CLICK, CEdgeInspector_AppView::ClickMenuButton, VTS_NONE)
END_EVENTSINK_MAP()
// CEdgeInspector_AppView çš‹çŸ«ç˜¤ è´¸åºœæ‰
// CEdgeInspector_AppView çš‹çŸ«ç˜¤ è´¸åºœæ‰
void CEdgeInspector_AppView::CreateChildView()
{
EdgeInspector_App/EdgeInspector_AppView.h
@@ -1,4 +1,4 @@

#pragma once
#include "btnenh.h"
@@ -34,7 +34,7 @@
public:
    enum{ IDD = IDD_MAIN_VIEW };
    // çŠæ²¥ç‹¼æ¶èªä¿ƒ.
    // çŠæ²¥ç‹¼æ¶èªä¿ƒ.
public:
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    virtual void DoDataExchange(CDataExchange* pDX);
EdgeInspector_App/Fitting/CHDataFitting.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "CHDataFitting.h"
#include <algorithm>
EdgeInspector_App/Fitting/CHDataFitting.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include <vector>
typedef std::vector<double>                        VectorDouble;
EdgeInspector_App/Grabber/MulticamControl.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "MulticamControl.h"
#include "Global_Define.h"
#include "FrameBufferController.h"
@@ -243,7 +243,7 @@
    if (nYStart + nYSize > nBufSizeY* GetEndFrameIdx())
        return FALSE;
    
    // çŸ«ç´¯ æ©‡é¥­çƒ™ é”…龋客 åœº æ©‡é¥­çƒ™ é”…龋.
    // çŸ«ç´¯ æ©‡é¥­çƒ™ é”…龋客 åœº æ©‡é¥­çƒ™ é”…龋.
    int nStartFrameNo = nYStart / nBufSizeY;
    int nEndFrameNo = (nYStart + nYSize) / nBufSizeY;
    LPBYTE    lpHeadAddr = GetFrameHeader(iScan,nStartFrameNo);
@@ -259,7 +259,7 @@
        memcpy(lpIn + i * nXSize, lpStart + nLine * nBufSizeX, nXSize);
        if (nStartFrameNo <= nEndFrameNo && (nYStart + i + 1) % nBufSizeY  == 0)
        {
            // æžå›ºç˜¤ç”« è¶éƒ´å…·çªç»° åº·å¼€æž MemFrameNo ç‰ˆæ‹Œä¿Š å§åªšä¹ç»° ç‰ˆå¿« è´¸åºœ.
            // æžå›ºç˜¤ç”« è¶éƒ´å…·çªç»° åº·å¼€æž MemFrameNo ç‰ˆæ‹Œä¿Š å§åªšä¹ç»° ç‰ˆå¿« è´¸åºœ.
            lpHeadAddr = GetFrameHeader(iScan,++nStartFrameNo);
            lpStart = lpHeadAddr + nXStart;
            nLine = 0;
@@ -357,7 +357,7 @@
        return FALSE;
    }
    if(m_isLiveGrab == TRUE)        // Live Grab çŸ«.
    if(m_isLiveGrab == TRUE)        // Live Grab çŸ«.
    {
        m_nSetBufferIdx = 0;
@@ -514,7 +514,7 @@
    int buffer_pitch_value;
    driver_status |= McGetParamInt(m_hGrabChannel, MC_BufferPitch, &buffer_pitch_value);
    ///// Time out 5 æª¬....
    ///// Time out 5 æª¬....
    driver_status |= McSetParamInt(m_hGrabChannel,  MC_AcqTimeout_ms, -1);
    driver_status |= McSetParamInt(m_hGrabChannel, MC_SurfaceCount, 25);
EdgeInspector_App/Grabber/MulticamControl.h
@@ -1,4 +1,4 @@

#pragma once
#include "GrabberControl.h"
@@ -17,7 +17,7 @@
public:
    //////////////////////////////////////////////////////////////////////////
    // Initialization
    virtual BOOL    Initialize(void *pParam, int *pErrorCode,int iBoard=0);    // Grabber æª¬æ‰æ‹³
    virtual BOOL    Initialize(void *pParam, int *pErrorCode,int iBoard=0);    // Grabber æª¬æ‰æ‹³
    virtual BOOL    InitializeBuffer(void *pParam);
    //////////////////////////////////////////////////////////////////////////
    // Deinit
@@ -75,8 +75,8 @@
public:
    _GRABBER_INIT_PARAM_    m_Param;    
    int                    m_nEndFrameIdx;        // æ³…犁 Grab èŒ„ è
    int                    m_nStartFrameIdx;    // å•ŠåŽ˜ å·è´°å‚ˆä¿Š Grab茄 Frame狼 ç‰¢éƒ¸èƒ¶.
    int                    m_nEndFrameIdx;        // æ³…犁 Grab èŒ„ è
    int                    m_nStartFrameIdx;    // å•ŠåŽ˜ å·è´°å‚ˆä¿Š Grab茄 Frame狼 ç‰¢éƒ¸èƒ¶.
    int                    m_nSetBufferIdx;
    int                    m_nScanIndex;
    int                    m_nBoardID;
EdgeInspector_App/Grabber/RadientControl.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "RadientControl.h"
#include "FrameBufferController.h"
@@ -331,7 +331,7 @@
    if (nYStart + nYSize > nBufSizeY* GetEndFrameIdx())
        return FALSE;
    
    // çŸ«ç´¯ æ©‡é¥­çƒ™ é”…龋客 åœº æ©‡é¥­çƒ™ é”…龋.
    // çŸ«ç´¯ æ©‡é¥­çƒ™ é”…龋客 åœº æ©‡é¥­çƒ™ é”…龋.
    int nStartFrameNo = nYStart / nBufSizeY;
    int nEndFrameNo = (nYStart + nYSize) / nBufSizeY;
    LPBYTE    lpHeadAddr = GetFrameHeader(iScan,nStartFrameNo);
@@ -347,7 +347,7 @@
        memcpy(lpIn + i * nXSize, lpStart + nLine * nBufSizeX, nXSize);
        if (nStartFrameNo <= nEndFrameNo && (nYStart + i + 1) % nBufSizeY  == 0)
        {
            // æžå›ºç˜¤ç”« è¶éƒ´å…·çªç»° åº·å¼€æž MemFrameNo ç‰ˆæ‹Œä¿Š å§åªšä¹ç»° ç‰ˆå¿« è´¸åºœ.
            // æžå›ºç˜¤ç”« è¶éƒ´å…·çªç»° åº·å¼€æž MemFrameNo ç‰ˆæ‹Œä¿Š å§åªšä¹ç»° ç‰ˆå¿« è´¸åºœ.
            lpHeadAddr = GetFrameHeader(iScan,++nStartFrameNo);
            lpStart = lpHeadAddr + nXStart;
            nLine = 0;
@@ -439,7 +439,7 @@
    CGrabberRadient    *pRadient = (CGrabberRadient*)HookDataPtr;
    if(pRadient->m_isLiveGrab == TRUE)        // Live Grab çŸ«.
    if(pRadient->m_isLiveGrab == TRUE)        // Live Grab çŸ«.
    {
        pRadient->m_nSetBufferIdx = 0;
@@ -616,7 +616,7 @@
        /*
        MdigControl(m_MilDigitizer, M_CAMERALINK_CC1_SOURCE, M_GRAB_EXPOSURE+M_TIMER1);
        MdigControl(m_MilDigitizer, M_GRAB_EXPOSURE+M_TIMER1, M_ENABLE);
        MdigControl(m_MilDigitizer, M_GRAB_EXPOSURE_SOURCE+M_TIMER1, M_CONTINUOUS);                      // Periodic è„šé¾‹ ç‰¢å•Š
        MdigControl(m_MilDigitizer, M_GRAB_EXPOSURE_SOURCE+M_TIMER1, M_CONTINUOUS);                      // Periodic è„šé¾‹ ç‰¢å•Š
        MdigControl(m_MilDigitizer, M_GRAB_EXPOSURE_TIME+M_TIMER1, nExposureTimer);                        //10000ns
        MdigControl(m_MilDigitizer, M_GRAB_EXPOSURE_TIME_DELAY+M_TIMER1,  nExposureTimerDelay);                 //10000ns
        */
EdgeInspector_App/Grabber/RadientControl.h
@@ -1,4 +1,4 @@

#pragma once
#include "Global_Define.h"
@@ -15,7 +15,7 @@
public:
    //////////////////////////////////////////////////////////////////////////
    // Initialization
    virtual BOOL    Initialize(void *pParam, int *pErrorCode,int iBoard=0);    // Grabber æª¬æ‰æ‹³
    virtual BOOL    Initialize(void *pParam, int *pErrorCode,int iBoard=0);    // Grabber æª¬æ‰æ‹³
    virtual BOOL    InitializeBuffer(void *pParam);
    //////////////////////////////////////////////////////////////////////////
    // Deinit
@@ -68,8 +68,8 @@
public:
    _GRABBER_INIT_PARAM_    m_Param;        
    
    MIL_ID            m_MilSystem;                    // ç„Šé›å¯¸ 1函荐
    MIL_ID            m_MilDigitizer;        // å¢¨çš‹æ‰¼ å‡½è
    MIL_ID            m_MilSystem;                    // ç„Šé›å¯¸ 1函荐
    MIL_ID            m_MilDigitizer;        // å¢¨çš‹æ‰¼ å‡½è
    MIL_ID            m_Milbufgrab[BUFFERING_SIZE_MAX];    
    DIGSTATUS        m_DigitizerStatus;        
    long            m_lBord;
@@ -77,8 +77,8 @@
    CCriticalSection    m_critical;
    int                    m_nEndFrameIdx;        // æ³…犁 Grab èŒ„ è
    int                    m_nStartFrameIdx;    // å•ŠåŽ˜ å·è´°å‚ˆä¿Š Grab茄 Frame狼 ç‰¢éƒ¸èƒ¶.
    int                    m_nEndFrameIdx;        // æ³…犁 Grab èŒ„ è
    int                    m_nStartFrameIdx;    // å•ŠåŽ˜ å·è´°å‚ˆä¿Š Grab茄 Frame狼 ç‰¢éƒ¸èƒ¶.
    int                    m_nSetBufferIdx;
    int                    m_nScanIndex;    
    int                    m_nAllocatedGrabBufSize;    
EdgeInspector_App/Grabber/SapControl.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "SapControl.h"
#define    FRAME_HEAD_MARKER    0x55AAFF00
@@ -108,7 +108,7 @@
BOOL CSapControl::CreateXfer()
{
    // Xfer勤甸 ç§¯å·±
    // Xfer勤甸 ç§¯å·±
    if (DisplayStatus("CorXferNew", CorXferNew(m_hBoard, m_hAcq, *m_hBuffer, NULL, &m_hXfer)))
        return FALSE;
@@ -120,13 +120,13 @@
    xfer_desc.incByte        = m_Param.nFrameWidth;
#ifdef FRAME_CALLBACK
    // å¦®å½’ çªƒè æ®¿åºŸ
    // å¦®å½’ çªƒè æ®¿åºŸ
    if (DisplayStatus("CorXferRegisterCallback"
        , CorXferRegisterCallback(m_hXfer
        , CORXFER_VAL_EVENT_TYPE_END_OF_FRAME
        , XferCallback, (void*)this)))
#else
    // å¦®å½’ çªƒè æ®¿åºŸ
    // å¦®å½’ çªƒè æ®¿åºŸ
    if (DisplayStatus("CorXferRegisterCallback"
        , CorXferRegisterCallback(m_hXfer
        , CORXFER_VAL_EVENT_TYPE_END_OF_NLINES + m_Param.nFrameHeight
@@ -139,7 +139,7 @@
        if (DisplayStatus("CorXferAppend", CorXferAppend(m_hXfer, m_hAcq, m_hBuffer[i], NULL)))
            return FALSE;
        // å¦®å½’ çªƒè æ®¿åºŸ
        // å¦®å½’ çªƒè æ®¿åºŸ
        if (DisplayStatus("CorXferRegisterCallback"
            , CorXferRegisterCallback(m_hXfer
            , CORXFER_VAL_EVENT_TYPE_END_OF_FRAME
@@ -164,7 +164,7 @@
        return FALSE;
    //////////////////////////////////////////////////////////////////////////
    // Buffer ä¸”寸
    // Buffer ä¸”寸
    CORSTATUS st;
    int i;
    SIZE_T tempBufferSize= m_Param.nGrabBufSize;
@@ -181,7 +181,7 @@
    for (i = 0; i <nBufferrCount; i++)
    {
        // Memory Address ä¸”寸.
        // Memory Address ä¸”寸.
        m_pX64Buffer[i] = (void*)(m_pOneLargeBuffer+ nBufferSize*i);        
        if (m_pX64Buffer[i])
        {
@@ -241,7 +241,7 @@
    if (DisplayStatus("CorAcqSetPrms", CorAcqSetPrms(m_hAcq, m_hVic, m_hCam, TRUE)))
        return FALSE;
    // èç¬¼ä¸” åº·æƒ‘狼 å†œæ‰ çœ å…
    // èç¬¼ä¸” åº·æƒ‘狼 å†œæ‰ çœ å…
    //    if (DisplayStatus("CorAcqGetPrm", CorAcqGetPrm(m_hAcq, CORACQ_PRM_SCALE_HORZ, &g_pBase->m_nFrameWidth)))
    //        return FALSE;
@@ -480,7 +480,7 @@
        if(bFreeRun == FALSE)
        {
            // æ‚¼æ‰ åº·æƒ‘犬焊 ç‰ˆå¿«
            // æ‚¼æ‰ åº·æƒ‘犬焊 ç‰ˆå¿«
            if( DisplayStatus( "CorAcqSetPrm", CorAcqSetPrm(m_hAcq, CORACQ_PRM_EXT_FRAME_TRIGGER_ENABLE, TRUE)))
                return FALSE;
@@ -518,7 +518,7 @@
    {
        g_pLog->DisplayMessage(L"StopAcq : Grab %d, End %d", m_nSetBufferIdx, m_nEndFrameIdx);
        //20141022 yjm abort è‚º çªæ ä¿ƒæ¾œ å¼Šä¹çŸ« ç£Šæ“ç„Šé›å•Š æ¡“ç»¢æ»šèµ´ä¿ƒ. çŠä½•æ³¼çˆ¶ çƒ¹çªƒ..揪广 ä¿ºç»Šç§¯ã±ã±ã›
        //20141022 yjm abort è‚º çªæ ä¿ƒæ¾œ å¼Šä¹çŸ« ç£Šæ“ç„Šé›å•Š æ¡“ç»¢æ»šèµ´ä¿ƒ. çŠä½•æ³¼çˆ¶ çƒ¹çªƒ..揪广 ä¿ºç»Šç§¯ã±ã±ã›
        if (DisplayStatus("CorXferStop", CorXferStop(m_hXfer)))//if (DisplayStatus("CorXferStop", CorXferAbort(m_hXfer)))
        {
            g_pLog->DisplayMessage(L"CorXferAbort Fail. Grab %d, End %d", m_nSetBufferIdx, m_nEndFrameIdx);
@@ -587,7 +587,7 @@
    if (nYStart + nYSize > nBufSizeY* GetEndFrameIdx())
        return FALSE;
    // çŸ«ç´¯ æ©‡é¥­çƒ™ é”…龋客 åœº æ©‡é¥­çƒ™ é”…龋.
    // çŸ«ç´¯ æ©‡é¥­çƒ™ é”…龋客 åœº æ©‡é¥­çƒ™ é”…龋.
    int nStartFrameNo = nYStart / nBufSizeY;
    int nEndFrameNo = (nYStart + nYSize) / nBufSizeY;
    LPBYTE    lpHeadAddr = GetFrameHeader(iScan,nStartFrameNo);
@@ -603,7 +603,7 @@
        memcpy(lpIn + i * nXSize, lpStart + nLine * nBufSizeX, nXSize);
        if (nStartFrameNo <= nEndFrameNo && (nYStart + i + 1) % nBufSizeY  == 0)
        {
            // æžå›ºç˜¤ç”« è¶éƒ´å…·çªç»° åº·å¼€æž MemFrameNo ç‰ˆæ‹Œä¿Š å§åªšä¹ç»° ç‰ˆå¿« è´¸åºœ.
            // æžå›ºç˜¤ç”« è¶éƒ´å…·çªç»° åº·å¼€æž MemFrameNo ç‰ˆæ‹Œä¿Š å§åªšä¹ç»° ç‰ˆå¿« è´¸åºœ.
            lpHeadAddr = GetFrameHeader(iScan,++nStartFrameNo);
            lpStart = lpHeadAddr + nXStart;
            nLine = 0;
@@ -726,7 +726,7 @@
{
    LPBYTE lpBuffer = NULL;
    // æžå›ºç˜¤ç”« å˜›ç¯® åˆ©æž ç»ç»° ç‰ˆå¿«ç»° æ»šæ¬ºç”« åºœç•”茄促.
    // æžå›ºç˜¤ç”« å˜›ç¯® åˆ©æž ç»ç»° ç‰ˆå¿«ç»° æ»šæ¬ºç”« åºœç•”茄促.
    if (m_nStartFrameIdx == 0 && m_nEndFrameIdx == 0)
    {
        if (nFrameNo >= 0 && nFrameNo <    g_pBase->m_pMemFrameNo[m_Param.nCameraIdx])
@@ -738,7 +738,7 @@
        else
            lpBuffer = NULL;
    }
    else    // æžå›ºç˜¤ç”« å˜›ç¯® ç‰ˆå¿«ç»° Frame No甫 çŠ¬ç‰¢çªå’¯ æ»šæ¬ºç”« åºœç•”茄促.
    else    // æžå›ºç˜¤ç”« å˜›ç¯® ç‰ˆå¿«ç»° Frame No甫 çŠ¬ç‰¢çªå’¯ æ»šæ¬ºç”« åºœç•”茄促.
    {
        if (nFrameNo >= m_nStartFrameIdx && nFrameNo < m_nEndFrameIdx)
        {
EdgeInspector_App/Grabber/SapControl.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "Global_Define.h"
#include "GrabberControl.h"
@@ -16,7 +16,7 @@
    virtual ~CSapControl(void);
public:
    virtual BOOL    Initialize(void *pParam, int *pErrorCode,int iBoard=0);    // Grabber æª¬æ‰æ‹³
    virtual BOOL    Initialize(void *pParam, int *pErrorCode,int iBoard=0);    // Grabber æª¬æ‰æ‹³
    virtual BOOL    InitializeBuffer(void *pParam);    
    virtual BOOL    Deinitialize();
    virtual BOOL    GrabScanStart(int iScan, BOOL bFreeRun, int nPeriod, int nExposure=10, BOOL bAuto=TRUE);
@@ -61,8 +61,8 @@
protected:
    _GRABBER_INIT_PARAM_    m_Param;
    int                    m_nEndFrameIdx;        // æ³…犁 Grab èŒ„ è
    int                    m_nStartFrameIdx;    // å•ŠåŽ˜ å·è´°å‚ˆä¿Š Grab茄 Frame狼 ç‰¢éƒ¸èƒ¶.
    int                    m_nEndFrameIdx;        // æ³…犁 Grab èŒ„ è
    int                    m_nStartFrameIdx;    // å•ŠåŽ˜ å·è´°å‚ˆä¿Š Grab茄 Frame狼 ç‰¢éƒ¸èƒ¶.
    int                    m_nSetBufferIdx;
    int                    m_nScanIndex;    
    int                    m_nAllocatedGrabBufSize;    
@@ -74,10 +74,10 @@
    CCriticalSection    m_csIdxLock;
    BYTE*                m_pOneLargeBuffer;
    void*                m_pX64Buffer[MAX_BUFFER_COUNT];    // è§’力 ä¸”寸瞪 æ»šæ¬º.
    void*                m_pX64Buffer[MAX_BUFFER_COUNT];    // è§’力 ä¸”寸瞪 æ»šæ¬º.
    CORBUFFER            m_hBuffer[MAX_BUFFER_COUNT];        // Handle to Buffer module where acquisition will take place
    CORBUFFER            m_hFrame[MAX_FRAME_COUNT];
    BOOL                m_bIsGrabbing;        // Grabbing åç‰¢ç˜¤ é…’囱瘤 é­„窜.
    BOOL                m_bIsGrabbing;        // Grabbing åç‰¢ç˜¤ é…’囱瘤 é­„窜.
    CORSERVER            m_hPC;                // Handle to a PC Sapera server
    CORSERVER            m_hBoard;            // Handle to Sapera server that will be acquiring
EdgeInspector_App/Grabber/SapLineGrab.cpp
@@ -1,4 +1,4 @@

#include "StdAfx.h"
#include "SapLineGrab.h"
@@ -79,7 +79,7 @@
            return INITX64_FAIL_CREATEBUFFER;
        if(ActivateObjects() == FALSE)
            return INITX64_FAIL_CREATEXFER;// ??? è´§è‚ºæ¬¾ define æ€¥æ”« éž˜å¤¸
            return INITX64_FAIL_CREATEXFER;// ??? è´§è‚ºæ¬¾ define æ€¥æ”« éž˜å¤¸
        m_pXfer->Connect();
        m_pXfer->SetAutoConnect(TRUE);
@@ -143,7 +143,7 @@
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Process侩 æ»šæ¬º ç§¯å·±
    // Process侩 æ»šæ¬º ç§¯å·±
    // 1. Memory Virtual Alloc
@@ -286,7 +286,7 @@
LPBYTE CSapLineGrab::GetGrabFrameHeader(int nFrameNo, BOOL* bRet)
{
    // æžå›ºç˜¤ç”« å˜›ç¯® åˆ©æž ç»ç»° ç‰ˆå¿«ç»° æ»šæ¬ºç”« åºœç•”茄促.
    // æžå›ºç˜¤ç”« å˜›ç¯® åˆ©æž ç»ç»° ç‰ˆå¿«ç»° æ»šæ¬ºç”« åºœç•”茄促.
    LPBYTE pBuff= NULL;
    if(nFrameNo > m_nSetBufferIdx)    return NULL;
@@ -310,7 +310,7 @@
        else
            lpBuffer = NULL;
    }
    else    // æžå›ºç˜¤ç”« å˜›ç¯® ç‰ˆå¿«ç»° Frame No甫 çŠ¬ç‰¢çªå’¯ æ»šæ¬ºç”« åºœç•”茄促.
    else    // æžå›ºç˜¤ç”« å˜›ç¯® ç‰ˆå¿«ç»° Frame No甫 çŠ¬ç‰¢çªå’¯ æ»šæ¬ºç”« åºœç•”茄促.
    {
        if (bRet)
            *bRet = TRUE;
@@ -452,7 +452,7 @@
    if (bGrabbing == FALSE)
    {
        // Snap ç–™é£žæž å­æ å”± Callback çªƒèå•Š é¾‹å…ç™»ç˜¤ è‡¼ç¯®  ç‰ˆå¿« Abort() é¾‹å… -> Callback çªƒèå•Š é¾‹å…ç™»ç˜¤ è‡¼æ æ Freeze()肺绰 Snap è¾†ä¸°å•Š æ•‘ç­‰ä¿ƒ.
        // Snap ç–™é£žæž å­æ å”± Callback çªƒèå•Š é¾‹å…ç™»ç˜¤ è‡¼ç¯®  ç‰ˆå¿« Abort() é¾‹å… -> Callback çªƒèå•Š é¾‹å…ç™»ç˜¤ è‡¼æ æ Freeze()肺绰 Snap è¾†ä¸°å•Š æ•‘ç­‰ä¿ƒ.
        g_pLog->DisplayMessage(_T("Stop Acq Case 1-1 Not Grabbing"));
        if(m_bSnapStart == TRUE && m_bXferCall == FALSE)
        {
@@ -467,7 +467,7 @@
    }
    else
    {
        // Callback çªƒèå•Š é¾‹å…ç­‰ ç‰ˆå¿«ç»° Freeze() é¾‹å…
        // Callback çªƒèå•Š é¾‹å…ç­‰ ç‰ˆå¿«ç»° Freeze() é¾‹å…
        //g_pLog->DisplayMessage(TRUE, "Stop Acq Case 2-1");
        if(m_bXferCall)
        {
@@ -625,7 +625,7 @@
    }
    /*
    // çŸ«ç´¯ æ©‡é¥­çƒ™ é”…龋客 åœº æ©‡é¥­çƒ™ é”…龋.
    // çŸ«ç´¯ æ©‡é¥­çƒ™ é”…龋客 åœº æ©‡é¥­çƒ™ é”…龋.
    int nStartFrameNo = nYStart / nBufSizeY;
    int nEndFrameNo = (nYStart + nYSize) / nBufSizeY;
    LPBYTE    lpHeadAddr = GetFrameHeader(iScan,nStartFrameNo);
@@ -641,7 +641,7 @@
        memcpy(lpIn + i * nXSize, lpStart + nLine * nBufSizeX, nXSize);
        if (nStartFrameNo <= nEndFrameNo && (nYStart + i + 1) % nBufSizeY  == 0)
        {
            // æžå›ºç˜¤ç”« è¶éƒ´å…·çªç»° åº·å¼€æž MemFrameNo ç‰ˆæ‹Œä¿Š å§åªšä¹ç»° ç‰ˆå¿« è´¸åºœ.
            // æžå›ºç˜¤ç”« è¶éƒ´å…·çªç»° åº·å¼€æž MemFrameNo ç‰ˆæ‹Œä¿Š å§åªšä¹ç»° ç‰ˆå¿« è´¸åºœ.
            lpHeadAddr = GetFrameHeader(iScan,++nStartFrameNo);
            lpStart = lpHeadAddr + nXStart;
            nLine = 0;
EdgeInspector_App/Grabber/SapLineGrab.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "StdAfx.h"
#include "sapclassbasic.h"
@@ -17,14 +17,14 @@
    virtual ~CSapLineGrab(void);
public:
    virtual BOOL    Initialize(void *pParam, int *pErrorCode,int iBoard=0);    // Grabber æª¬æ‰æ‹³
    virtual BOOL    Initialize(void *pParam, int *pErrorCode,int iBoard=0);    // Grabber æª¬æ‰æ‹³
    virtual BOOL    InitializeBuffer(void *pParam);    
    virtual BOOL    Deinitialize();
    virtual BOOL    GrabScanStart(int iScan, BOOL bFreeRun, int nPeriod, int nExposure=10, BOOL bAuto=TRUE);
    virtual BOOL    GrabLiveStart(int nExposure=15);
    virtual BOOL    GrabScanStop();
    virtual BOOL    IsGrabbing();
    virtual int        IsAcqFrame(int nFrameNo, int nThreadIdx = -1);    // Return 0 - é…’流 æ•‘嘛澜, Return -1 - ç˜¤å†µ, Return 1 -  æ²¥æƒ‘
    virtual int        IsAcqFrame(int nFrameNo, int nThreadIdx = -1);    // Return 0 - é…’流 æ•‘嘛澜, Return -1 - ç˜¤å†µ, Return 1 -  æ²¥æƒ‘
    virtual LPBYTE    GetFrameHeader(int iScan,int nFrameNo, BOOL* bSuccess = NULL);
    virtual LPBYTE    GetFrameHeaderLine(int iScan,int nLine, BOOL* bSuccess = NULL);
    virtual BOOL    GetSmallImage(int iScan,LPBYTE lpIn, int nXStart, int nYStart, int nXSize, int nYSize, BOOL bMustMapping = TRUE);    
@@ -73,11 +73,11 @@
    SapBuffer        *m_pSapBuffers;
    SapTransfer        *m_pXfer;
    SapView            *View;
    int                m_nGrabFrameNo;        // çŸ«ç´¯æ€¥è‹ž å…«è¤ä¸” æ©‡é¥­çƒ™ èä¿Šè¾‘ æ‹Œé­‚ç­‰ è§’力 å˜›ç»° æ©‡é¥­çƒ™ è.
    int                m_nGrabFrameNo;        // çŸ«ç´¯æ€¥è‹ž å…«è¤ä¸” æ©‡é¥­çƒ™ èä¿Šè¾‘ æ‹Œé­‚ç­‰ è§’力 å˜›ç»° æ©‡é¥­çƒ™ è.
    _GRABBER_INIT_PARAM_    m_Param;
    int                m_nBoardID;
    int                m_nAllocatedGrabBufSize;
    int                m_cxferCall;        // Xfercallback捞 é¾‹å…ç­‰ å¢¨æ¬¾é£˜.
    int                m_cxferCall;        // Xfercallback捞 é¾‹å…ç­‰ å¢¨æ¬¾é£˜.
    int                m_nScanIndex;
    dqGrabIdx            m_dqCallbackFrame;
    CCriticalSection    m_csIdxLock;
EdgeInspector_App/Grabber/SoliosControl.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "SoliosControl.h"
#include "FrameBufferController.h"
@@ -330,7 +330,7 @@
    if (nYStart + nYSize > nBufSizeY* GetEndFrameIdx())
        return FALSE;
    
    // çŸ«ç´¯ æ©‡é¥­çƒ™ é”…龋客 åœº æ©‡é¥­çƒ™ é”…龋.
    // çŸ«ç´¯ æ©‡é¥­çƒ™ é”…龋客 åœº æ©‡é¥­çƒ™ é”…龋.
    int nStartFrameNo = nYStart / nBufSizeY;
    int nEndFrameNo = (nYStart + nYSize) / nBufSizeY;
    LPBYTE    lpHeadAddr = GetFrameHeader(iScan,nStartFrameNo);
@@ -346,7 +346,7 @@
        memcpy(lpIn + i * nXSize, lpStart + nLine * nBufSizeX, nXSize);
        if (nStartFrameNo <= nEndFrameNo && (nYStart + i + 1) % nBufSizeY  == 0)
        {
            // æžå›ºç˜¤ç”« è¶éƒ´å…·çªç»° åº·å¼€æž MemFrameNo ç‰ˆæ‹Œä¿Š å§åªšä¹ç»° ç‰ˆå¿« è´¸åºœ.
            // æžå›ºç˜¤ç”« è¶éƒ´å…·çªç»° åº·å¼€æž MemFrameNo ç‰ˆæ‹Œä¿Š å§åªšä¹ç»° ç‰ˆå¿« è´¸åºœ.
            lpHeadAddr = GetFrameHeader(iScan,++nStartFrameNo);
            lpStart = lpHeadAddr + nXStart;
            nLine = 0;
@@ -438,7 +438,7 @@
    CGrabberSolios    *pRadient = (CGrabberSolios*)HookDataPtr;
    if(pRadient->m_isLiveGrab == TRUE)        // Live Grab çŸ«.
    if(pRadient->m_isLiveGrab == TRUE)        // Live Grab çŸ«.
    {
        pRadient->m_nSetBufferIdx = 0;
@@ -611,7 +611,7 @@
        /*
        MdigControl(m_MilDigitizer, M_CAMERALINK_CC1_SOURCE, M_GRAB_EXPOSURE+M_TIMER1);
        MdigControl(m_MilDigitizer, M_GRAB_EXPOSURE+M_TIMER1, M_ENABLE);
        MdigControl(m_MilDigitizer, M_GRAB_EXPOSURE_SOURCE+M_TIMER1, M_CONTINUOUS);                      // Periodic è„šé¾‹ ç‰¢å•Š
        MdigControl(m_MilDigitizer, M_GRAB_EXPOSURE_SOURCE+M_TIMER1, M_CONTINUOUS);                      // Periodic è„šé¾‹ ç‰¢å•Š
        MdigControl(m_MilDigitizer, M_GRAB_EXPOSURE_TIME+M_TIMER1, nExposureTimer);                        //10000ns
        MdigControl(m_MilDigitizer, M_GRAB_EXPOSURE_TIME_DELAY+M_TIMER1,  nExposureTimerDelay);                 //10000ns    
        */
EdgeInspector_App/Grabber/SoliosControl.h
@@ -1,4 +1,4 @@

#pragma once
#include "Global_Define.h"
@@ -15,7 +15,7 @@
public:
    //////////////////////////////////////////////////////////////////////////
    // Initialization
    virtual BOOL    Initialize(void *pParam, int *pErrorCode,int iBoard=0);    // Grabber æª¬æ‰æ‹³
    virtual BOOL    Initialize(void *pParam, int *pErrorCode,int iBoard=0);    // Grabber æª¬æ‰æ‹³
    virtual BOOL    InitializeBuffer(void *pParam);
    //////////////////////////////////////////////////////////////////////////
    // Deinit
@@ -68,8 +68,8 @@
public:
    _GRABBER_INIT_PARAM_    m_Param;        
    
    MIL_ID            m_MilSystem;                    // ç„Šé›å¯¸ 1函荐
    MIL_ID            m_MilDigitizer;        // å¢¨çš‹æ‰¼ å‡½è
    MIL_ID            m_MilSystem;                    // ç„Šé›å¯¸ 1函荐
    MIL_ID            m_MilDigitizer;        // å¢¨çš‹æ‰¼ å‡½è
    MIL_ID            m_Milbufgrab[BUFFERING_SIZE_MAX];    
    DIGSTATUS        m_DigitizerStatus;        
    long            m_lBord;
@@ -77,8 +77,8 @@
    CCriticalSection    m_critical;
    int                    m_nEndFrameIdx;        // æ³…犁 Grab èŒ„ è
    int                    m_nStartFrameIdx;    // å•ŠåŽ˜ å·è´°å‚ˆä¿Š Grab茄 Frame狼 ç‰¢éƒ¸èƒ¶.
    int                    m_nEndFrameIdx;        // æ³…犁 Grab èŒ„ è
    int                    m_nStartFrameIdx;    // å•ŠåŽ˜ å·è´°å‚ˆä¿Š Grab茄 Frame狼 ç‰¢éƒ¸èƒ¶.
    int                    m_nSetBufferIdx;
    int                    m_nScanIndex;    
    int                    m_nAllocatedGrabBufSize;    
EdgeInspector_App/InterfaceManager.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "InterfaceManager.h"
#include "MulticamControl.h"
#include "RadientControl.h"
@@ -150,7 +150,7 @@
    return 0;
}
// End Signal阑 PLC俊辑 è‚‹ ç»™ç½é…’辑 Retry æŒèŒæ¾œ
// End Signal阑 PLC俊辑 è‚‹ ç»™ç½é…’辑 Retry æŒèŒæ¾œ
void CInterfaceManager::PLCSignalRetry(SEND_MESSAGE_SECTION emSection,InspectToControlSignal emSendSignal,enInterface_Send_Control emControlSignal)
{
    if(m_HardwareRecipe.m_nPLCSignalRetry <= 0)
@@ -505,7 +505,7 @@
    m_PostProcess.SetView((void*) m_pView);
    m_PostProcess.RunPostProcessing();
    // é¦†é›çŸ« Scan End è„šé¾‹ ç„Šéƒ´æ‰ å‚ˆä¿Š ç§¦æ‹Žå…·èŒ„促... Scan End è„šé¾‹ ç„Šå°˜é”­ Loading捞 è‚¯ä¸° æ•‘登搁 æ•‘焊郴瘤霸 é˜œå›šä¹æ¾œ..
    // é¦†é›çŸ« Scan End è„šé¾‹ ç„Šéƒ´æ‰ å‚ˆä¿Š ç§¦æ‹Žå…·èŒ„促... Scan End è„šé¾‹ ç„Šå°˜é”­ Loading捞 è‚¯ä¸° æ•‘登搁 æ•‘焊郴瘤霸 é˜œå›šä¹æ¾œ..
    m_bGlassLoadingEnd = FALSE;
    m_bPLCGlassLoading = FALSE;
@@ -1213,7 +1213,7 @@
    if(!m_strReserveRecipe.IsEmpty())
    {
        g_pLog->DisplayMessage(_T("Apply reserve Recipe Loading - [%s]"), m_strReserveRecipe);        
        if (LoadGlassRecipe(m_strReserveRecipe,TRUE))    // éžç¯® Recipe扼档 åˆ©ä¾© æŠ—距登绢 ä¹æ æ ä¿ƒçŸ« è‚ºçˆ¹èŒ„促.
        if (LoadGlassRecipe(m_strReserveRecipe,TRUE))    // éžç¯® Recipe扼档 åˆ©ä¾© æŠ—距登绢 ä¹æ æ ä¿ƒçŸ« è‚ºçˆ¹èŒ„促.
        {                    
            g_pLog->DisplayMessage(_T("Apply reserve Recipe Loading - [%s] : Success"), m_strReserveRecipe);
        }
@@ -1227,7 +1227,7 @@
        return FALSE;
    }    
    if (strRcp.CompareNoCase(m_GlassRecipe.GetRecipeName()) != 0)    // strRecipeName å®˜å·®æ è‚ºçˆ¹èŒ„促.
    if (strRcp.CompareNoCase(m_GlassRecipe.GetRecipeName()) != 0)    // strRecipeName å®˜å·®æ è‚ºçˆ¹èŒ„促.
    {            
        if (LoadGlassRecipe(strRcp,TRUE) == FALSE)            
        {
@@ -1393,7 +1393,7 @@
    BlVision_GetVisionRecipe()->setRecipeType(EI_VISION_RECIPE);
    BlVision_GetVisionRecipe()->init();
    for (int i = 0; i < nCount; i++) {        //设置分辨率
    for (int i = 0; i < nCount; i++) {        //设置分辨率
        DimensionDir eDir = (DimensionDir)(i);
        CBlSideData *pSide = BlVision_GetVisionRecipe()->getSideData(eDir);
@@ -1443,7 +1443,7 @@
    g_pLog->DisplayMessage( _T("CreateCamera Start!"));    
    //////////////////////////////////////////////////////////////////////////
    // Camera Handle ç§¯å·±.
    // Camera Handle ç§¯å·±.
    int            iCam;        
    BOOL        bRet = TRUE;
@@ -1540,7 +1540,7 @@
        int nErrorCode;        
        int nBoardId = iCam;
        // B5 4龋扁 æ‚¸æ³¼
        // B5 4龋扁 æ‚¸æ³¼
        g_pBase->m_strSBKLine = m_HardwareRecipe.GetLineID();
        g_pBase->m_strSBKLine.Append(_T("#"));
@@ -1855,6 +1855,8 @@
    FreeImage_Unload(bitmap);
    Unlock();
    return TRUE;
}
BOOL CInterfaceManager::SaveFullImageModern(CString strPath,LPBYTE lpOrigin,int nImgWidth,int nImgHeight,int iSide,int nStartY,int nQuality /*= 80*/)
@@ -1909,15 +1911,15 @@
    cvReleaseImageHeader(&pImg);
#else
    Lock();
    // åŽŸå§‹å›¾åƒæ•°æ®è½¬ cv::Mat
    // åŽŸå§‹å›¾åƒæ•°æ®è½¬ cv::Mat
    cv::Mat origin(nImgHeight, nImgWidth, CV_8UC1, lpOrigin + (nImgWidth * nStartY));
    // ç¼©æ”¾å›¾åƒ
    // ç¼©æ”¾å›¾åƒ
    cv::Size szNew(static_cast<int>(nImgWidth * dRatio), static_cast<int>(nImgHeight * dRatio));
    cv::Mat resized;
    cv::resize(origin, resized, szNew, 0, 0, cv::INTER_LINEAR);
    // è®¾ç½® JPEG åŽ‹ç¼©å‚æ•°
    // è®¾ç½® JPEG åŽ‹ç¼©å‚æ•°
    std::vector<int> params = {
        cv::IMWRITE_JPEG_QUALITY,
        nQuality
@@ -2029,7 +2031,7 @@
        strPath.Append(_T("_NG"));
    }
#else
    // åŠ è½½ç°åº¦å›¾åƒ
    // åŠ è½½ç°åº¦å›¾åƒ
    std::string strFilename = CT2A(strPath);
    cv::Mat img = cv::imread(strFilename, cv::IMREAD_GRAYSCALE);
@@ -2057,7 +2059,7 @@
            nHeight = img.rows;
        }
        else {
            // æŒ‰æ¯”例缩放
            // æŒ‰æ¯”例缩放
            const double dRatio = 1.0 - static_cast<double>(IMAGE_COMPRESSRATIO) / 100.0;
            int newWidth = static_cast<int>(img.cols / dRatio);
            int newHeight = static_cast<int>(img.rows / dRatio);
EdgeInspector_App/InterfaceManager.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "Global_Define.h"
#include "EdgeInspector_AppView.h"
EdgeInspector_App/LanguageControl.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "LanguageControl.h"
#include <fstream>
#include <iostream>
@@ -47,7 +47,7 @@
    char lineBuffer[1024];
    char seps[]="=\n";    //备盒磊
    char seps[]="=\n";    //备盒磊
    char* pTemp;
    char* pContext;
@@ -64,10 +64,10 @@
        BSTR bstrWide; 
        char* pszAnsi; 
        int nLength; 
        nLength = MultiByteToWideChar(CP_UTF8, 0, lineBuffer, strlen(lineBuffer) + 1, NULL, NULL);
        nLength = MultiByteToWideChar(CP_UTF8, 0, lineBuffer, (int)(strlen(lineBuffer) + 1), NULL, NULL);
        bstrWide = SysAllocStringLen(NULL, nLength);
        MultiByteToWideChar(CP_UTF8, 0, lineBuffer, strlen(lineBuffer) + 1, bstrWide, nLength);
        MultiByteToWideChar(CP_UTF8, 0, lineBuffer, (int)(strlen(lineBuffer) + 1), bstrWide, nLength);
        nLength = WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, NULL, 0, NULL, NULL);
        pszAnsi = new char[nLength];
@@ -112,7 +112,7 @@
    char lineBuffer[1024];
    char seps[]="=\n";    //备盒磊
    char seps[]="=\n";    //备盒磊
    
    char* pTemp;
    char* pContext;
@@ -129,10 +129,10 @@
        BSTR bstrWide; 
        char* pszAnsi; 
        int nLength; 
        nLength = MultiByteToWideChar(CP_UTF8, 0, lineBuffer, strlen(lineBuffer) + 1, NULL, NULL);
        nLength = MultiByteToWideChar(CP_UTF8, 0, lineBuffer, (int)(strlen(lineBuffer) + 1), NULL, NULL);
        bstrWide = SysAllocStringLen(NULL, nLength);
        MultiByteToWideChar(CP_UTF8, 0, lineBuffer, strlen(lineBuffer) + 1, bstrWide, nLength);
        MultiByteToWideChar(CP_UTF8, 0, lineBuffer, (int)(strlen(lineBuffer) + 1), bstrWide, nLength);
        nLength = WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, NULL, 0, NULL, NULL);
        pszAnsi = new char[nLength];
@@ -177,7 +177,7 @@
    char lineBuffer[1024];
    char seps[]="=\n";    //备盒磊
    char seps[]="=\n";    //备盒磊
    //char* pTemp;
    //char* pContext;
@@ -194,10 +194,10 @@
        BSTR bstrWide; 
        char* pszAnsi; 
        int nLength; 
        nLength = MultiByteToWideChar(CP_UTF8, 0, lineBuffer, strlen(lineBuffer) + 1, NULL, NULL);
        nLength = MultiByteToWideChar(CP_UTF8, 0, lineBuffer, (int)(strlen(lineBuffer) + 1), NULL, NULL);
        bstrWide = SysAllocStringLen(NULL, nLength);
        MultiByteToWideChar(CP_UTF8, 0, lineBuffer, strlen(lineBuffer) + 1, bstrWide, nLength);
        MultiByteToWideChar(CP_UTF8, 0, lineBuffer, (int)(strlen(lineBuffer) + 1), bstrWide, nLength);
        nLength = WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, NULL, 0, NULL, NULL);
        pszAnsi = new char[nLength];
@@ -254,7 +254,7 @@
    char lineBuffer[1024];
    char seps[]="=\n";    //备盒磊
    char seps[]="=\n";    //备盒磊
    //char* pTemp;
    //char* pContext;
@@ -274,7 +274,7 @@
        nLength = MultiByteToWideChar(CP_UTF8, 0, lineBuffer, strlen(lineBuffer) + 1, NULL, NULL); 
        bstrWide = SysAllocStringLen(NULL, nLength);
        MultiByteToWideChar(CP_UTF8, 0, lineBuffer, strlen(lineBuffer) + 1, bstrWide, nLength);
        MultiByteToWideChar(CP_UTF8, 0, lineBuffer, (int)(strlen(lineBuffer) + 1), bstrWide, nLength);
        nLength = WideCharToMultiByte(CP_ACP, 0, bstrWide, -1, NULL, 0, NULL, NULL);
        pszAnsi = new char[nLength];
EdgeInspector_App/LanguageControl.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "Config.h"
#include "Global_Define.h"
EdgeInspector_App/License/Worker_UpdateLicense.cpp
@@ -1,4 +1,4 @@
#include "stdafx.h"
#include "stdafx.h"
#include "Worker_UpdateLicense.h"
#ifdef _DEBUG
@@ -9,22 +9,22 @@
#pragma comment(lib,"l_mega64.lib")
#endif
// çš‹å•Šé æ‰¼æžå®çŸ¾åºœ å¯‡ä½• çªƒè æ€¥æ”« çŸ«ç´¯
// çš‹å•Šé æ‰¼æžå®çŸ¾åºœ å¯‡ä½• çªƒè æ€¥æ”« çŸ«ç´¯
#ifdef __cplusplus                        
extern "C" {
#endif
    extern unsigned int  lock_init_usb(unsigned int op1);        // çš‹å•Šé æ²¤ç¥¸
    extern unsigned int  lock_init_usb(unsigned int op1);        // çš‹å•Šé æ²¤ç¥¸
    extern unsigned char lock_write(unsigned char op1, char op2);
    extern unsigned char lock_read(unsigned char op1);
    extern unsigned int  lock_boot_cnt(void);        // ä½•æ³¼ å†‰è æŽ˜æ‰
    extern unsigned int  lock_boot_cnt(void);        // ä½•æ³¼ å†‰è æŽ˜æ‰
    extern unsigned char lock_version(void);
    extern unsigned char lock_sn(char);                // çš‹å•Šé ç»Šèœ¡é”…龋
    extern unsigned char lock_check(void);            // çš‹å•Šé ç²®çЁ å’¯ä½•甫 ç‹ç¦ç»Š åŸƒçªœæ´’ çœ‰å†œ
    extern unsigned char lock_sn(char);                // çš‹å•Šé ç»Šèœ¡é”…龋
    extern unsigned char lock_check(void);            // çš‹å•Šé ç²®çЁ å’¯ä½•甫 ç‹ç¦ç»Š åŸƒçªœæ´’ çœ‰å†œ
    extern int lock_write_ex(int op1, int op2);
    extern int lock_read_ex(int op1);
    extern BOOL lock_receive(void);
    // æžå‚ˆ æ»šå‚ˆè‹ž é¾‹åˆ¸å·± èœ¡ç˜¤ç”« å›°èŒ„ çªƒè, è„šç—¹è¯€çœ‰ç‰¢ ç‰ˆå¿« é…’贰狼 çªƒèç»° è¤ä¾©çªç˜¤ ä»˜æŠ€å¤¸.
    // æžå‚ˆ æ»šå‚ˆè‹ž é¾‹åˆ¸å·± èœ¡ç˜¤ç”« å›°èŒ„ çªƒè, è„šç—¹è¯€çœ‰ç‰¢ ç‰ˆå¿« é…’贰狼 çªƒèç»° è¤ä¾©çªç˜¤ ä»˜æŠ€å¤¸.
    extern unsigned char lock_auto(char op1);
    extern unsigned char lock_func0(unsigned char op1, unsigned char op2);
    extern unsigned char lock_func1(unsigned char op1, unsigned char op2);
@@ -34,7 +34,7 @@
#ifdef __cplusplus                        
}
#endif
//  çš‹å•Šé æ‰¼æžå®çŸ¾åºœ å¯‡ä½• çªƒè æ€¥æ”« åœº
//  çš‹å•Šé æ‰¼æžå®çŸ¾åºœ å¯‡ä½• çªƒè æ€¥æ”« åœº
CWorker_UpdateLicense::CWorker_UpdateLicense(int nIndex, IWorkerUpdateLicense2Parent *pIWUL2P, DWORD dwTick) 
    : m_nIndex(nIndex), m_pIWUL2P(pIWUL2P), m_dwTick(dwTick)
@@ -53,7 +53,7 @@
{
    if (m_bUpdate) return FALSE;
    //Read èƒ¶é¥­é› ç§¯å·±
    //Read èƒ¶é¥­é› ç§¯å·±
    m_bUpdate = TRUE;
    AfxBeginThread(CWorker_UpdateLicense::UpdateLicense,(LPVOID)(this));
@@ -95,7 +95,7 @@
void CWorker_UpdateLicense::Update_License()
{
    ////////////////////// USB侩 çš‹å•Šé å…«è¤é£Žå‡­ çŸ«ç´¯
    ////////////////////// USB侩 çš‹å•Šé å…«è¤é£Žå‡­ çŸ«ç´¯
    DWORD64 dwTick = GetTickCount64();
    m_sStatus.Reset();
@@ -107,16 +107,16 @@
    m_sStatus.expTime = tmpTime;
    return;
    m_sStatus.nKeyStatus = LicenseKey_NotConnected; // æ¥·æ¬ æ•‘凳
    m_sStatus.nUsbID = lock_init_usb(8); // æ¥·æ¬ çœ‰å†œ
    m_sStatus.nKeyStatus = LicenseKey_NotConnected; // æ¥·æ¬ æ•‘凳
    m_sStatus.nUsbID = lock_init_usb(8); // æ¥·æ¬ çœ‰å†œ
    if (0 == m_sStatus.nUsbID)
    {
        m_pIWUL2P->IWUL2P_LicenceStatus(m_nIndex, m_sStatus);
        return;
    }
    m_sStatus.nKeyStatus = LicenseKey_NotCertified; // ç‰¢åˆ˜ æ•‘凳
    if (0 != lock_check()) // ç‰¢åˆ˜ çœ‰å†œ
    m_sStatus.nKeyStatus = LicenseKey_NotCertified; // ç‰¢åˆ˜ æ•‘凳
    if (0 != lock_check()) // ç‰¢åˆ˜ çœ‰å†œ
    {
        m_pIWUL2P->IWUL2P_LicenceStatus(m_nIndex, m_sStatus);
        return;
@@ -132,9 +132,9 @@
    }
    m_sStatus.strSerialNo = szTemp;
    m_sStatus.nKeyStatus = LicenseKey_NotActivated; // åŠå·±æ‹³ æ•‘凳
    m_sStatus.nKeyStatus = LicenseKey_NotActivated; // åŠå·±æ‹³ æ•‘凳
    // TIME Ã¼Å©
    // TIME çœ‰å†œ
    int pMemData[16] = { 0 };
    CString strTemp;
    for (int i = 0; i < 16; i++)
@@ -194,7 +194,7 @@
    if (spanTime.GetTotalSeconds() > 0)
    {
        m_sStatus.nKeyStatus = LicenseKey_Activated; // åŠå·±æ‹³å‡³
        m_sStatus.nKeyStatus = LicenseKey_Activated; // åŠå·±æ‹³å‡³
        m_pIWUL2P->IWUL2P_LicenceStatus(m_nIndex, m_sStatus);
        return;
    }
EdgeInspector_App/License/Worker_UpdateLicense.h
@@ -1,10 +1,10 @@
#pragma once
#pragma once
enum LicenseKey_Status {
    LicenseKey_NotConnected = 0,    // æ¥·æ¬ æ•‘凳
    LicenseKey_NotCertified,        // ç‰¢åˆ˜ æ•‘凳
    LicenseKey_NotActivated,        // å’€èæµ·æžè®° æ•‘凳
    LicenseKey_Activated            // å’€èæµ·æžè®° å‡³
    LicenseKey_NotConnected = 0,    // æ¥·æ¬ æ•‘凳
    LicenseKey_NotCertified,        // ç‰¢åˆ˜ æ•‘凳
    LicenseKey_NotActivated,        // å’€èæµ·æžè®° æ•‘凳
    LicenseKey_Activated            // å’€èæµ·æžè®° å‡³
};
struct SLicenseStatus
EdgeInspector_App/LicenseChecker.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "LicenseChecker.h"
EdgeInspector_App/LicenseChecker.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "Worker_UpdateLicense.h"
class CLicenseChecker : public IWorkerUpdateLicense2Parent
EdgeInspector_App/Light/ExternLightControl.cpp
@@ -1,4 +1,4 @@
// ExternLightControl.cpp: implementation of the CExternLightControl class.
// ExternLightControl.cpp: implementation of the CExternLightControl class.
//
//////////////////////////////////////////////////////////////////////
EdgeInspector_App/Light/ExternLightControl.h
@@ -1,4 +1,4 @@
// ExternLightControl.h: interface for the CExternLightControl class.
// ExternLightControl.h: interface for the CExternLightControl class.
//
//////////////////////////////////////////////////////////////////////
EdgeInspector_App/Light/ExternLightControlAKPNV.cpp
@@ -1,4 +1,4 @@

#include "stdafx.h"
#include "ExternLightControlAKPNV.h"
EdgeInspector_App/Light/ExternLightControlAKPNV.h
@@ -1,4 +1,4 @@

#pragma once
#if _MSC_VER > 1000
EdgeInspector_App/Light/ExternLightControlLCP.cpp
@@ -1,4 +1,4 @@

#include "stdafx.h"
#include "ExternLightControlLCP.h"
EdgeInspector_App/Light/ExternLightControlLCP.h
@@ -1,4 +1,4 @@

#pragma once
#if _MSC_VER > 1000
EdgeInspector_App/Light/LightManager.cpp
@@ -1,4 +1,4 @@

#include "StdAfx.h"
#include "ExternLightControlLCP.h"
#include "ExternLightControlAKPNV.h"
@@ -99,13 +99,13 @@
        if(pLingControl->OpenControl(pLight->m_nPort) == TRUE)
        {
            g_pLog->DisplayMessage(_T("Light controller %s connection success : Port[%d]"),strMsg,pLight->m_nPort);
            //TRACE("炼疙 %s æ¥·æ¬ å·±å‚ : Port[%d]\n",strMsg,pLight->m_nPort);
            //TRACE("炼疙 %s æ¥·æ¬ å·±å‚ : Port[%d]\n",strMsg,pLight->m_nPort);
            nOldPort = pLight->m_nPort;
        }
        else
        {
            g_pLog->DisplayMessage(_T("Light controller %s connection fail : Port[%d]"),strMsg,pLight->m_nPort);
            //TRACE("炼疙 %s æ¥·æ¬ è§’菩 : Port[%d]\n",strMsg,pLight->m_nPort);
            //TRACE("炼疙 %s æ¥·æ¬ è§’菩 : Port[%d]\n",strMsg,pLight->m_nPort);
        }
        m_vecLightControl.push_back(pLingControl);        
EdgeInspector_App/Light/LightManager.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include <vector>
#include "ExternLightControl.h"
@@ -25,7 +25,7 @@
protected:
    std::vector<CExternLightControl *>    m_vecLightControl;        
    //CConfig                    m_ConfigLightValue;        // é¥­çŸ«ä¹”俊辑 åŒ…府窍磊... ç‚¼ç–™ æ±²æ²¥è”¼é˜‘ æ‰æ’…窍绰 Config File
    //CConfig                    m_ConfigLightValue;        // é¥­çŸ«ä¹”俊辑 åŒ…府窍磊... ç‚¼ç–™ æ±²æ²¥è”¼é˜‘ æ‰æ’…窍绰 Config File
    CWnd                    *m_pParents;        
    CHardwareSettings        *m_pHardwareSetting;    
EdgeInspector_App/MainFrm.cpp
@@ -1,5 +1,5 @@
// MainFrm.cpp : CMainFrame åŠªè´°èƒ¶ç‹¼ å¤‡æ³…

// MainFrm.cpp : CMainFrame åŠªè´°èƒ¶ç‹¼ å¤‡æ³…
//
#include "stdafx.h"
@@ -29,7 +29,7 @@
    ON_WM_GETMINMAXINFO()
END_MESSAGE_MAP()
// CMainFrame ç§¯å·±/家戈
// CMainFrame ç§¯å·±/家戈
CMainFrame::CMainFrame()
{
@@ -77,10 +77,10 @@
    return TRUE;
}
// CMainFrame çš‹çŸ«ç˜¤ è´¸åºœæ‰
// CMainFrame çš‹çŸ«ç˜¤ è´¸åºœæ‰
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Š æ£º/肚绰 æ‰å¤¯è”¼é˜‘ é¾‹å…é’¦èªä¿ƒ.
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Š æ£º/肚绰 æ‰å¤¯è”¼é˜‘ é¾‹å…é’¦èªä¿ƒ.
    //CFrameWndEx::OnGetMinMaxInfo(lpMMI);
    lpMMI->ptMinTrackSize.x = TOTAL_WINDOW_SIZE_X;
@@ -90,7 +90,7 @@
    lpMMI->ptMaxTrackSize.y = TOTAL_WINDOW_SIZE_Y;
}
// CMainFrame æŸ³çªœ
// CMainFrame æŸ³çªœ
#ifdef _DEBUG
void CMainFrame::AssertValid() const
@@ -105,7 +105,7 @@
#endif //_DEBUG
// CMainFrame çš‹çŸ«ç˜¤ è´¸åºœæ‰
// CMainFrame çš‹çŸ«ç˜¤ è´¸åºœæ‰
void CMainFrame::SetView(CEdgeInspector_AppView    *pView)
{
    m_pView = pView;
@@ -200,7 +200,7 @@
    if (PathFileExists(strExePath) && PathFileExists(strConfigPath)) {
        LPCTSTR pszExeName = PathFindFileName(strExePath);
        // åŽ»æŽ‰ .exe,并杀死进程
        // åŽ»æŽ‰ .exe,并杀死进程
        TCHAR szNameWithoutExt[MAX_PATH] = { 0 };
        _tcscpy_s(szNameWithoutExt, pszExeName);
        PathRemoveExtension(szNameWithoutExt);
@@ -220,7 +220,7 @@
    if (PathFileExists(strExePath) && PathFileExists(strConfigPath)) {
        LPCTSTR pszExeName = PathFindFileName(strExePath);
        // åŽ»æŽ‰ .exe,并杀死进程
        // åŽ»æŽ‰ .exe,并杀死进程
        TCHAR szNameWithoutExt[MAX_PATH] = { 0 };
        _tcscpy_s(szNameWithoutExt, pszExeName);
        PathRemoveExtension(szNameWithoutExt);
@@ -307,7 +307,7 @@
{
    m_strReserveRecipe.Empty();
    if(!IsScanNow())        // å…«è¤ å
    if(!IsScanNow())        // å…«è¤ å
    {                
        if(LoadGlassRecipe(strRecipe,TRUE) == TRUE)
        {
@@ -510,7 +510,7 @@
    g_pBase->m_eProcessMode = PROC_MODE_SIMULATION_ONESIDE;
    m_eManualInspectSide = eDim;
    // çƒ™çŸ«è‚º é˜œæ¾œ
    // çƒ™çŸ«è‚º é˜œæ¾œ
    //return TRUE;
    AfxBeginThread(ManualInspectProcess,this);
EdgeInspector_App/MainFrm.h
@@ -1,5 +1,5 @@
// MainFrm.h : CMainFrame åŠªè´°èƒ¶ç‹¼ ç‰¢ç£å…¶æžèƒ¶

// MainFrm.h : CMainFrame åŠªè´°èƒ¶ç‹¼ ç‰¢ç£å…¶æžèƒ¶
//
#pragma once
@@ -12,21 +12,21 @@
                  , public IDisplyMessage2Parent
{
    
protected: // serialization俊辑父 çˆ¶ç”¸ç»¢ç¬¼èªä¿ƒ.
protected: // serialization俊辑父 çˆ¶ç”¸ç»¢ç¬¼èªä¿ƒ.
    CMainFrame();
    DECLARE_DYNCREATE(CMainFrame)
// æ¼‚己涝聪促.
// æ¼‚己涝聪促.
public:
// ç´¯è¯€æ¶èªä¿ƒ.
// ç´¯è¯€æ¶èªä¿ƒ.
public:
// çŠæ²¥ç‹¼æ¶èªä¿ƒ.
// çŠæ²¥ç‹¼æ¶èªä¿ƒ.
public:
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
// å¤‡æ³…涝聪促.
// å¤‡æ³…涝聪促.
public:
    virtual ~CMainFrame();
#ifdef _DEBUG
@@ -65,7 +65,7 @@
    void                SetRegistryRcpName(CString strRecipe);
    void                ApplyViewRecipeSettingss();
// ç§¯å·±ç­‰ çš‹çŸ«ç˜¤ ç”˜ çªƒè
// ç§¯å·±ç­‰ çš‹çŸ«ç˜¤ ç”˜ çªƒè
protected:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI);    
EdgeInspector_App/MilControl_Common.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "mil.h"
@@ -13,9 +13,9 @@
{
    int nJobIndex;
    int nSKipFrame;
    int status;            // æ³…犁 æƒ‘怕... // M_STOP , M_START , M_FREE_START
    int nCount;            // ä½¬ç¯® æ‰¼ç‰¢è...
    int nIndex;            // æžå›ºç˜¤ æ»šæ¬º ç‰¢éƒ¸èƒ¶
    int status;            // æ³…犁 æƒ‘怕... // M_STOP , M_START , M_FREE_START
    int nCount;            // ä½¬ç¯® æ‰¼ç‰¢è...
    int nIndex;            // æžå›ºç˜¤ æ»šæ¬º ç‰¢éƒ¸èƒ¶
    int nDisplayFrame;
    int nResetFrame;
}DIGSTATUS, *PDIGSTATUS;
EdgeInspector_App/PLC/Control_Interface.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "Control_Interface.h"
#include "Config.h"
#include "SharedMemoryDefine.h"
@@ -70,17 +70,17 @@
{
    m_bConnect = FALSE;
    //4k å†œæ‰ç‹¼ å‚èœ¡ çš‹è‘›åºœ é¢‡è€ ç§¯å·±
    //4k å†œæ‰ç‹¼ å‚èœ¡ çš‹è‘›åºœ é¢‡è€ ç§¯å·±
    m_hMap = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE
        , 0, SHARED_MEMORY_SIZE, _T("MX_COMPONENT_SHARED_MEMORY"));
    //父老 æžå›º ç§¯å·±ç­‰ æŒ‰çœ‰å•Š ä¹ä¿ƒæ æžå›º Connector啊 ç´¯æ‚¼ å..
    //父老 æžå›º ç§¯å·±ç­‰ æŒ‰çœ‰å•Š ä¹ä¿ƒæ æžå›º Connector啊 ç´¯æ‚¼ å..
    if (::GetLastError() == ERROR_ALREADY_EXISTS)
    {
        //捞固 ç§¯å·±ç­‰ æŒ‰çœ‰å•Š ä¹ä¿ƒæ ç§¯å·±æž é…’聪扼 å·é”¹æ è‚º è§’青
        //捞固 ç§¯å·±ç­‰ æŒ‰çœ‰å•Š ä¹ä¿ƒæ ç§¯å·±æž é…’聪扼 å·é”¹æ è‚º è§’青
        m_hMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,_T("MX_COMPONENT_SHARED_MEMORY"));
    }
    else//父老 ç§¯å·±ç­‰ æŒ‰çœ‰å•Š ç»ä¿ƒæ æ²¥æƒ‘ æ‚¼ç´¯çªç˜¤ è‡¼ç»°ä¿ƒ.
    else//父老 ç§¯å·±ç­‰ æŒ‰çœ‰å•Š ç»ä¿ƒæ æ²¥æƒ‘ æ‚¼ç´¯çªç˜¤ è‡¼ç»°ä¿ƒ.
        g_pLog->DisplayMessage(_T("Error : No defect PLCConnector program."));
    if (m_hMap == NULL)
@@ -89,7 +89,7 @@
        return FALSE;
    }
    //傍蜡皋葛府 ç”˜ä¿
    //傍蜡皋葛府 ç”˜ä¿
    m_pSharedMemory = (char*)::MapViewOfFile(m_hMap, FILE_MAP_ALL_ACCESS, 0, 0, SHARED_MEMORY_SIZE);
    if (m_pSharedMemory == NULL)
@@ -98,7 +98,7 @@
        return FALSE;
    }
    //0栏肺 æª¬æ‰æ‹³
    //0栏肺 æª¬æ‰æ‹³
    ZeroMemory(m_pSharedMemory,SHARED_MEMORY_SIZE);    
    m_bConnect = TRUE;
@@ -433,7 +433,7 @@
    else
        memset(m_pSharedMemory+iAddr, 0x00, nWORDSize);
    //葛电 è”¼é˜‘ ç›²å†µ æŒç¯® é¥¶ PLCConnector俊霸 PLC æž—家俊 è”¼é˜‘ åˆ©æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    //葛电 è”¼é˜‘ ç›²å†µ æŒç¯® é¥¶ PLCConnector俊霸 PLC æž—家俊 è”¼é˜‘ åˆ©æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    m_pSharedMemory[iStartAddr] = 1;
    return true;
@@ -491,7 +491,7 @@
    iAddr+=4;
    memcpy(m_pSharedMemory+iAddr, WriteData, nWORDSize*2);
    //葛电 è”¼é˜‘ ç›²å†µ æŒç¯® é¥¶ PLCConnector俊霸 PLC æž—家俊 è”¼é˜‘ åˆ©æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    //葛电 è”¼é˜‘ ç›²å†µ æŒç¯® é¥¶ PLCConnector俊霸 PLC æž—家俊 è”¼é˜‘ åˆ©æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    m_pSharedMemory[iStartAddr] = 1;
    return true;
}
@@ -527,7 +527,7 @@
    iAddr+=2;
    memcpy(m_pSharedMemory+iAddr, &msecTimer, 4);
    //葛电 è”¼é˜‘ ç›²å†µ æŒç¯® é¥¶ PLCConnector俊霸 PLC æž—家俊 è”¼é˜‘ åˆ©æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    //葛电 è”¼é˜‘ ç›²å†µ æŒç¯® é¥¶ PLCConnector俊霸 PLC æž—家俊 è”¼é˜‘ åˆ©æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    m_pSharedMemory[iStartAddr] = 1;
    return true;
}
@@ -555,7 +555,7 @@
    iAddr+=2;
    memcpy(m_pSharedMemory+iAddr, &msecTimer, 4);
    //葛电 è”¼é˜‘ ç›²å†µ æŒç¯® é¥¶ PLCConnector俊霸 PLC æž—家俊 è”¼é˜‘ åˆ©æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    //葛电 è”¼é˜‘ ç›²å†µ æŒç¯® é¥¶ PLCConnector俊霸 PLC æž—家俊 è”¼é˜‘ åˆ©æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    m_pSharedMemory[iStartAddr] = 1;
    return true;
}
@@ -668,7 +668,7 @@
    return TRUE;
}
// èƒ¶é£˜å‚… -> 16柳荐
// èƒ¶é£˜å‚… -> 16柳荐
BOOL CControl_Interface::StrToHex(CHAR* pchData, CHAR* pchDataSrc, INT nLength, BOOL bWordReverse)
{
    //static UCHAR saucHex[] = "0123456789ABCDEF";
@@ -950,16 +950,16 @@
    if ( strlength > 6) strlength = 6;    
    if( nWORDSize > 1000) nWORDSize = 1000;
    //傍蜡 çš‹è‘›åºœä¿Š æ‹±å¹…单捞磐甫 ä½¬æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    //傍蜡 çš‹è‘›åºœä¿Š æ‹±å¹…单捞磐甫 ä½¬æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    ZeroMemory(m_pSharedMemory + PLC_READ_LONGDATA_ADDRESS_1, (PLC_READ_LONGDATA_LENGTH_1)-(PLC_READ_LONGDATA_ADDRESS_1));
    memcpy(m_pSharedMemory+PLC_READ_LONGDATA_ADDRESS_1, strAddress,strlength*sizeof(TCHAR));
    memcpy(m_pSharedMemory+PLC_READ_LONGDATA_LENGTH_1, &nWORDSize,2);
    memset(m_pSharedMemory+PLC_READ_LONGDATA_SIGNAL_1, 0x01, 1);
    //单捞磐甫 ä¿ƒ ä½¬ç»Š å‚èœ¡çš‹è‘›åºœ åˆ©é˜‘ é”­é³–瘤 æ‰ä¿ƒèµ´ä¿ƒ.
    //单捞磐甫 ä¿ƒ ä½¬ç»Š å‚èœ¡çš‹è‘›åºœ åˆ©é˜‘ é”­é³–瘤 æ‰ä¿ƒèµ´ä¿ƒ.
    ::WaitForSingleObject(m_ReadEvent,2000);
    //肯丰啊 ç™»æ ç§¦å¯¸ è”¼é˜‘ ä¿ƒçŸ« ä½¬ç»¢æŸ¯ä¿ƒ.
    //肯丰啊 ç™»æ ç§¦å¯¸ è”¼é˜‘ ä¿ƒçŸ« ä½¬ç»¢æŸ¯ä¿ƒ.
    //pData = m_pSharedMemory+PLC_READ_LONGDATA_VALUE;
    memcpy(pData, m_pSharedMemory + PLC_READ_LONGDATA_VALUE_1, nWORDSize * 2);
EdgeInspector_App/PLC/Control_Interface.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "Thread_ControlIF.h"
#include "TransDataManager.h"
@@ -177,8 +177,8 @@
    char                *m_pSharedMemory;            
    ST_PLC_RECIVE_01    m_Rcv01;
    ST_PLC_SEND_01        m_Send01,m_SentBack01;
    int                    m_nSignal;            //Signal æ¶ä»¿
    int                    m_nLongSignal;            //Signal æ¶ä»¿
    int                    m_nSignal;            //Signal æ¶ä»¿
    int                    m_nLongSignal;            //Signal æ¶ä»¿
    CEvent                m_ReadEvent;
    double                m_dTickPrevTime;
EdgeInspector_App/PLC/Control_Interface_New.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "Control_Interface_New.h"
#include "Config.h"
#include "SharedMemoryDefine.h"
@@ -62,17 +62,17 @@
{
    m_bConnect = FALSE;
    //4k å†œæ‰ç‹¼ å‚èœ¡ çš‹è‘›åºœ é¢‡è€ ç§¯å·±
    //4k å†œæ‰ç‹¼ å‚èœ¡ çš‹è‘›åºœ é¢‡è€ ç§¯å·±
    m_hMap = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE
        , 0, SHARED_MEMORY_SIZE, _T("MX_COMPONENT_SHARED_MEMORY"));
    //父老 æžå›º ç§¯å·±ç­‰ æŒ‰çœ‰å•Š ä¹ä¿ƒæ æžå›º Connector啊 ç´¯æ‚¼ å..
    //父老 æžå›º ç§¯å·±ç­‰ æŒ‰çœ‰å•Š ä¹ä¿ƒæ æžå›º Connector啊 ç´¯æ‚¼ å..
    if (::GetLastError() == ERROR_ALREADY_EXISTS)
    {
        //捞固 ç§¯å·±ç­‰ æŒ‰çœ‰å•Š ä¹ä¿ƒæ ç§¯å·±æž é…’聪扼 å·é”¹æ è‚º è§’青
        //捞固 ç§¯å·±ç­‰ æŒ‰çœ‰å•Š ä¹ä¿ƒæ ç§¯å·±æž é…’聪扼 å·é”¹æ è‚º è§’青
        m_hMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,_T("MX_COMPONENT_SHARED_MEMORY"));
    }
    else//父老 ç§¯å·±ç­‰ æŒ‰çœ‰å•Š ç»ä¿ƒæ æ²¥æƒ‘ æ‚¼ç´¯çªç˜¤ è‡¼ç»°ä¿ƒ.
    else//父老 ç§¯å·±ç­‰ æŒ‰çœ‰å•Š ç»ä¿ƒæ æ²¥æƒ‘ æ‚¼ç´¯çªç˜¤ è‡¼ç»°ä¿ƒ.
        g_pLog->DisplayMessage(_T("Error : No defect PLCConnector program."));
    if (m_hMap == NULL)
@@ -81,7 +81,7 @@
        return FALSE;
    }
    //傍蜡皋葛府 ç”˜ä¿
    //傍蜡皋葛府 ç”˜ä¿
    m_pSharedMemory = (char*)::MapViewOfFile(m_hMap, FILE_MAP_ALL_ACCESS, 0, 0, SHARED_MEMORY_SIZE);
    if (m_pSharedMemory == NULL)
@@ -90,7 +90,7 @@
        return FALSE;
    }
    //0栏肺 æª¬æ‰æ‹³
    //0栏肺 æª¬æ‰æ‹³
    ZeroMemory(m_pSharedMemory,SHARED_MEMORY_SIZE);    
    m_bConnect = TRUE;
@@ -209,7 +209,7 @@
    iAddr+=4;
    memcpy(m_pSharedMemory+iAddr, WriteData, nWORDSize*2);
    //葛电 è”¼é˜‘ ç›²å†µ æŒç¯® é¥¶ PLCConnector俊霸 PLC æž—家俊 è”¼é˜‘ åˆ©æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    //葛电 è”¼é˜‘ ç›²å†µ æŒç¯® é¥¶ PLCConnector俊霸 PLC æž—家俊 è”¼é˜‘ åˆ©æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    m_pSharedMemory[iStartAddr] = 1;
    return true;
}
@@ -362,16 +362,16 @@
        break;
    }
    
    //傍蜡 çš‹è‘›åºœä¿Š æ‹±å¹…单捞磐甫 ä½¬æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    //傍蜡 çš‹è‘›åºœä¿Š æ‹±å¹…单捞磐甫 ä½¬æ¡£åºŸ è„šé¾‹ç”« ç„Šè¾°ä¿ƒ.
    ZeroMemory(m_pSharedMemory+nAddress,(nLength)-(nAddress));
    memcpy(m_pSharedMemory+nAddress, strAddress,strlength*sizeof(TCHAR));
    memcpy(m_pSharedMemory+nLength, &nWORDSize,2);
    memset(m_pSharedMemory+nSignal, 0x01, 1);
    //单捞磐甫 ä¿ƒ ä½¬ç»Š å‚èœ¡çš‹è‘›åºœ åˆ©é˜‘ é”­é³–瘤 æ‰ä¿ƒèµ´ä¿ƒ.
    //单捞磐甫 ä¿ƒ ä½¬ç»Š å‚èœ¡çš‹è‘›åºœ åˆ©é˜‘ é”­é³–瘤 æ‰ä¿ƒèµ´ä¿ƒ.
    ::WaitForSingleObject(m_ReadEvent,2000);
    //肯丰啊 ç™»æ ç§¦å¯¸ è”¼é˜‘ ä¿ƒçŸ« ä½¬ç»¢æŸ¯ä¿ƒ.
    //肯丰啊 ç™»æ ç§¦å¯¸ è”¼é˜‘ ä¿ƒçŸ« ä½¬ç»¢æŸ¯ä¿ƒ.
    //pData = m_pSharedMemory+PLC_READ_LONGDATA_VALUE;
    memcpy(pData, m_pSharedMemory+nValue, nWORDSize*2);
@@ -420,7 +420,7 @@
    return FALSE;
}
// èƒ¶é£˜å‚… -> 16柳荐
// èƒ¶é£˜å‚… -> 16柳荐
BOOL CControl_Interface_New::StrToHex(CHAR* pchData, CHAR* pchDataSrc, INT nLength, BOOL bWordReverse)
{
    //static UCHAR saucHex[] = "0123456789ABCDEF";
EdgeInspector_App/PLC/Control_Interface_New.h
@@ -1,16 +1,16 @@
#pragma once
#pragma once
#include "Thread_ControlIF.h"
#include "TransDataManager.h"
#include "BICommon.h"
// MINI LED EI, NOTCH (狐傅)
// MINI LED EI, NOTCH (狐傅)
// #define        MINI_LED_PLC_ADDR_SENDSIGNAL        2129
// #define        MINI_LED_PLC_TRASFERDATA_ADDR        2000
// #define        MINI_LED_PLC_ADDR_GLASS_JUDEMENT    2100
// #define        MINI_LED_PLC_ADDR_PROFILE_JUDEMENT    4300
// EI, NOTCH, RCUT (扁粮 BF)
// EI, NOTCH, RCUT (扁粮 BF)
#if MINI_LED
#define        EI_PLC_ADDR_SENDSIGNAL                2129
#define        EI_PLC_TRASFERDATA_ADDR                2000
EdgeInspector_App/Process/InspectCamera.cpp
ÎļþÌ«´ó
EdgeInspector_App/Process/InspectCamera.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "ThreadControl.h"
#include "DefectStorage.h"
@@ -59,7 +59,7 @@
    // 0. Start Line
    BOOL                CheckStartLineFrame(DimensionDir eDim,int iFrame);
    BOOL                FindGlassStartLine(DimensionDir emDim, stFrameIndex stFrame);
    BOOL                MakeNotchArea(DimensionDir emDim);    // çŸ«ç´¯æ€¥é˜‘ èŒ«æ æ Notch åº·å¼€é˜‘ å›ºåºœ çˆ¶ç”¸ç»¢ åˆç»°ä¿ƒ.
    BOOL                MakeNotchArea(DimensionDir emDim);    // çŸ«ç´¯æ€¥é˜‘ èŒ«æ æ Notch åº·å¼€é˜‘ å›ºåºœ çˆ¶ç”¸ç»¢ åˆç»°ä¿ƒ.
    // 1. Process Frame
    BOOL                ProcessFrame(int iThread,DimensionDir emDim, stFrameIndex stFrame);
@@ -137,7 +137,7 @@
    // 12. Exception Area Process
    BOOL                ExceptionArea_Process(int iThread,DimensionDir emDim, stFrameIndex stFrame);
    //13. è§†è§‰åŠŸèƒ½
    //13. è§†è§‰åŠŸèƒ½
    void FinallyVisionProc(DimensionDir eDim);
protected:    
EdgeInspector_App/Process/ThreadControl.cpp
@@ -1,4 +1,4 @@

#include "StdAfx.h"
#include "ThreadControl.h"
@@ -106,7 +106,7 @@
    m_nWorkingThread++;
    LeaveCriticalSection(&m_csWorkingEnd);
    Sleep(1);// çªç»° è€æž ç»æ æ  OnThreadEndAll æž é™é¥­é› ä¿ºè çˆ¶æ€’ é¾‹å…çžª è ä¹ä¿ƒ.
    Sleep(1);// çªç»° è€æž ç»æ æ  OnThreadEndAll æž é™é¥­é› ä¿ºè çˆ¶æ€’ é¾‹å…çžª è ä¹ä¿ƒ.
    if(m_pThreadWorker)
        return m_pThreadWorker->OnThreadRun(iThread, pInspectThread);
@@ -191,13 +191,13 @@
    {
        Sleep(1);
        count++;
        if(ms > 0)    // æŽªæ‰çŸ«åŸƒ åŠ›èŒ„æž ä¹æ æ.
        if(ms > 0)    // æŽªæ‰çŸ«åŸƒ åŠ›èŒ„æž ä¹æ æ.
        {
            if(count > ms)
                return FALSE; // æŽªæ‰çŸ«åŸƒ æ‚¼æ•‘ æ²¥æƒ‘ è¾†ä¸° ç»™çªç»Š åºœç•”.
                return FALSE; // æŽªæ‰çŸ«åŸƒ æ‚¼æ•‘ æ²¥æƒ‘ è¾†ä¸° ç»™çªç»Š åºœç•”.
        }
    }
    return TRUE;    // æ²¥æƒ‘ è¾†ä¸° çŠ¬ç‰¢.
    return TRUE;    // æ²¥æƒ‘ è¾†ä¸° çŠ¬ç‰¢.
}
BOOL CInspectThread::InitInstance()
EdgeInspector_App/Process/ThreadControl.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#define MAX_THREAD        1
@@ -31,7 +31,7 @@
    virtual ~CInspectThread();
    void SetWorker(IThreadWorker *pWorker){m_pWorker= pWorker;}
    BOOL StartThreadLoop(int iThread);    // æª¬æ‰
    BOOL StartThreadLoop(int iThread);    // æª¬æ‰
    void StartThreadWork(){m_bWorking= TRUE;}
    void StopThread();
@@ -60,8 +60,8 @@
class CThreadControl : IThreadWorker
{
    int                m_nThreadLoop;        // ç§¯å·±ç­‰ Thread Count
    int                m_nWorkingThread;    // æ‚¼ç´¯[累诀]阑 çŸ«ç´¯èŒ„ Thread Count
    int                m_nThreadLoop;        // ç§¯å·±ç­‰ Thread Count
    int                m_nWorkingThread;    // æ‚¼ç´¯[累诀]阑 çŸ«ç´¯èŒ„ Thread Count
    CInspectThread    *m_pThread;
    IThreadWorker    *m_pThreadWorker;
@@ -75,11 +75,11 @@
public:
    // 1. Thread ç£Šçœ‰ç‹¼ ç§¯å·±è‹ž å®¶æˆˆä¿Š åŒ…å’¯.
    // 1. Thread ç£Šçœ‰ç‹¼ ç§¯å·±è‹ž å®¶æˆˆä¿Š åŒ…å’¯.
    int    InitThreadControl(int nThread, IThreadWorker* pThreadWorker);
    BOOL ReleaseThreadControl();
    // 2. Thread Loop æ•‘俊辑 ç´¯è¯€ç‹¼ ç˜¤çŸ« å’¯ä½•父 ç‰§é£˜è´¹
    // 2. Thread Loop æ•‘俊辑 ç´¯è¯€ç‹¼ ç˜¤çŸ« å’¯ä½•父 ç‰§é£˜è´¹
    int    StartThreadControl();
    void StopThreadControl();
EdgeInspector_App/Recipe/GlassRecipe.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "GlassRecipe.h"
//////////////////////////////////////////////////////////////////////////
EdgeInspector_App/Recipe/GlassRecipe.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "Config.h"
#include "cv.h"
@@ -14,11 +14,11 @@
typedef struct tagJUDGEEDGE
{
    BOOL bError;            //俊矾 å’¯ä½•..
    int  nRefernce;            //  æ‰éœ–
    int  nTolPlus;            // +倾侩坷瞒
    int  nTolMinus;            // -倾侩坷瞒
    int  nSlant;            //荤急
    BOOL bError;            //俊矾 å’¯ä½•..
    int  nRefernce;            //  æ‰éœ–
    int  nTolPlus;            // +倾侩坷瞒
    int  nTolMinus;            // -倾侩坷瞒
    int  nSlant;            //荤急
}JUDGEEDGE, *PJUDGEEDGE;
typedef struct tagUserDefectArea
@@ -53,10 +53,10 @@
typedef struct tagEXECPTION_AREA
{
    int        nAreaType;
    CRect    rc;            // åº·å¼€ å›°æ‘¹ (Mark ç›”ç—¢)
    SIZE    szErrSize;  // æž åº·å¼€ä¿Šè¾‘ åˆ©ä¾©çžª Size
    int        nAppDefect; // åˆ©ä¾©çžª Defect è¾†å¹…
    int        nDetectLimitedArea;    // è¤ä¾©ç£Š æ±²æ²¥ ROI è¤ä¾© èœ¡å…¬
    CRect    rc;            // åº·å¼€ å›°æ‘¹ (Mark ç›”ç—¢)
    SIZE    szErrSize;  // æž åº·å¼€ä¿Šè¾‘ åˆ©ä¾©çžª Size
    int        nAppDefect; // åˆ©ä¾©çžª Defect è¾†å¹…
    int        nDetectLimitedArea;    // è¤ä¾©ç£Š æ±²æ²¥ ROI è¤ä¾© èœ¡å…¬
    void Init()
    {
@@ -126,9 +126,9 @@
public:
    TCHAR        m_strRecipeName[MAX_STRING_LENGTH];                    // é¥­çŸ«ä¹” æžæŠš.
    TCHAR        m_strRecipeFileName[MAX_STRING_LENGTH];                // é¥­ä¹”矫 é¢‡è€ç–™
    TCHAR        m_strRecipeFileNameBackUp[MAX_STRING_LENGTH];        // é¥­ä¹”矫 é¢‡è€ç–™
    TCHAR        m_strRecipeName[MAX_STRING_LENGTH];                    // é¥­çŸ«ä¹” æžæŠš.
    TCHAR        m_strRecipeFileName[MAX_STRING_LENGTH];                // é¥­ä¹”矫 é¢‡è€ç–™
    TCHAR        m_strRecipeFileNameBackUp[MAX_STRING_LENGTH];        // é¥­ä¹”矫 é¢‡è€ç–™
    int            m_nSoftRevision;
    CString        m_strComment;                                        // Comment
@@ -222,9 +222,9 @@
    BOOL WriteRecipe(CConfig *pFile, int nSideIdx, int nNotchIdx);
public:
    int       m_nGlassStartLine_pxl;    // Notch æ®¿åºŸ ä¸” é”­ Glass Start Line..
    CPoint m_ptTopMarkPos;            // Notch æ®¿åºŸ ä¸” é”­ Top Align Mark..
    CPoint m_ptBotMarkPos;            // Notch æ®¿åºŸ ä¸” é”­ Bot Align Mark..
    int       m_nGlassStartLine_pxl;    // Notch æ®¿åºŸ ä¸” é”­ Glass Start Line..
    CPoint m_ptTopMarkPos;            // Notch æ®¿åºŸ ä¸” é”­ Top Align Mark..
    CPoint m_ptBotMarkPos;            // Notch æ®¿åºŸ ä¸” é”­ Bot Align Mark..
    BOOL   m_bNotch_Use;
    CRect  m_rtNotch_Area_pxl;
@@ -258,8 +258,8 @@
    // Notch Circle
    int       m_nNotch_Circle_Count;
    BOOL   m_bNotch_Circle_Use[MAX_SIDE_NOTCH_CIRCLE_COUNT];
    CPoint m_ptNotch_Circle_TopMarkPos[MAX_SIDE_NOTCH_CIRCLE_COUNT];            // Notch Circle æ®¿åºŸ ä¸” é”­ Top Align Mark..
    CPoint m_ptNotch_Circle_BotMarkPos[MAX_SIDE_NOTCH_CIRCLE_COUNT];            // Notch Circle æ®¿åºŸ ä¸” é”­ Bot Align Mark..
    CPoint m_ptNotch_Circle_TopMarkPos[MAX_SIDE_NOTCH_CIRCLE_COUNT];            // Notch Circle æ®¿åºŸ ä¸” é”­ Top Align Mark..
    CPoint m_ptNotch_Circle_BotMarkPos[MAX_SIDE_NOTCH_CIRCLE_COUNT];            // Notch Circle æ®¿åºŸ ä¸” é”­ Bot Align Mark..
    CRect  m_rtNotch_Circle_Area_pxl[MAX_SIDE_NOTCH_CIRCLE_COUNT];
    double m_dNotch_Circle_Spec_Radius_um[MAX_SIDE_NOTCH_CIRCLE_COUNT];
    double m_dNotch_Circle_Spec_Radius_Min_um[MAX_SIDE_NOTCH_CIRCLE_COUNT];
@@ -330,7 +330,7 @@
    BOOL            WriteRecipe(CConfig *pFile, int nSideIdx);
public:    
    int                m_nSidePanelSize_um;        // Scan æç‹¼ æŠ€è‚º è§„æ°¢ å†œæ‰
    int                m_nSidePanelSize_um;        // Scan æç‹¼ æŠ€è‚º è§„æ°¢ å†œæ‰
    int                m_nFindStartEndLine_X_pxl;    // Start/End Find Pos X
    int                m_nFindStartEndLine_Threshold;
    int                m_nSideLineThreshold;
EdgeInspector_App/Recipe/HardwareSettings.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "HardwareSettings.h"
//////////////////////////////////////////////////////////////////////////
EdgeInspector_App/Recipe/HardwareSettings.h
@@ -1,11 +1,11 @@
#pragma once
#pragma once
#include "Config.h"
#include "Global_Define.h"
#define    HARDWARE_SETTING_PATH                _T("c:\\EdgeInspector_App\\Config\\HardwareSetting.cfg")        // cfg ç«‹è¾Ÿ ç‰ˆè‚ºæ±²æ²¥
#define    HARDWARE_SETTING_PATH                _T("c:\\EdgeInspector_App\\Config\\HardwareSetting.cfg")        // cfg ç«‹è¾Ÿ ç‰ˆè‚ºæ±²æ²¥
#define HARDWARE_SETTING_BACKUP_DIR_PATH    _T("c:\\EdgeInspector_App\\Config\\Backup")
#define    KEY_BASIC                            _T("Software\\EdgeInspector_App\\BASIC\\")                        // é¥­ç˜¤èƒ¶é£˜åºœ ç«‹è¾Ÿ ç‰ˆè‚ºæ±²æ²¥
#define    KEY_BASIC                            _T("Software\\EdgeInspector_App\\BASIC\\")                        // é¥­ç˜¤èƒ¶é£˜åºœ ç«‹è¾Ÿ ç‰ˆè‚ºæ±²æ²¥
#define MAX_CNC_COUNT                        6
#define MAX_NCUT_STAGE_COUNT                12
#define MAX_CCUT_STAGE_COUNT                1
EdgeInspector_App/Side_Data.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "Side_Data.h"
EdgeInspector_App/Side_Data.h
@@ -1,7 +1,7 @@
#pragma once
#pragma once
#include "Global_Define.h"
// å¼¥æŽª æ©‡é¥­çƒ™ 160, 1橇饭烙 1024, 256栏肺 å”±åºŠè¾‘ å…«è¤çªæ 1橇饭烙俊 4 = 640俺 æ²¥æ¡£
// å¼¥æŽª æ©‡é¥­çƒ™ 160, 1橇饭烙 1024, 256栏肺 å”±åºŠè¾‘ å…«è¤çªæ 1橇饭烙俊 4 = 640俺 æ²¥æ¡£
#define MAX_INSPECT_AREA_LIST    1024
class CSide_Data
@@ -20,7 +20,7 @@
    double                m_dPixelSizeX;
    double                m_dPixelSizeY;
    BOOL                m_bInspection_Complete;                    // å…«è¤ è‚¯ä¸° çŠ¬ç‰¢
    BOOL                m_bInspection_Complete;                    // å…«è¤ è‚¯ä¸° çŠ¬ç‰¢
    // Start Line
    BOOL                m_bFindGlassStartLine;
@@ -28,7 +28,7 @@
    int                    m_nGlassStartFrame;
    // Pre End Line
    int                    m_nPreGlassEndLine;                        // æŠ—惑登绰 End Line
    int                    m_nPreGlassEndLine;                        // æŠ—惑登绰 End Line
    int                    m_nPreGlassEndFrame;
    // End Line
@@ -74,11 +74,11 @@
    int                    m_nBotMarkToEdge_X_pxl;
    int                    m_nBotMarkToEdge_Y_pxl;
    // Scan Start锭 å›ºåºœ æ‹Œé­‚秦辑 é™ç£Š..
    // Scan Start锭 å›ºåºœ æ‹Œé­‚秦辑 é™ç£Š..
    double                m_dCamResolutionX;    
    double                m_dCamResolutionY;
    // Frame å–Š èŒ«ç¯® Side Line...
    // Frame å–Š èŒ«ç¯® Side Line...
    double                m_nSideLineFrame[MAX_IMAGE_FRAME];                // Frame Side Line
    double                m_nSide_Chamfer_LineFrame[MAX_IMAGE_FRAME];        // Frame Side Line
@@ -90,7 +90,7 @@
    int                    m_nSideInspectAreaCount[MAX_IMAGE_FRAME];
    CRect                m_rtSideInspectArea[MAX_IMAGE_FRAME][MAX_SIDE_INSPECT_AREA_COUNT];
    CRect                m_rtInspectArea_InsType[MAX_SIDE_INSPECT_TYPE][MAX_IMAGE_FRAME];        // å…«è¤ åº·å¼€
    CRect                m_rtInspectArea_InsType[MAX_SIDE_INSPECT_TYPE][MAX_IMAGE_FRAME];        // å…«è¤ åº·å¼€
    int                    m_nSideFilterLine_InsType[MAX_SIDE_INSPECT_TYPE][MAX_IMAGE_FRAME];        // Side Filter Line
    // Measure Dimension
@@ -187,7 +187,7 @@
    int                    m_nNgDefectCount;
    // Thread Processing..
    BOOL                m_nFrameThreadProc[MAX_IMAGE_FRAME];            // Thread啊 ç˜¤å”±åŸƒ Frame阑 çœ‰å†œçªç£Š..
    BOOL                m_nFrameThreadProc[MAX_IMAGE_FRAME];            // Thread啊 ç˜¤å”±åŸƒ Frame阑 çœ‰å†œçªç£Š..
    CCriticalSection    m_csFrameThread;
};
EdgeInspector_App/Thread/PriorityThread.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "PriorityThread.h"
#ifdef _DEBUG
EdgeInspector_App/Thread/PriorityThread.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "WorkThreadPool.h"
EdgeInspector_App/Thread/Thread_CheckSeq.cpp
@@ -1,4 +1,4 @@
// ProcPADThread.cpp : implementation file
// ProcPADThread.cpp : implementation file
//
#include "StdAfx.h"
@@ -28,7 +28,7 @@
{
    BOOL bReturn = TRUE;
    // Thread ç§¯å·± é¥¶ Thread èé’
    // Thread ç§¯å·± é¥¶ Thread èé’
    bReturn = CreateTimerThread(this);
    return bReturn;
@@ -96,7 +96,7 @@
        SendCheckMSG.dwTickEnd = GetTickCount();
        SendCheckMSG.dwDuration = SendCheckMSG.dwTickEnd - SendCheckMSG.dwTickStart;
        if(pStats->IsPostProcStart() == TRUE)        // Post Process啊 çŸ«ç´¯ç™»èŒæ æ äº†ä¿ƒ æ˜åŠ› èŒ„促.
        if(pStats->IsPostProcStart() == TRUE)        // Post Process啊 çŸ«ç´¯ç™»èŒæ æ äº†ä¿ƒ æ˜åŠ› èŒ„促.
        {
            it->bDelete = TRUE;
            continue;
EdgeInspector_App/Thread/Thread_CheckSeq.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#if _MSC_VER > 1000
#pragma once
EdgeInspector_App/Thread/Thread_ControlIF.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "Thread_ControlIF.h"
#ifdef _DEBUG
@@ -21,7 +21,7 @@
{
    BOOL bReturn = TRUE;
    // Thread ç§¯å·± é¥¶ Thread èé’
    // Thread ç§¯å·± é¥¶ Thread èé’
    bReturn = CreateTimerThread(this);
    return bReturn;
EdgeInspector_App/Thread/Thread_ControlIF.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "TimerThreadPool.h"
EdgeInspector_App/Thread/Thread_Send.cpp
@@ -1,4 +1,4 @@
// ProcPADThread.cpp : implementation file
// ProcPADThread.cpp : implementation file
//
#include "StdAfx.h"
@@ -26,7 +26,7 @@
{
    BOOL bReturn = TRUE;
    // Thread ç§¯å·± é¥¶ Thread èé’
    // Thread ç§¯å·± é¥¶ Thread èé’
    bReturn = CreateTimerThread(this);
    return bReturn;
EdgeInspector_App/Thread/Thread_Send.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#if _MSC_VER > 1000
#pragma once
EdgeInspector_App/Thread/Thread_ViewRefresh.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "Thread_ViewRefresh.h"
@@ -16,7 +16,7 @@
{
    BOOL bReturn = TRUE;
    // Thread ç§¯å·± é¥¶ Thread èé’
    // Thread ç§¯å·± é¥¶ Thread èé’
    bReturn = CreateTimerThread(this);
    return bReturn;
EdgeInspector_App/Thread/Thread_ViewRefresh.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "TimerThreadPool.h"
#include "Global_Define.h"
EdgeInspector_App/TriggerBoard/TriggerControl_Mvsol.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "TriggerControl_Mvsol.h"
CTriggerControl_Mvsol::CTriggerControl_Mvsol(void)
@@ -90,29 +90,29 @@
    return (m_hTriggerControl == NULL) ? FALSE : TRUE;
}
// é£˜åºœèŠ­0锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 0锅栏肺 é™æ‰
// é£˜åºœèŠ­0锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 0锅栏肺 é™æ‰
// SND : 02 57 00 00 00 74 00 80 00 4B 03
// ACK : 02 77 00 00 00 74 00 80 00 6B 03
// é£˜åºœèŠ­1锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 0锅栏肺 é™æ‰
// é£˜åºœèŠ­1锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 0锅栏肺 é™æ‰
// SND : 02 57 00 01 00 74 00 80 00 4C 03
// ACK : 02 77 00 01 00 74 00 80 00 6C 03
// é£˜åºœèŠ­2锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 0锅栏肺 é™æ‰
// é£˜åºœèŠ­2锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 0锅栏肺 é™æ‰
// SND : 02 57 00 7D 22 00 74 00 80 00 4D 03
// ACK : 02 77 00 7D 22 00 74 00 80 00 6D 03
// é£˜åºœèŠ­3锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 0锅栏肺 é™æ‰
// é£˜åºœèŠ­3锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 0锅栏肺 é™æ‰
// SND : 02 57 00 7D 23 00 74 00 80 00 4E 03
// ACK : 02 77 00 7D 23 00 74 00 80 00 6E 03
// é£˜åºœèŠ­0锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 1锅栏肺 é™æ‰
// é£˜åºœèŠ­0锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 1锅栏肺 é™æ‰
// SND : 02 57 00 00 10 74 00 80 00 5B 03
// ACK : 02 77 00 00 10 74 00 80 00 7B 03
// é£˜åºœèŠ­1锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 1锅栏肺 é™æ‰
// é£˜åºœèŠ­1锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 1锅栏肺 é™æ‰
// SND : 02 57 00 01 10 74 00 80 00 5C 03
// ACK : 02 77 00 00 10 74 00 80 00 7B 03
// é£˜åºœèŠ­2锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 1锅栏肺 é™æ‰
// é£˜åºœèŠ­2锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 1锅栏肺 é™æ‰
// SND : 02 57 00 7D 22 10 74 00 80 00 5D 03
// ACK : 02 77 00 7D 22 10 74 00 80 00 7D 5D 03
// é£˜åºœèŠ­3锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 1锅栏肺 é™æ‰
// é£˜åºœèŠ­3锅 ç›²æ¾„狼 æµšå†…æ­¹ æ¶ä»¿é˜‘ 1锅栏肺 é™æ‰
// SND : 02 57 00 7D 23 10 74 00 80 00 5E 03
// ACK : 02 77 00 7D 23 10 74 00 80 00 7E 03
EdgeInspector_App/TriggerBoard/TriggerControl_Mvsol.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
class CTriggerControl_Mvsol
{
EdgeInspector_App/UITool/DisplayMessage.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "DisplayMessage.h"
CDisplayMessage::CDisplayMessage(void)
@@ -33,7 +33,7 @@
BOOL CDisplayMessage::MakeLogFile()
{
    // Log è´¸åºœ
    // Log è´¸åºœ
    if (m_strLogPath.IsEmpty())
        return FALSE;
EdgeInspector_App/UITool/DisplayMessage.h
@@ -1,4 +1,4 @@
// DisplayMessage.h: interface for the CDisplayMessage class.
// DisplayMessage.h: interface for the CDisplayMessage class.
//
//////////////////////////////////////////////////////////////////////
EdgeInspector_App/UITool/General_Draw.cpp
@@ -1,4 +1,4 @@

#include "StdAfx.h"
#include "General_Draw.h"
#include "Server_MemDC.h"
EdgeInspector_App/UITool/General_Draw.h
@@ -1,4 +1,4 @@
#if !defined(__GENERALDRAW_INCLUDED__)
#if !defined(__GENERALDRAW_INCLUDED__)
#define __GENERALDRAW_INCLUDED__
//////////////////////////////////////////////////////////////////////////
@@ -25,7 +25,7 @@
        CreateFont(&m_Font[EN_ITEMFONT],14,_T("Arial"));
        CreateFont(&m_Font[EN_DATAFONT],12,_T("Arial"));
        CreateFont(&m_Font[EN_BUTTONFONT],24,_T("Arial"));
        CreateFont(&m_Font[EN_HANFONT],12,_T("奔覆眉"));
        CreateFont(&m_Font[EN_HANFONT],12,_T("奔覆眉"));
        CreateFont(&m_Font[EN_LARGEFONT],48,_T("Arial"));
        CreateFont(&m_Font[EN_MIDDLEFONT],35,_T("Arial"));
    }
EdgeInspector_App/UITool/MImageStatic.cpp
@@ -1,4 +1,4 @@
// MImageStatic.cpp : implementation file
// MImageStatic.cpp : implementation file
//
#include "stdafx.h"
@@ -233,7 +233,7 @@
void CMImageStatic::ResetImageStatic()
{
    // æ¬çªƒ æžå›ºç˜¤ æ»šæ¬ºç”« æª¬æ‰æ‹³.
    // æ¬çªƒ æžå›ºç˜¤ æ»šæ¬ºç”« æª¬æ‰æ‹³.
    ZeroMemory(m_ImageBuf, DEFECTIMAGE_WIDTH * DEFECTIMAGE_HEIGHT + 1);
    m_bSetImage = FALSE;
    m_rectDefect = CRect(0,0,0,0);
EdgeInspector_App/UITool/MImageStatic.h
@@ -1,4 +1,4 @@
#if !defined(AFX_HMIMAGESTATIC_H__D74697CD_885E_4E7C_A9EA_2A57C3F51B4A__INCLUDED_)
#if !defined(AFX_HMIMAGESTATIC_H__D74697CD_885E_4E7C_A9EA_2A57C3F51B4A__INCLUDED_)
#define AFX_HMIMAGESTATIC_H__D74697CD_885E_4E7C_A9EA_2A57C3F51B4A__INCLUDED_
#if _MSC_VER > 1000
@@ -20,7 +20,7 @@
// Attributes
public:
    UCHAR    m_ImageBuf[DEFECTIMAGE_WIDTH * DEFECTIMAGE_HEIGHT + 1];    // æ¬çªƒ æžå›ºç˜¤ç”« ç„Šå’¯æž—ç»° æ»šæ¬º.
    UCHAR    m_ImageBuf[DEFECTIMAGE_WIDTH * DEFECTIMAGE_HEIGHT + 1];    // æ¬çªƒ æžå›ºç˜¤ç”« ç„Šå’¯æž—ç»° æ»šæ¬º.
    BYTE m_BitmapInfo[sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)];
    BOOL    m_bSetImage;    
    void    ResetImageStatic();
EdgeInspector_App/UITool/PixelPtr.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
class CPixelPtr
{
EdgeInspector_App/UITool/Server_MemDC.h
@@ -1,4 +1,4 @@
#if !defined(CControlMemDC__INCLUDED_)
#if !defined(CControlMemDC__INCLUDED_)
#define CControlMemDC__INCLUDED_
#if _MSC_VER > 1000
EdgeInspector_App/UITool/Singleton.h
@@ -1,4 +1,4 @@
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
// Singleton.h: interface for the Singleton class.
//////////////////////////////////////////////////////////////////////////////////////
//    ex) sample
@@ -24,10 +24,10 @@
/*---------------------------------------------------------------------------
# é¢‡è€ç–™ : Singleton.h
# æ±²  ç–™ : interface for the Singleton template class.
# éƒ´  ä»¿ :
# åŽš  ç»Š :
# é¢‡è€ç–™ : Singleton.h
# æ±²  ç–™ : interface for the Singleton template class.
# éƒ´  ä»¿ :
# åŽš  ç»Š :
---------------------------------------------------------------------------*/
@@ -48,14 +48,14 @@
/*---------------------------------------------------------------------------
# åŠªè´°èƒ¶  ç–™ : Singleton
# ä½•葛努贰胶 : ç»æ¾œ
# æ›¼ç‚¼åŠªè´°èƒ¶ : ç»æ¾œ
# åŒ…府氓烙磊 : Voidhoon
# æ±²      ç–™ :
# å‡½      è :
# éƒ´      ä»¿ :
# å·©  åŠ›  ç—¢ :
# åŠªè´°èƒ¶  ç–™ : Singleton
# ä½•葛努贰胶 : ç»æ¾œ
# æ›¼ç‚¼åŠªè´°èƒ¶ : ç»æ¾œ
# åŒ…府氓烙磊 : Voidhoon
# æ±²      ç–™ :
# å‡½      è :
# éƒ´      ä»¿ :
# å·©  åŠ›  ç—¢ :
---------------------------------------------------------------------------*/
EdgeInspector_App/UITool/Splash.cpp
@@ -1,4 +1,4 @@
//  ===========================================================================
//  ===========================================================================
//  File    Splash.cpp
//  Desc    The implementation file for the CSplash class.
//  ===========================================================================
EdgeInspector_App/UITool/Splash.h
@@ -1,4 +1,4 @@
//  ===========================================================================
//  ===========================================================================
//  File    Splash.h
//  Desc    The interface of the CSplash class
//  ===========================================================================
EdgeInspector_App/UITool/btnenh.cpp
@@ -1,4 +1,4 @@
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// NOTE: Do not modify the contents of this file.  If this class is regenerated by
//  Microsoft Visual C++, your modifications will be overwritten.
EdgeInspector_App/UITool/btnenh.h
@@ -1,4 +1,4 @@
#if !defined(AFX_BTNENH_H__56F13D02_8CDD_42E1_9A73_46B206613CA4__INCLUDED_)
#if !defined(AFX_BTNENH_H__56F13D02_8CDD_42E1_9A73_46B206613CA4__INCLUDED_)
#define AFX_BTNENH_H__56F13D02_8CDD_42E1_9A73_46B206613CA4__INCLUDED_
#if _MSC_VER > 1000
EdgeInspector_App/UITool/cellsmanager.cpp
@@ -1,4 +1,4 @@
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// NOTE: Do not modify the contents of this file.  If this class is regenerated by
//  Microsoft Visual C++, your modifications will be overwritten.
EdgeInspector_App/UITool/cellsmanager.h
@@ -1,4 +1,4 @@
#if !defined(AFX_CELLSMANAGER_H__519A1760_5ECF_4E09_ADF7_27E85FC5E0F8__INCLUDED_)
#if !defined(AFX_CELLSMANAGER_H__519A1760_5ECF_4E09_ADF7_27E85FC5E0F8__INCLUDED_)
#define AFX_CELLSMANAGER_H__519A1760_5ECF_4E09_ADF7_27E85FC5E0F8__INCLUDED_
#if _MSC_VER > 1000
EdgeInspector_App/UITool/font.cpp
@@ -1,4 +1,4 @@
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// NOTE: Do not modify the contents of this file.  If this class is regenerated by
//  Microsoft Visual C++, your modifications will be overwritten.
EdgeInspector_App/UITool/font.h
@@ -1,4 +1,4 @@
#if !defined(AFX_FONT_H__680D290B_7A37_47D6_8E9B_300045E3AE85__INCLUDED_)
#if !defined(AFX_FONT_H__680D290B_7A37_47D6_8E9B_300045E3AE85__INCLUDED_)
#define AFX_FONT_H__680D290B_7A37_47D6_8E9B_300045E3AE85__INCLUDED_
#if _MSC_VER > 1000
EdgeInspector_App/UITool/surfacecolor.cpp
@@ -1,4 +1,4 @@
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// NOTE: Do not modify the contents of this file.  If this class is regenerated by
//  Microsoft Visual C++, your modifications will be overwritten.
EdgeInspector_App/UITool/surfacecolor.h
@@ -1,4 +1,4 @@
#if !defined(AFX_SURFACECOLOR_H__C6425A9A_E45A_4DD6_BB82_0603E9663A09__INCLUDED_)
#if !defined(AFX_SURFACECOLOR_H__C6425A9A_E45A_4DD6_BB82_0603E9663A09__INCLUDED_)
#define AFX_SURFACECOLOR_H__C6425A9A_E45A_4DD6_BB82_0603E9663A09__INCLUDED_
#if _MSC_VER > 1000
EdgeInspector_App/UITool/textdescriptor.cpp
@@ -1,4 +1,4 @@
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// NOTE: Do not modify the contents of this file.  If this class is regenerated by
//  Microsoft Visual C++, your modifications will be overwritten.
EdgeInspector_App/UITool/textdescriptor.h
@@ -1,4 +1,4 @@
#if !defined(AFX_TEXTDESCRIPTOR_H__8439099C_F0E9_45BA_9D40_FCE6F4946E85__INCLUDED_)
#if !defined(AFX_TEXTDESCRIPTOR_H__8439099C_F0E9_45BA_9D40_FCE6F4946E85__INCLUDED_)
#define AFX_TEXTDESCRIPTOR_H__8439099C_F0E9_45BA_9D40_FCE6F4946E85__INCLUDED_
#if _MSC_VER > 1000
EdgeInspector_App/UITool/texture.cpp
@@ -1,4 +1,4 @@
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++
// NOTE: Do not modify the contents of this file.  If this class is regenerated by
//  Microsoft Visual C++, your modifications will be overwritten.
EdgeInspector_App/UITool/texture.h
@@ -1,4 +1,4 @@
#if !defined(AFX_TEXTURE_H__AF25E66F_E258_4096_BA2D_3E2E9DB88B3D__INCLUDED_)
#if !defined(AFX_TEXTURE_H__AF25E66F_E258_4096_BA2D_3E2E9DB88B3D__INCLUDED_)
#define AFX_TEXTURE_H__AF25E66F_E258_4096_BA2D_3E2E9DB88B3D__INCLUDED_
#if _MSC_VER > 1000
EdgeInspector_App/View/DlgLogin.cpp
@@ -1,4 +1,4 @@
// DlgLogin.cpp : implementation file
// DlgLogin.cpp : implementation file
//
#include "stdafx.h"
EdgeInspector_App/View/DlgLogin.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
/////////////////////////////////////////////////////////////////////////////
// CDlgLogin dialog
#include "EdgeInspector_App.h"
EdgeInspector_App/View/EdgeImageViewer.cpp
@@ -1,4 +1,4 @@
#include "stdafx.h"
#include "stdafx.h"
#include "EdgeImageViewer.h"
// CEdgeImageViewer
@@ -136,8 +136,8 @@
{
    CMenu menu;
    CMenu popMenu;
    menu.CreateMenu();  // å¼¥æƒ‘å›° ç„•措 çš‹æ˜¥
    popMenu.CreatePopupMenu();  // æ‰‘诀皋春
    menu.CreateMenu();  // å¼¥æƒ‘å›° ç„•措 çš‹æ˜¥
    popMenu.CreatePopupMenu();  // æ‰‘诀皋春
    popMenu.AppendMenu(MF_SEPARATOR);
    popMenu.AppendMenu(MF_STRING, ID_MODE_USER_SELECT,                    _T("User Select (Mark/Manual Measure)"));
@@ -230,7 +230,7 @@
    if(bAllCheck)
        popMenu.CheckMenuItem(ID_MODE_VIEW_DEFECT_ALL,MF_CHECKED);
    // ç‰§å’†èƒ¶é£˜ çš‹æ˜¥ é¾‹å…
    // ç‰§å’†èƒ¶é£˜ çš‹æ˜¥ é¾‹å…
    CRect rect;
    GetWindowRect(rect);
    int nX = rect.left + point.x;
@@ -498,8 +498,8 @@
void CEdgeImageViewer::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    // å¼Šåºœæ‰ çš‹çŸ«ç˜¤ä¿Š æŽªç§¦è¾‘ç»° CStatic::OnPaint()阑(甫) é¾‹å…çªç˜¤ ä»˜ç»žçŸ«å·.
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    // å¼Šåºœæ‰ çš‹çŸ«ç˜¤ä¿Š æŽªç§¦è¾‘ç»° CStatic::OnPaint()阑(甫) é¾‹å…çªç˜¤ ä»˜ç»žçŸ«å·.
    UpdateView();
}
@@ -529,7 +529,7 @@
    // 1. Draw Buffer Image
    UpdateView_Image(&memDC);
    //2. æ˜¾ç¤ºè§†è§‰æ•ˆæžœ
    //2. æ˜¾ç¤ºè§†è§‰æ•ˆæžœ
    UpdateView_VisionResult(&memDC);
@@ -568,7 +568,7 @@
    for (int i = 0; i < nCount; i++) {
        DispVisionResult inf = pSideData->m_vDispVisionResult[i];
        int nType = inf.nType;
        if (0 == nType) {   //点
        if (0 == nType) {   //点
            CRect rtMarkPos_pxl = CRect(inf.pointX-31, inf.pointY-31, inf.pointX + 31, inf.pointY + 31);
            CRect rtMarkPos_wnd = GetWndPos(rtMarkPos_pxl);
            CPoint ptMarkPos_wnd = rtMarkPos_wnd.CenterPoint();
@@ -582,7 +582,7 @@
                memDC->LineTo(ptMarkPos_wnd.x - 8, ptMarkPos_wnd.y + 8);
            }
        }
        else if (1 == nType) {   //矩形
        else if (1 == nType) {   //矩形
            CRect rtMarkPos_pxl = CRect(inf.rectX1, inf.rectY1, inf.rectX2, inf.rectY2);
            CRect rtMarkSearchPos_wnd = GetWndPos(rtMarkPos_pxl);
            if (4 == inf.eVision) {
@@ -598,7 +598,7 @@
                memDC->Rectangle(rtMarkSearchPos_wnd);
            }
        }
        else if (2 == nType) {   //Ô²
        else if (2 == nType) {   //圆
            CRect rtMarkPos_pxl = CRect(inf.circleX - inf.circleRadius, inf.circleY - inf.circleRadius, inf.circleX + inf.circleRadius, inf.circleY + inf.circleRadius);
            CRect rtMarkSearchPos_wnd = GetWndPos(rtMarkPos_pxl);
            memDC->SelectObject(&pen);
@@ -609,7 +609,7 @@
                memDC->Ellipse(rtMarkSearchPos_wnd);
            }
        }
        else if (3 == nType) {   //直线
        else if (3 == nType) {   //直线
            CRect rtMarkPos_pxl = CRect(inf.rectX1 - 31, inf.rectY1 - 31, inf.rectX1 + 31, inf.rectY1 + 31);
            CRect rtMarkPos_wnd = GetWndPos(rtMarkPos_pxl);
            CPoint pt0 = rtMarkPos_wnd.CenterPoint();
@@ -718,7 +718,7 @@
    UpdateView_MousePoint(&memDC);
#if HALCON_VISION_KEY
    //17. æ˜¾ç¤ºvision Rsult
    //17. æ˜¾ç¤ºvision Rsult
    UpdateView_VisionResult(&memDC);
#endif // HALCON_VISION_KEY
@@ -861,7 +861,7 @@
    if(m_ptMousePos_Pxl.y < 0 || m_nTotalHeight <= m_ptMousePos_Pxl.y)
        return;
    int nYPos = m_ptMousePos_Pxl.y - m_ptDisplayStart_pxl.y;    // Recipe View俊辑 Scroll ä¸” é”­ æ»šæ¬º å›°æ‘¹ç”« å®˜åŽ•;;;
    int nYPos = m_ptMousePos_Pxl.y - m_ptDisplayStart_pxl.y;    // Recipe View俊辑 Scroll ä¸” é”­ æ»šæ¬º å›°æ‘¹ç”« å®˜åŽ•;;;
    int nPos = (nYPos * m_nFrameWidth) + m_ptMousePos_Pxl.x;
@@ -872,7 +872,7 @@
    memDC->TextOut(10, m_rtWnd.Height() - 45, strTemp);
#if HALCON_VISION_KEY
    if ((0 != m_ptMouseDown.x || 0 != m_ptMouseDown.y) && BlVision_GetVisionRecipe()->getVisionSetOpen()) {    //鼠标改变
    if ((0 != m_ptMouseDown.x || 0 != m_ptMouseDown.y) && BlVision_GetVisionRecipe()->getVisionSetOpen()) {    //鼠标改变
        strTemp.Format(_T("(%d / %d)"), m_ptMouseDown.x, m_ptMouseDown.y);
        memDC->TextOut(10, m_rtWnd.Height() - 25, strTemp);
@@ -897,11 +897,13 @@
void CEdgeImageViewer::UpdateView_InspectArea(CDC* memDC)
{
    if(m_pBuffer == NULL || memDC == NULL || m_pGlassData == NULL)
    if (m_pBuffer == NULL || memDC == NULL || m_pGlassData == NULL) {
        return;
    }
    if(m_MenuStatus[MODE_VIEW_INSPECT_AREA] == FALSE)
    if (m_MenuStatus[MODE_VIEW_INSPECT_AREA] == FALSE) {
        return;
    }
    CPen pen_SideLine(PS_DASH, 1, RGB(255,127,39));
    CPen pen_ChamferLine(PS_DASH, 1, RGB(255,255,0));
@@ -916,49 +918,42 @@
    CRect rcTmp,rtRealPos;
    int nFilterLine;
    int nChamferLine;
    for(int nFrameIdx = 0; nFrameIdx < MAX_IMAGE_FRAME; nFrameIdx++)
    {
    for(int nFrameIdx = 0; nFrameIdx < MAX_IMAGE_FRAME; nFrameIdx++) {
        CRect rtArea_Inspect = m_pGlassData->GetSideData((DimensionDir) m_nSideIdx)->m_rtInspectArea[nFrameIdx];
        int nSideLine = m_pGlassData->GetSideData((DimensionDir) m_nSideIdx)->m_nSideLineFrame[nFrameIdx];
        int nSideChamferLine = m_pGlassData->GetSideData((DimensionDir) m_nSideIdx)->m_nSide_Chamfer_LineFrame[nFrameIdx];
        int nSideLine = (int)m_pGlassData->GetSideData((DimensionDir) m_nSideIdx)->m_nSideLineFrame[nFrameIdx];
        int nSideChamferLine = (int)m_pGlassData->GetSideData((DimensionDir) m_nSideIdx)->m_nSide_Chamfer_LineFrame[nFrameIdx];
        // Side Line
        rtRealPos = rtArea_Inspect;
        nFilterLine = nSideLine;
        if(0 < nFilterLine)
        {
        if(0 < nFilterLine) {
            memDC->SelectObject(&pen_SideLine);
            memDC->MoveTo(int((nFilterLine  - m_ptDisplayStart_pxl.x ) * m_dZoom) , int((rtRealPos.top    - m_ptDisplayStart_pxl.y) * m_dZoom));
            memDC->LineTo(int((nFilterLine - m_ptDisplayStart_pxl.x ) * m_dZoom) , int((rtRealPos.bottom    - m_ptDisplayStart_pxl.y) * m_dZoom));
        }
        if(0 < nSideChamferLine)
        {
        if(0 < nSideChamferLine) {
            memDC->SelectObject(&pen_ChamferLine);
            memDC->MoveTo(int((nSideChamferLine  - m_ptDisplayStart_pxl.x ) * m_dZoom) , int((rtRealPos.top    - m_ptDisplayStart_pxl.y) * m_dZoom));
            memDC->LineTo(int((nSideChamferLine - m_ptDisplayStart_pxl.x ) * m_dZoom) , int((rtRealPos.bottom    - m_ptDisplayStart_pxl.y) * m_dZoom));
        }
        
        for(int nInsType = 0; nInsType < MAX_SIDE_INSPECT_TYPE; nInsType++)
        {
        for(int nInsType = 0; nInsType < MAX_SIDE_INSPECT_TYPE; nInsType++) {
            CRect rtArea = m_pGlassData->GetSideData((DimensionDir) m_nSideIdx)->m_rtInspectArea_InsType[nInsType][nFrameIdx];
            int nFilterLine = m_pGlassData->GetSideData((DimensionDir) m_nSideIdx)->m_nSideFilterLine_InsType[nInsType][nFrameIdx];
            rtRealPos = rtArea;
            nFilterLine = nFilterLine;
            if(rtRealPos.IsRectEmpty() != TRUE && rtRealPos.IsRectNull() != TRUE)
            {
            if(rtRealPos.IsRectEmpty() != TRUE && rtRealPos.IsRectNull() != TRUE) {
                rcTmp.left        = int((rtRealPos.left   - m_ptDisplayStart_pxl.x )    * m_dZoom);
                rcTmp.right        = int((rtRealPos.right  - m_ptDisplayStart_pxl.x )    * m_dZoom);
                rcTmp.top        = int((rtRealPos.top    - m_ptDisplayStart_pxl.y)    * m_dZoom);
                rcTmp.bottom    = int((rtRealPos.bottom    - m_ptDisplayStart_pxl.y)    * m_dZoom);
                if(rcTmp.top < 0 && rcTmp.bottom > 0 || rcTmp.top > 0 && rcTmp.top < m_rtWnd.bottom +1 || rcTmp.bottom > 0 && rcTmp.bottom < m_rtWnd.bottom +1)
                {
                if(rcTmp.top < 0 && rcTmp.bottom > 0 || rcTmp.top > 0 && rcTmp.top < m_rtWnd.bottom +1 || rcTmp.bottom > 0 && rcTmp.bottom < m_rtWnd.bottom +1) {
                    memDC->SelectObject(&pen_Green);
                    memDC->MoveTo(int((rtRealPos.left  - m_ptDisplayStart_pxl.x ) * m_dZoom) , int((rtRealPos.top    - m_ptDisplayStart_pxl.y) * m_dZoom));
                    memDC->LineTo(int((rtRealPos.right - m_ptDisplayStart_pxl.x ) * m_dZoom) , int((rtRealPos.top    - m_ptDisplayStart_pxl.y) * m_dZoom));
@@ -967,8 +962,7 @@
                    memDC->LineTo(int((rtRealPos.left  - m_ptDisplayStart_pxl.x ) * m_dZoom) , int((rtRealPos.top    - m_ptDisplayStart_pxl.y) * m_dZoom));
                }
                if(0 < nFilterLine)
                {
                if(0 < nFilterLine) {
                    memDC->SelectObject(&pen_FilterLine);
                    memDC->MoveTo(int((nFilterLine  - m_ptDisplayStart_pxl.x ) * m_dZoom) , int((rtRealPos.top    - m_ptDisplayStart_pxl.y) * m_dZoom));
                    memDC->LineTo(int((nFilterLine - m_ptDisplayStart_pxl.x ) * m_dZoom) , int((rtRealPos.bottom    - m_ptDisplayStart_pxl.y) * m_dZoom));
@@ -1933,7 +1927,7 @@
    rtCircle.bottom = rtCircle.top + (nDistanceY_wnd * 2);
    memDC->Arc(rtCircle, CPoint(rtCircle.left, rtCircle.CenterPoint().y), CPoint(rtCircle.left, rtCircle.CenterPoint().y));
    /* åº·å¼€ æ•‘狼 1/4 ç›”父 ç„Šæžç»Š é…µé˜‘é”­..
    /* åº·å¼€ æ•‘狼 1/4 ç›”父 ç„Šæžç»Š é…µé˜‘é”­..
    if((ptEnd_Wnd.x < ptStart_Wnd.x && ptEnd_Wnd.y < ptStart_Wnd.y) || (ptEnd_Wnd.x > ptStart_Wnd.x && ptEnd_Wnd.y > ptStart_Wnd.y))
        memDC->Arc(rtCircle, CPoint(rtCircle.CenterPoint().x, ptEnd_Wnd.y), CPoint(ptEnd_Wnd.x, rtCircle.CenterPoint().y));
    else
@@ -2240,7 +2234,7 @@
        for(int nX = m_ptMousePos_Pxl.x -8; nX < m_ptMousePos_Pxl.x + 8 ; nX++)
        {
            int nX_pxl = nX;
            int nY_pxl = nY - m_ptDisplayStart_pxl.y;    // Recipe View俊辑 Scroll ä¸” é”­ æ»šæ¬º å›°æ‘¹ç”« å®˜åŽ•;;;
            int nY_pxl = nY - m_ptDisplayStart_pxl.y;    // Recipe View俊辑 Scroll ä¸” é”­ æ»šæ¬º å›°æ‘¹ç”« å®˜åŽ•;;;
            if(nX_pxl < 0 || m_nFrameWidth <= nX_pxl)
                continue;
@@ -2263,7 +2257,7 @@
        for(int nX = m_ptMousePos_Pxl.x -8; nX < m_ptMousePos_Pxl.x + 8 ; nX++)
        {
            int nX_pxl = nX;
            int nY_pxl = nY - m_ptDisplayStart_pxl.y;    // Recipe View俊辑 Scroll ä¸” é”­ æ»šæ¬º å›°æ‘¹ç”« å®˜åŽ•;;;
            int nY_pxl = nY - m_ptDisplayStart_pxl.y;    // Recipe View俊辑 Scroll ä¸” é”­ æ»šæ¬º å›°æ‘¹ç”« å®˜åŽ•;;;
            if(nX_pxl < 0 || m_nFrameWidth <= nX_pxl)
                continue;
@@ -2349,7 +2343,7 @@
#if HALCON_VISION_KEY
void CEdgeImageViewer::OnLButtonUp(UINT nFlags, CPoint point)
{
    // TODO: åœ¨æ­¤æ·»åŠ æ¶ˆæ¯å¤„ç†ç¨‹åºä»£ç å’Œ/或调用默认值
    // TODO: åœ¨æ­¤æ·»åŠ æ¶ˆæ¯å¤„ç†ç¨‹åºä»£ç å’Œ/或调用默认值
    m_isMouseDown = FALSE;
    CWnd::OnLButtonUp(nFlags, point);
EdgeInspector_App/View/EdgeImageViewer.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include <bitset>
#include "Global_Define.h"
#include "cv.h"
@@ -181,12 +181,12 @@
    double                        m_dPixelSizeY;                // Resolution Y
    double                        m_dZoom;
    bitset<MAX_DISPLAY_SET>        m_MenuStatus;                // æ‹³æ è‘›é› æƒ‘怕
    EdgeViewer_ManualMeasure    m_ManualMeasureStatus;        // èæ‚¼ èžŸæ²¥ æƒ‘怕
    bitset<MAX_DISPLAY_SET>        m_MenuStatus;                // æ‹³æ è‘›é› æƒ‘怕
    EdgeViewer_ManualMeasure    m_ManualMeasureStatus;        // èæ‚¼ èžŸæ²¥ æƒ‘怕
    
    CPoint                        m_ptDisplayStart_pxl;        // View狼 0,0 ç‹¼ Pxl å›°æ‘¹
    CPoint                        m_ptMousePos_Wnd;            // Wnd狼 ä»˜å¿«èƒ¶ å›°æ‘¹
    CPoint                        m_ptMousePos_Pxl;            // Pixel狼 ä»˜å¿«èƒ¶ å›°æ‘¹
    CPoint                        m_ptDisplayStart_pxl;        // View狼 0,0 ç‹¼ Pxl å›°æ‘¹
    CPoint                        m_ptMousePos_Wnd;            // Wnd狼 ä»˜å¿«èƒ¶ å›°æ‘¹
    CPoint                        m_ptMousePos_Pxl;            // Pixel狼 ä»˜å¿«èƒ¶ å›°æ‘¹
public:
@@ -212,11 +212,11 @@
    SIZE                    m_szImg;
    SIZE                    m_szMark;
    MANUAL_MEASURE            m_ManualMeausre;
    CPoint                    m_ptMouseSaved;                // Profile Save æ‰ç“·çŸ« è¤ä¾©
    CPoint                    m_ptMouseSaved;                // Profile Save æ‰ç“·çŸ« è¤ä¾©
    IViewInterface2Parent    *m_pI2M;
    
    CRect                    m_rcROI;                    // æ³…力 ç„Šå’¯ç˜¤ç»Š ä¹ç»° åº·å¼€
    CRect                    m_rcROI;                    // æ³…力 ç„Šå’¯ç˜¤ç»Š ä¹ç»° åº·å¼€
    CFont                    m_sideFont;
    CImage                  m_ImageMagnify;
    EXECPTION_AREA            m_refMark;
@@ -228,10 +228,10 @@
    CGlassRecipe*            m_pRecipe;
public:    
    CPoint            m_ptMouseCurrent;                    // æ³…犁 ä»˜å¿«èƒ¶ è°…é’Ž
    CPoint            m_ptMouseCurrent;                    // æ³…犁 ä»˜å¿«èƒ¶ è°…é’Ž
    EXECPTION_AREA  *m_pTracker;
    CRect            m_WndRect;
    POINT            m_ptOrg;                            // å‚ˆçœ‰ æžå›ºç˜¤ä¿Šè¾‘ Display çŸ«ç´¯ è°…é’Ž
    POINT            m_ptOrg;                            // å‚ˆçœ‰ æžå›ºç˜¤ä¿Šè¾‘ Display çŸ«ç´¯ è°…é’Ž
    int                m_nModeTrackerVCR;
    CPoint            m_ptOldMouseVCR;    
EdgeInspector_App/View/FrameImg.cpp
@@ -1,4 +1,4 @@
// FrameImg.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// FrameImg.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -415,7 +415,7 @@
    WCHAR        wStr[MAX_PATH];
    FontFamily    fontFamily(L"奔覆眉");
    FontFamily    fontFamily(L"奔覆眉");
    Font        font(&fontFamily,11, FontStyleBold );
    swprintf(wStr, L"%d[%d,%d]",m_Image.GetPixel(m_ptCur.x +  m_nScrStartX,m_ptCur.y) & 0xff,m_ptCur.x +  m_nScrStartX,m_ptCur.y);
@@ -908,8 +908,8 @@
void CFrameImg::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    // å¼Šåºœæ‰ çš‹çŸ«ç˜¤ä¿Š æŽªç§¦è¾‘ç»° CStatic::OnPaint()阑(甫) é¾‹å…çªç˜¤ ä»˜ç»žçŸ«å·.
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    // å¼Šåºœæ‰ çš‹çŸ«ç˜¤ä¿Š æŽªç§¦è¾‘ç»° CStatic::OnPaint()阑(甫) é¾‹å…çªç˜¤ ä»˜ç»žçŸ«å·.
    ViewUpdate();
}
@@ -1786,7 +1786,7 @@
    dc.SetTextColor(RGB(0,0,255));
    
    dc.TextOut(120,3,strTmp);
    // TFT CF Line阑 å¼Šèµ´ä¿ƒ.
    // TFT CF Line阑 å¼Šèµ´ä¿ƒ.
    
    szROI.cx =  CHKMIN(int(m_WndRect.Width()  / m_dZoom), m_szImg.cx);
    szROI.cy =  int(m_WndRect.Height() / m_dZoom);   
@@ -1843,13 +1843,13 @@
    dc.MoveTo(x,y-7);
    dc.LineTo(x,y+7);
    // Corner甫 å¼Šèµ´ä¿ƒ.
    // Corner甫 å¼Šèµ´ä¿ƒ.
    DrawCorner(dc,ptMark);
        
    //Defect阑 å¼Šèµ´ä¿ƒ.
    //Defect阑 å¼Šèµ´ä¿ƒ.
    DrawDefect(dc);
    // å…«è¤ åº·å¼€é˜‘ å¼Šèµ´ä¿ƒ
    // å…«è¤ åº·å¼€é˜‘ å¼Šèµ´ä¿ƒ
    //DrawInspectArea(dc);
        
    DrawMeasureLine(dc,ptMark);
@@ -1902,7 +1902,7 @@
            int nValue;
            int nTx = (int)(x * m_dZoom) - 40;
            if(m_nSide < 4) // æƒ‘何
            if(m_nSide < 4) // æƒ‘何
            {
                // CF LINE
                dc.MoveTo((int)((pInsResult->nGrindframe[0][nFrameIndex]- m_ptOrg.x)    *    m_dZoom) , m_ptMouseCurrent.y);
@@ -1932,7 +1932,7 @@
                //strTmp.Format("GRIND : %d um",nValue);
                dc.TextOut( nTx ,m_ptMouseCurrent.y + 30,strTmp);
            }
            else // çªä½•
            else // çªä½•
            {
                // TFT LINE
                dc.MoveTo((int)((pInsResult->nGrindframe[0][nFrameIndex]- m_ptOrg.x)    *    m_dZoom) , m_ptMouseCurrent.y);
@@ -2108,7 +2108,7 @@
        GetResolution(dResH,dResV);
        // ä»˜å†œç”« å¼Šèµ´ä¿ƒ.
        // ä»˜å†œç”« å¼Šèµ´ä¿ƒ.
        dc.SelectObject(&pen2);
        if(bMark[0])
EdgeInspector_App/View/FrameImg.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
// CFrameImg
@@ -148,11 +148,11 @@
    SIZE                    m_szImg;
    SIZE                    m_szMark;
    MANUAL_MEASURE            m_ManualMeausre;
    CPoint                    m_ptMouseSaved;        // Profile Save æ‰ç“·çŸ« è¤ä¾©
    CPoint                    m_ptMouseSaved;        // Profile Save æ‰ç“·çŸ« è¤ä¾©
    IViewInterface2Parent    *m_pI2M;
    bitset<MAX_DISPLAY_MODE>        m_bitModeDisplay;    // æ‹³æ è‘›é› bit
    CRect                    m_rcROI;            // æ³…力 ç„Šå’¯ç˜¤ç»Š ä¹ç»° åº·å¼€
    bitset<MAX_DISPLAY_MODE>        m_bitModeDisplay;    // æ‹³æ è‘›é› bit
    CRect                    m_rcROI;            // æ³…力 ç„Šå’¯ç˜¤ç»Š ä¹ç»° åº·å¼€
    CFont                    m_sideFont;
    CImage                  m_ImageMagnify;
    EXECPTION_AREA            m_refMark;
@@ -164,10 +164,10 @@
    CGlassRecipe*            m_pRecipe;
public:    
    CPoint            m_ptMouseCurrent;   // æ³…犁 ä»˜å¿«èƒ¶ è°…é’Ž
    CPoint            m_ptMouseCurrent;   // æ³…犁 ä»˜å¿«èƒ¶ è°…é’Ž
    EXECPTION_AREA  *m_pTracker;
    CRect            m_WndRect;
    POINT            m_ptOrg;                // å‚ˆçœ‰ æžå›ºç˜¤ä¿Šè¾‘ Display çŸ«ç´¯ è°…é’Ž
    POINT            m_ptOrg;                // å‚ˆçœ‰ æžå›ºç˜¤ä¿Šè¾‘ Display çŸ«ç´¯ è°…é’Ž
    int                m_nModeTrackerVCR;
    CPoint            m_ptOldMouseVCR;    
EdgeInspector_App/View/ImgDefect.cpp
@@ -1,4 +1,4 @@
// ImgDefect.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// ImgDefect.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -35,7 +35,7 @@
// CImgDefect çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
// CImgDefect çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
BOOL CImgDefect::Create(RECT const & rect, CWnd * pParentWnd /*= 0*/)
@@ -68,8 +68,8 @@
void CImgDefect::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    // å¼Šåºœæ‰ çš‹çŸ«ç˜¤ä¿Š æŽªç§¦è¾‘ç»° CWnd::OnPaint()阑(甫) é¾‹å…çªç˜¤ ä»˜ç»žçŸ«å·.
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    // å¼Šåºœæ‰ çš‹çŸ«ç˜¤ä¿Š æŽªç§¦è¾‘ç»° CWnd::OnPaint()阑(甫) é¾‹å…çªç˜¤ ä»˜ç»žçŸ«å·.
    CDC *pDC = GetDC();
@@ -117,7 +117,7 @@
                    DrawManualMeasure(memDC);
            }
        }
        else // è§’ Size Mode
        else // è§’ Size Mode
        {
            rc.right  = m_img.GetWidth();
            rc.bottom = m_img.GetHeight();
EdgeInspector_App/View/ImgDefect.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
// CImgDefect
@@ -33,7 +33,7 @@
    int        m_nMode;
    BOOL    m_bMeasure;
    int        m_nTurn;
    int        m_nTextPos;        // 0: Text å…ä»¿ æ•‘窃 1: left Top, 2: rigt top, 3: left bottom, 4: right bottom
    int        m_nTextPos;        // 0: Text å…ä»¿ æ•‘窃 1: left Top, 2: rigt top, 3: left bottom, 4: right bottom
    CString m_strTextInfo;
    double    m_dPx,m_dPy;
public:
EdgeInspector_App/View/ImgListView.cpp
@@ -1,4 +1,4 @@
// ImgListView.cpp : implementation file
// ImgListView.cpp : implementation file
//
#include "stdafx.h"
@@ -63,7 +63,7 @@
{
    m_bProcesing    = 0;
    m_bSelect        = 0;
    _stprintf(m_Path,_T("%s%s"),strFilePath,strFileName);
    _stprintf_s(m_Path, MAX_PATH, _T("%s%s"), strFilePath, strFileName);
    m_bValid        = m_Img.Load(m_Path);    
    m_rcImg            = CRect(0,0,100,100);
}
@@ -75,7 +75,7 @@
void CPotoItem::Draw(CDC *pDC, CRect rcClient, CRect rcChange)
{
    //------------------------------------------------------
    // æ²¥è¤é˜¿å±ˆ å†œæ‰ç”« çˆ±ç»° çš‹è‘›åºœDC ç§¯å·±( MemDC )
    // æ²¥è¤é˜¿å±ˆ å†œæ‰ç”« çˆ±ç»° çš‹è‘›åºœDC ç§¯å·±( MemDC )
    //------------------------------------------------------
    CDC MemDC;
@@ -85,7 +85,7 @@
    MemBitmap.CreateCompatibleBitmap( pDC , rcChange.Width() , rcChange.Height()  );
    CBitmap * pOldBitmap = (CBitmap *)MemDC.SelectObject( &MemBitmap );
    // ç¡…版 ç£¨çªæ‰
    // ç¡…版 ç£¨çªæ‰
    CRect rcMemDC(0, 0, rcChange.Width(), rcChange.Height());
    if(m_bSelect)    
@@ -95,8 +95,8 @@
    if(m_bProcesing)
        DrawRect(&MemDC,RGB(255,0,0),rcMemDC);
    // å’¯å½’篮 å•Šè‚º æŠ€è‚º 5
    // Text å•Š é™å’¯é¾™ å‚åŸƒ 25
    // å’¯å½’篮 å•Šè‚º æŠ€è‚º 5
    // Text å•Š é™å’¯é¾™ å‚åŸƒ 25
    CRect rcImg (5, 5, rcChange.Width()-5, rcChange.Height()-ITEM_TEXT);
    m_Img.Draw(MemDC.GetSafeHdc(), rcImg);
    DrawText(&MemDC,RGB(0,0,255));
@@ -117,8 +117,8 @@
    int mode = pDC->SetBkMode( TRANSPARENT );
    int modeText = pDC->SetTextColor( color );
    //-----------------------------------------------------------
    // æžå›ºç˜¤ç–™é˜‘ æ‹³æä¿Š å…ä»¿èŒ„促.
    // File Name捞 15磊 æžæƒ‘ ç™»æ ~~ è‚º ç»µè·
    // æžå›ºç˜¤ç–™é˜‘ æ‹³æä¿Š å…ä»¿èŒ„促.
    // File Name捞 15磊 æžæƒ‘ ç™»æ ~~ è‚º ç»µè·
    //-----------------------------------------------------------
    CString strtmp;
    //    if(m_strName.GetLength() > 15)
@@ -476,7 +476,7 @@
    MemDC.CreateCompatibleDC( &dc );
    MemBitmap.CreateCompatibleBitmap( &dc , rect.Width() , rect.Height() );
    pOldBitmap = (CBitmap *)MemDC.SelectObject( &MemBitmap );
    MemDC.FillRect( &rect , &m_BgBrush );            // ç¡…版祸栏肺 å¿«æ€¥ ç£¨ç§¦æž—绊...
    MemDC.FillRect( &rect , &m_BgBrush );            // ç¡…版祸栏肺 å¿«æ€¥ ç£¨ç§¦æž—绊...
    MemDC.SetWindowOrg( ptScroll.x , ptScroll.y );    // SetWindowOrg()
@@ -496,8 +496,8 @@
            if( !tmpRc.IntersectRect( pImgItem->m_rcImg , rcInvalid ) )    
            {
                //辑肺 èˆ¬æ‘¹ç»° ä½•盒捞 ç»ä¿ƒç»° å·´é˜‘ å”±é¸¥è¾°ä¿ƒ.
                //溜 æ³…犁 é…’捞袍篮 æ‹³æä¿Š ä¿ƒçŸ« å¼Šåºœç˜¤ è‡¼ç»°ä¿ƒ.
                //辑肺 èˆ¬æ‘¹ç»° ä½•盒捞 ç»ä¿ƒç»° å·´é˜‘ å”±é¸¥è¾°ä¿ƒ.
                //溜 æ³…犁 é…’捞袍篮 æ‹³æä¿Š ä¿ƒçŸ« å¼Šåºœç˜¤ è‡¼ç»°ä¿ƒ.
                continue;
            }    
            pImgItem->Draw(&MemDC,rcInvalid,pImgItem->m_rcImg);        
@@ -529,7 +529,7 @@
void CImgListView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    CPoint ptScroll(point);
    ptScroll += GetScrollPosition();    // èƒ¶å†œè´¹ç­‰ è°…钎甫 æ­¹ç§¦æž—绊...
    ptScroll += GetScrollPosition();    // èƒ¶å†œè´¹ç­‰ è°…钎甫 æ­¹ç§¦æž—绊...
    if(SelectItemChk(ptScroll))        
        Invalidate(FALSE);//Invalidate();
@@ -550,7 +550,7 @@
BOOL CImgListView::OnEraseBkgnd(CDC* pDC)
{
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Š æ£º/肚绰 æ‰å¤¯è”¼é˜‘ é¾‹å…é’¦èªä¿ƒ.
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Š æ£º/肚绰 æ‰å¤¯è”¼é˜‘ é¾‹å…é’¦èªä¿ƒ.
    CRect rect ;
    GetClientRect(&rect);
    pDC->FillRect(rect, &m_BgBrush);
@@ -570,8 +570,8 @@
    CPoint ptScroll = GetScrollPosition();
    pDC->SetWindowOrg(ptScroll.x,ptScroll.y);
    //----------------------------------------------------
    // Invalidate ç­‰ åº·å¼€ç‹¼ è°…钎甫 ç¨ åºœ è°…钎拌肺 å‡½æ‹³çªæ‰
    // å›°ç§¦è¾‘ æŽ˜ç»¢æŸ¯ä¿ƒ.
    // Invalidate ç­‰ åº·å¼€ç‹¼ è°…钎甫 ç¨ åºœ è°…钎拌肺 å‡½æ‹³çªæ‰
    // å›°ç§¦è¾‘ æŽ˜ç»¢æŸ¯ä¿ƒ.
    //----------------------------------------------------
    CRect rcInvalid;
    GetClientRect(rcInvalid);
@@ -602,8 +602,8 @@
            tmpRc        = pImgItem->m_rcImg;
            if( !tmpRc.IntersectRect( pImgItem->m_rcImg , rcInvalid ) )    
            {
                //辑肺 èˆ¬æ‘¹ç»° ä½•盒捞 ç»ä¿ƒç»° å·´é˜‘ å”±é¸¥è¾°ä¿ƒ.
                //溜 æ³…犁 é…’捞袍篮 æ‹³æä¿Š ä¿ƒçŸ« å¼Šåºœç˜¤ è‡¼ç»°ä¿ƒ.
                //辑肺 èˆ¬æ‘¹ç»° ä½•盒捞 ç»ä¿ƒç»° å·´é˜‘ å”±é¸¥è¾°ä¿ƒ.
                //溜 æ³…犁 é…’捞袍篮 æ‹³æä¿Š ä¿ƒçŸ« å¼Šåºœç˜¤ è‡¼ç»°ä¿ƒ.
                continue;
            }    
            pImgItem->Draw(&MemDC,rcInvalid,pImgItem->m_rcImg);        
@@ -620,7 +620,7 @@
void CImgListView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Š æ£º/肚绰 æ‰å¤¯è”¼é˜‘ é¾‹å…é’¦èªä¿ƒ.
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Š æ£º/肚绰 æ‰å¤¯è”¼é˜‘ é¾‹å…é’¦èªä¿ƒ.
    //UpdateView();
    CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
}
EdgeInspector_App/View/ImgListView.h
@@ -1,4 +1,4 @@
#if !defined(AFX_IMGLISTVIEW_H__C0DD00C1_EEA9_4E84_BB03_8DE83B2DEDEA__INCLUDED_)
#if !defined(AFX_IMGLISTVIEW_H__C0DD00C1_EEA9_4E84_BB03_8DE83B2DEDEA__INCLUDED_)
#define AFX_IMGLISTVIEW_H__C0DD00C1_EEA9_4E84_BB03_8DE83B2DEDEA__INCLUDED_
#if _MSC_VER > 1000
@@ -15,11 +15,11 @@
#define        LEFT_MARJIN     15
#define        TOP_MARJIN     15
#define        ITEM_WIDTH     190 // 380      // è”¼æž å®˜å·®ç»¢å…· çªéª¨è‚º define捞唱 constç»° ç»¢åŒ¡åºœç˜¤ è‡¼ç»°ä¿ƒ.
#define        ITEM_WIDTH     190 // 380      // è”¼æž å®˜å·®ç»¢å…· çªéª¨è‚º define捞唱 constç»° ç»¢åŒ¡åºœç˜¤ è‡¼ç»°ä¿ƒ.
#define        ITEM_HEIGHT     160 // 320      // 
#define        ITEM_TEXT    22            // é…’捞袍俊 æŽªèŒ„ è‡‚磊 è‡­æž
#define        ITEM_ROW_MARJIN    15        // é…’捞袍苞 é…’捞袍狼 å•Šè‚ºè¤æž
#define        ITEM_COL_MARJIN     20        // é…’捞袍苞 é…’捞袍狼 æŠ€è‚ºè¤æž
#define        ITEM_TEXT    22            // é…’捞袍俊 æŽªèŒ„ è‡‚磊 è‡­æž
#define        ITEM_ROW_MARJIN    15        // é…’捞袍苞 é…’捞袍狼 å•Šè‚ºè¤æž
#define        ITEM_COL_MARJIN     20        // é…’捞袍苞 é…’捞袍狼 æŠ€è‚ºè¤æž
class CPotoItem  
{
@@ -36,9 +36,9 @@
    CImage  m_Img;
    CRect    m_rcImg;
    BOOL    m_bSelect;     // æ€¥ç¶ ç™»èŒç»°å•Š
    BOOL    m_bValid;      // æŒ‰çœ‰ç‹¼ ç²®çЁ己
    BOOL    m_bProcesing;  // è´¸åºœåç‰¢å•Š
    BOOL    m_bSelect;     // æ€¥ç¶ ç™»èŒç»°å•Š
    BOOL    m_bValid;      // æŒ‰çœ‰ç‹¼ ç²®çЁ己
    BOOL    m_bProcesing;  // è´¸åºœåç‰¢å•Š
    TCHAR   m_Path[MAX_PATH];
    CRect   GetRect()                 { return m_rcImg; }
@@ -91,10 +91,10 @@
public:
    IMG_MAP            m_ImgMap;
    int                m_nHItem;        // æŠ€è‚ºè‚º å‰²ä¿ºå•Š å…ä»¿æž çžªå·´ç‰¢å•Š?
    int                m_nHItem;        // æŠ€è‚ºè‚º å‰²ä¿ºå•Š å…ä»¿æž çžªå·´ç‰¢å•Š?
    int                m_nHItemOld;
    int                m_nAddItem;        // ä½¬ç»¢ç”¸ç‰¢ é…’捞袍狼 é†šè‚®è
    CBrush            m_BgBrush;        // ç¡…版Brush
    int                m_nAddItem;        // ä½¬ç»¢ç”¸ç‰¢ é…’捞袍狼 é†šè‚®è
    CBrush            m_BgBrush;        // ç¡…版Brush
    CImage*            m_pSelImg;
    CPotoItem        *m_pSelectItem;
public:
EdgeInspector_App/View/ViewLampControl.cpp
@@ -1,4 +1,4 @@
// Dlg_LampControl.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// Dlg_LampControl.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -6,7 +6,7 @@
#include "Global_Define.h"
// CViewLampControl æŽªæ‹³ æƒ‘磊涝聪促.
// CViewLampControl æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CViewLampControl, CDialog)
    
@@ -106,7 +106,7 @@
    }
    
    return TRUE;  // return TRUE unless you set the focus to a control
    // æŠ—寇: OCX åŠ å·± å…¶æžç˜¤ç»° FALSE甫 é¦†åˆ¸ç§¦å…· é’¦èªä¿ƒ.
    // æŠ—寇: OCX åŠ å·± å…¶æžç˜¤ç»° FALSE甫 é¦†åˆ¸ç§¦å…· é’¦èªä¿ƒ.
}
void CViewLampControl::ClickChkLampOnOffButton()
@@ -337,7 +337,7 @@
void CViewLampControl::OnNMCustomdrawSlider2(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
    // TODO: å’¯æ‰ä¿Š ç‰§é£˜è´¹ èˆ…覆 è´¸åºœæ‰ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    // TODO: å’¯æ‰ä¿Š ç‰§é£˜è´¹ èˆ…覆 è´¸åºœæ‰ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    LampValueUpdate(1,IDC_EDIT_LAMP_VALUE_2);
    *pResult = 0;
@@ -346,7 +346,7 @@
void CViewLampControl::OnNMCustomdrawSlider3(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
    // TODO: å’¯æ‰ä¿Š ç‰§é£˜è´¹ èˆ…覆 è´¸åºœæ‰ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    // TODO: å’¯æ‰ä¿Š ç‰§é£˜è´¹ èˆ…覆 è´¸åºœæ‰ å†…靛甫 çœ å•Šé’¦èªä¿ƒ.
    LampValueUpdate(2,IDC_EDIT_LAMP_VALUE_3);
EdgeInspector_App/View/ViewLampControl.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "afxcmn.h"
#include "EdgeInspector_App.h"
#include "Global_Define.h"
@@ -6,7 +6,7 @@
#include "GlassRecipe.h"
#include "HardwareSettings.h"
#include "Glass_Data.h"
// CViewLampControl æŽªæ‹³ æƒ‘磊涝聪促.
// CViewLampControl æŽªæ‹³ æƒ‘磊涝聪促.
#define UM_LIGHT_APPLY_RECIPE (WM_USER + 4001)
@@ -17,14 +17,14 @@
    DECLARE_DYNAMIC(CViewLampControl)
public:
    CViewLampControl(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CViewLampControl(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CViewLampControl();
    // æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    // æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_DLG_LAMP_CONTROL };
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    void    ClickChkLampOnOffButton();
    void    ClickChkCloseButton();
    DECLARE_MESSAGE_MAP()
EdgeInspector_App/View/ViewMain_Defect.cpp
@@ -1,4 +1,4 @@
// ViewDefect.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// ViewDefect.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -7,7 +7,7 @@
#include "afxdialogex.h"
#include "Global_Define.h"
// CViewDefect æŽªæ‹³ æƒ‘磊涝聪促.
// CViewDefect æŽªæ‹³ æƒ‘磊涝聪促.
#define GRID_FIX_COLOR            RGB(144,200,246)
#define GRID_COLOR                RGB(242,242,242)
@@ -110,7 +110,7 @@
    return TRUE;
}
// CViewDefect çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
// CViewDefect çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
void CViewMain_Defect::SetRecipe(CHardwareSettings *pHW)
{
    m_pHardware = pHW;
@@ -215,7 +215,7 @@
        if(m_pSelDefect->m_strSaveImagePath.IsEmpty() == TRUE || m_pSelDefect->m_bJudge_NG == FALSE)
        {
            // Buffer俊辑 æžå›ºç˜¤ å•Šå»‰å·éœ¸ çªç»°å·´æ¡£..
            // Buffer俊辑 æžå›ºç˜¤ å•Šå»‰å·éœ¸ çªç»°å·´æ¡£..
        }
        else
@@ -294,7 +294,7 @@
void CViewMain_Defect::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Š æ£º/肚绰 æ‰å¤¯è”¼é˜‘ é¾‹å…é’¦èªä¿ƒ.
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Š æ£º/肚绰 æ‰å¤¯è”¼é˜‘ é¾‹å…é’¦èªä¿ƒ.
    SCROLLINFO si;
    si.fMask = SIF_ALL;
    m_ctrlScrollH.GetScrollInfo(&si, SIF_ALL);
@@ -560,7 +560,7 @@
    lf.lfItalic = 0;
    lf.lfHeight = 14;
    lf.lfWeight = FW_BOLD;
    _tcscpy(lf.lfFaceName, _T("Arial"));
    _tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"));
    m_GrdDefect.GetDefaultCell(TRUE, FALSE)->SetFont(&lf);
    m_GrdDefect.GetDefaultCell(FALSE, TRUE)->SetFont(&lf);
EdgeInspector_App/View/ViewMain_Defect.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "Global_Define.h"
#include "GridCtrl.h"
@@ -13,21 +13,21 @@
typedef std::vector<CDefect*>                LISTDefect;
typedef std::vector<CDefect*>::iterator        LISTDefectit;
// CViewDefect æŽªæ‹³ æƒ‘磊涝聪促.
// CViewDefect æŽªæ‹³ æƒ‘磊涝聪促.
class CViewMain_Defect : public CDialogEx
{
    DECLARE_DYNAMIC(CViewMain_Defect)
public:
    CViewMain_Defect(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CViewMain_Defect(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CViewMain_Defect();
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_MAIN_VIEW_DEFECT };
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual BOOL OnInitDialog(void);
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
EdgeInspector_App/View/ViewMain_HWSetting.cpp
@@ -1,4 +1,4 @@
// ViewHWSetting.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// ViewHWSetting.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -8,7 +8,7 @@
#include "Global_Define.h"
#include "NewCellTypes\GridCellCombo.h"
// CViewHWSetting æŽªæ‹³ æƒ‘磊涝聪促.
// CViewHWSetting æŽªæ‹³ æƒ‘磊涝聪促.
extern BOOL g_bUse_SaveAllDMP;
const int LIGHT_COLUMN_COUNT = 4;
const TCHAR* LIGHT_COLUMN_ITEM[LIGHT_COLUMN_COUNT] = {_T("ID"),_T("Type"),_T("Port&IP"),_T("Maker")};
@@ -144,7 +144,7 @@
    return TRUE;
}
// CViewHWSetting çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
// CViewHWSetting çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
void CViewMain_HWSetting::Init_LightGrid()
@@ -173,7 +173,7 @@
    lf.lfItalic = 0;
    lf.lfHeight = 14;
    lf.lfWeight = FW_BOLD;
    _tcscpy(lf.lfFaceName, _T("Arial"));
    _tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"));
    m_LightGrid.GetDefaultCell(TRUE, FALSE)->SetFont(&lf);
    m_LightGrid.GetDefaultCell(FALSE, TRUE)->SetFont(&lf);
@@ -230,7 +230,7 @@
    lf.lfItalic = 0;
    lf.lfHeight = 14;
    lf.lfWeight = FW_BOLD;
    _tcscpy(lf.lfFaceName, _T("Arial"));
    _tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"));
    m_CameraGrid.GetDefaultCell(TRUE, FALSE)->SetFont(&lf);
    m_CameraGrid.GetDefaultCell(FALSE, TRUE)->SetFont(&lf);
EdgeInspector_App/View/ViewMain_HWSetting.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "btnenh.h"
#include "General_Draw.h"
@@ -8,7 +8,7 @@
#include "HardwareSettings.h"
#include "DlgLicenseInfo.h"
// CViewHWSetting æŽªæ‹³ æƒ‘磊涝聪促.
// CViewHWSetting æŽªæ‹³ æƒ‘磊涝聪促.
class CHardwareSettings;
class CViewMain_HWSetting : public CDialogEx
@@ -16,14 +16,14 @@
    DECLARE_DYNAMIC(CViewMain_HWSetting)
public:
    CViewMain_HWSetting(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CViewMain_HWSetting(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CViewMain_HWSetting();
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_MAIN_VIEW_HWSETTING };
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual BOOL OnInitDialog();
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    afx_msg void OnPaint();    
EdgeInspector_App/View/ViewMain_LiveCam.cpp
@@ -1,4 +1,4 @@
// ViewLiveCam.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// ViewLiveCam.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -7,7 +7,7 @@
#include "afxdialogex.h"
#include "Global_Define.h"
// CViewLiveCam æŽªæ‹³ æƒ‘磊涝聪促.
// CViewLiveCam æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CViewMain_LiveCam, CDialogEx)
@@ -52,7 +52,7 @@
    ON_EVENT(CViewMain_LiveCam, IDC_BTN_CAM_SNAP, DISPID_CLICK, CViewMain_LiveCam::OnBnClickedBtnCamSnap, VTS_NONE)    
END_EVENTSINK_MAP()
// CViewLiveCam çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
// CViewLiveCam çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
int  CViewMain_LiveCam::GetIndex(int nSide)
{
    int  nIndex = 0;
@@ -190,7 +190,7 @@
void CViewMain_LiveCam::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Š æ£º/肚绰 æ‰å¤¯è”¼é˜‘ é¾‹å…é’¦èªä¿ƒ.
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Š æ£º/肚绰 æ‰å¤¯è”¼é˜‘ é¾‹å…é’¦èªä¿ƒ.
    int nIndex;
EdgeInspector_App/View/ViewMain_LiveCam.h
@@ -1,7 +1,7 @@
#pragma once
#pragma once
#include "FrameImg.h"
// CViewLiveCam æŽªæ‹³ æƒ‘磊涝聪促.
// CViewLiveCam æŽªæ‹³ æƒ‘磊涝聪促.
class CHardwareSettings;
class CGlass_Data;
@@ -10,14 +10,14 @@
    DECLARE_DYNAMIC(CViewMain_LiveCam)
public:
    CViewMain_LiveCam(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CViewMain_LiveCam(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CViewMain_LiveCam();
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_MAIN_VIEW_LIVECAM };
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual BOOL OnInitDialog();
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
EdgeInspector_App/View/ViewMain_ScanImage.cpp
@@ -1,4 +1,4 @@
// ViewScanImage.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// ViewScanImage.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -20,7 +20,7 @@
};
// CViewScanImage æŽªæ‹³ æƒ‘磊涝聪促.
// CViewScanImage æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CViewMain_ScanImage, CDialogEx)
@@ -163,7 +163,7 @@
END_EVENTSINK_MAP()
// CViewScanImage çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
// CViewScanImage çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
BOOL CViewMain_ScanImage::OnInitDialog()
{
    UpdateData(FALSE);
@@ -970,7 +970,7 @@
void CViewMain_ScanImage::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Š æ£º/肚绰 æ‰å¤¯è”¼é˜‘ é¾‹å…é’¦èªä¿ƒ.
    // TODO: å’¯æ‰ä¿Š çš‹çŸ«ç˜¤ è´¸åºœæ‰ å†…靛甫 çœ å•Š æ£º/肚绰 æ‰å¤¯è”¼é˜‘ é¾‹å…é’¦èªä¿ƒ.
    if(!pScrollBar)
    {
        return CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
EdgeInspector_App/View/ViewMain_ScanImage.h
@@ -1,9 +1,9 @@
#pragma once
#pragma once
//#include "FrameImg.h"
#include "EdgeImageViewer.h"
#include "afxcmn.h"
// CViewScanImage æŽªæ‹³ æƒ‘磊涝聪促.
// CViewScanImage æŽªæ‹³ æƒ‘磊涝聪促.
class CHardwareSettings;
class CGlass_Data;
@@ -12,14 +12,14 @@
    DECLARE_DYNAMIC(CViewMain_ScanImage)
public:
    CViewMain_ScanImage(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CViewMain_ScanImage(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CViewMain_ScanImage();
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_MAIN_VIEW_SCANIMAGE };
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual BOOL OnInitDialog();
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    afx_msg void OnPaint();        
EdgeInspector_App/View/ViewMain_Status.cpp
@@ -1,4 +1,4 @@
// ViewMainStatus.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// ViewMainStatus.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -7,7 +7,7 @@
#include "afxdialogex.h"
// CViewMainStatus æŽªæ‹³ æƒ‘磊涝聪促.
// CViewMainStatus æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CViewMain_Status, CDialogEx)
@@ -31,7 +31,7 @@
END_MESSAGE_MAP()
// CViewMainStatus çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
// CViewMainStatus çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
BOOL CViewMain_Status::OnInitDialog(void)
{
EdgeInspector_App/View/ViewMain_Status.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "resource.h"
#include "Global_Define.h"
#include "StatusMonitor.h"
@@ -10,14 +10,14 @@
    DECLARE_DYNAMIC(CViewMain_Status)
public:
    CViewMain_Status(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CViewMain_Status(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CViewMain_Status();
    // æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    // æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_MAIN_VIEW_STATUS };
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual BOOL OnInitDialog(void);
    virtual BOOL PreTranslateMessage(MSG* pMsg);
EdgeInspector_App/View/ViewPPIDNew.cpp
@@ -1,9 +1,9 @@

#include "stdafx.h"
#include "ViewPPIDNew.h"
// CViewPPIDNew æŽªæ‹³ æƒ‘磊涝聪促.
// CViewPPIDNew æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CViewPPIDNew, CDialog)
@@ -35,7 +35,7 @@
    ON_EVENT(CViewPPIDNew, IDC_BTN_PPIDNEW_CANCEL, DISPID_CLICK, CViewPPIDNew::ClickBtnPpidnewCancel, VTS_NONE)
END_EVENTSINK_MAP()
// CViewPPIDNew çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
// CViewPPIDNew çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
BOOL CViewPPIDNew::OnInitDialog()
{
EdgeInspector_App/View/ViewPPIDNew.h
@@ -1,23 +1,23 @@
#pragma once
#pragma once
#include "EdgeInspector_App.h"
#include "General_Draw.h"
// CViewPPIDNew æŽªæ‹³ æƒ‘磊涝聪促.
// CViewPPIDNew æŽªæ‹³ æƒ‘磊涝聪促.
class CViewPPIDNew : public CDialog
{
    DECLARE_DYNAMIC(CViewPPIDNew)
public:
    CViewPPIDNew(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CViewPPIDNew(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CViewPPIDNew();
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_DLG_PPID_NEW };
protected:
    virtual BOOL OnInitDialog();
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    DECLARE_MESSAGE_MAP()
public:
EdgeInspector_App/View/ViewRecipeList.cpp
@@ -1,4 +1,4 @@

#include "stdafx.h"
#include "ViewRecipeList.h"
#include "ViewRecipeNew.h"
@@ -12,7 +12,7 @@
const TCHAR* PPIDLIST_COLUMN_ITEM[PPIDLIST_COLUMN_COUNT] = {_T("No"),_T("PLC Index"),_T("Recipe")};
const int PPIDLIST_COLUMN_WIDHT[PPIDLIST_COLUMN_COUNT] = {50,130,145};
// CViewRecipeList æŽªæ‹³ æƒ‘磊涝聪促.
// CViewRecipeList æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CViewRecipeList, CDialogEx)
@@ -113,7 +113,7 @@
    finder.Close();        
}
// CViewRecipeList çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
// CViewRecipeList çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
void CViewRecipeList::OnShowWindow(BOOL bShow, UINT nStatus)
{
@@ -238,7 +238,7 @@
    lf.lfItalic = 0;
    lf.lfHeight = 14;
    lf.lfWeight = FW_BOLD;
    _tcscpy(lf.lfFaceName, _T("Arial"));
    _tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"));
    m_ListRecipe.GetDefaultCell(TRUE, FALSE)->SetFont(&lf);
    m_ListRecipe.GetDefaultCell(FALSE, TRUE)->SetFont(&lf);
@@ -292,7 +292,7 @@
    lf.lfItalic = 0;
    lf.lfHeight = 14;
    lf.lfWeight = FW_BOLD;
    _tcscpy(lf.lfFaceName, _T("Arial"));
    _tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"));
    m_ListPPID.GetDefaultCell(TRUE, FALSE)->SetFont(&lf);
    m_ListPPID.GetDefaultCell(FALSE, TRUE)->SetFont(&lf);
EdgeInspector_App/View/ViewRecipeList.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "General_Draw.h"
@@ -9,7 +9,7 @@
#include "HardwareSettings.h"
#include "Glass_Data.h"
// CViewRecipeList æŽªæ‹³ æƒ‘磊涝聪促.
// CViewRecipeList æŽªæ‹³ æƒ‘磊涝聪促.
#define        UM_SELECT_RECIPE                    (WM_USER + 1001)
@@ -18,15 +18,15 @@
    DECLARE_DYNAMIC(CViewRecipeList)
public:
    CViewRecipeList(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CViewRecipeList(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CViewRecipeList();
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_DLG_RECIPE_LIST };
protected:
    virtual BOOL OnInitDialog();
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    
    afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
    afx_msg void OnBnClickedButListNewrecipe();
EdgeInspector_App/View/ViewRecipeNew.cpp
@@ -1,10 +1,10 @@
//
//
#include "stdafx.h"
#include "ViewRecipeNew.h"
// CViewRecipeNew æŽªæ‹³ æƒ‘磊涝聪促.
// CViewRecipeNew æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CViewRecipeNew, CDialog)
@@ -36,7 +36,7 @@
    ON_EVENT(CViewRecipeNew, IDC_BTN_RECIPENEW_OK, DISPID_CLICK, CViewRecipeNew::ClickBtnRecipenewOk, VTS_NONE)
    ON_EVENT(CViewRecipeNew, IDC_BTN_RECIPENEW_CANCEL, DISPID_CLICK, CViewRecipeNew::ClickBtnRecipenewCancel, VTS_NONE)
END_EVENTSINK_MAP()
// CViewRecipeNew çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
// CViewRecipeNew çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
BOOL CViewRecipeNew::OnInitDialog()
{    
EdgeInspector_App/View/ViewRecipeNew.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "EdgeInspector_App.h"
#include "General_Draw.h"
@@ -9,15 +9,15 @@
    DECLARE_DYNAMIC(CViewRecipeNew)
public:
    CViewRecipeNew(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CViewRecipeNew(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CViewRecipeNew();
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_DLG_RECIPE_NEW };
protected:
    virtual BOOL OnInitDialog();
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    afx_msg void OnPaint();
    afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);    
    DECLARE_MESSAGE_MAP()
EdgeInspector_App/ViewMain_Information.cpp
@@ -1,4 +1,4 @@
// ViewMainInformation.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// ViewMainInformation.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -7,7 +7,7 @@
#include "afxdialogex.h"
// CViewMainInformation æŽªæ‹³ æƒ‘磊涝聪促.
// CViewMainInformation æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CViewMain_Information, CDialogEx)
@@ -435,16 +435,16 @@
{
    CString strText;
    
    strText.Format(_T("%d"), g_pStatus->m_pTransData->m_nUnitNo);//研磨部
    strText.Format(_T("%d"), g_pStatus->m_pTransData->m_nUnitNo);//研磨部
    SetDlgItemText(IDC_STATIC_INSINFO_UNITNO, strText);
    strText.Format(_T("%d"), g_pStatus->m_pTransData->m_nEqpNo);//研磨段
    strText.Format(_T("%d"), g_pStatus->m_pTransData->m_nEqpNo);//研磨段
    SetDlgItemText(IDC_STATIC_INSINFO_EQPNO, strText);
    
    strText.Format(_T("%d"), g_pStatus->m_pTransData->m_nisGrind);//研磨棒
    strText.Format(_T("%d"), g_pStatus->m_pTransData->m_nisGrind);//研磨棒
    SetDlgItemText(IDC_STATIC_INSINFO_ISGRIND, strText);
    strText.Format(_T("%d"), g_pStatus->m_pTransData->m_nRoughPadLayer);//研磨棒使用寿命
    strText.Format(_T("%d"), g_pStatus->m_pTransData->m_nRoughPadLayer);//研磨棒使用寿命
    SetDlgItemText(IDC_STATIC_INSINFO_GLASS_ID, strText);
    strText.Format(_T("%d"), g_pStatus->m_pTransData->m_nHandNumber);//Stage No
EdgeInspector_App/ViewMain_Information.h
@@ -1,21 +1,21 @@
#pragma once
#pragma once
#include "GridCtrl.h"
// CViewMainInformation æŽªæ‹³ æƒ‘磊涝聪促.
// CViewMainInformation æŽªæ‹³ æƒ‘磊涝聪促.
class CViewMain_Information : public CDialogEx
{
    DECLARE_DYNAMIC(CViewMain_Information)
public:
    CViewMain_Information(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CViewMain_Information(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CViewMain_Information();
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
// æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_MAIN_VIEW_INFORMATION };
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual BOOL OnInitDialog();
    virtual BOOL PreTranslateMessage(MSG* pMsg);
EdgeInspector_App/ViewMain_Recipe.cpp
@@ -1,4 +1,4 @@
// ViewLedRecipeSetting.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
// ViewLedRecipeSetting.cpp : å¤‡æ³… é¢‡è€æ¶èªä¿ƒ.
//
#include "stdafx.h"
@@ -9,7 +9,7 @@
#include "ViewLampControl.h"
#include "DlgLogin.h"
#include "Global_Define.h"
// CViewLedRecipeSetting æŽªæ‹³ æƒ‘磊涝聪促.
// CViewLedRecipeSetting æŽªæ‹³ æƒ‘磊涝聪促.
IMPLEMENT_DYNAMIC(CViewMain_Recipe, CDialogEx)
@@ -150,7 +150,7 @@
END_MESSAGE_MAP()
// CViewLedRecipeSetting çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
// CViewLedRecipeSetting çš‹çŸ«ç˜¤ è´¸åºœæ‰æ¶èªä¿ƒ.
BEGIN_EVENTSINK_MAP(CViewMain_Recipe, CDialogEx)
    ON_EVENT(CViewMain_Recipe, IDC_BTN_IMG_LOAD, DISPID_CLICK, CViewMain_Recipe::ClickImgLoadButton, VTS_NONE)
    ON_EVENT(CViewMain_Recipe, IDC_BTN_IMG_SAVE, DISPID_CLICK, CViewMain_Recipe::ClickImgSaveButton, VTS_NONE)
@@ -309,10 +309,10 @@
#if HALCON_VISION_KEY
void CViewMain_Recipe::onMsgVisionEvent(int code, int eDir) {
    /* code */
    if (1 == code) {     //获取区域数据
    if (1 == code) {     //获取区域数据
        m_pThis->SetFrameRegion();
    }
    else if (2 == code) {    //获取效果
    else if (2 == code) {    //获取效果
        m_pThis->DispAllResult();
    }
}
@@ -906,7 +906,7 @@
        tickCount = GetTickCount();
        // æ€¥ç¶ç­‰ Recipe èæ²¥.
        // æ€¥ç¶ç­‰ Recipe èæ²¥.
        if (m_pDlgRecipe->WriteRecipeFile() == FALSE)        
        {
            AfxMessageBox(_T("Save Fail"), MB_OK | MB_ICONERROR);
@@ -989,7 +989,7 @@
void CViewMain_Recipe::DeleteVectorList()
{
    // Vector æ˜åŠ›
    // Vector æ˜åŠ›
    LinkList* pList = NULL;
    for (VectorLinkListIt it = m_VectorLinkList.begin(); it != m_VectorLinkList.end(); it++)
    {
@@ -1076,7 +1076,7 @@
{
    if(strRecipe.IsEmpty() == TRUE)
    {
        //AfxMessageBox("Recipe Name捞 ç»åš¼èªä¿ƒ.");
        //AfxMessageBox("Recipe Name捞 ç»åš¼èªä¿ƒ.");
        return FALSE;    
    }
@@ -3166,7 +3166,7 @@
{
    CPaintDC dc(this);
    DrawMarkImage();    // æ æžèŠ­ ç§¦æ‹Žå…·çˆ¶ è´¸æ¾œä¿Š ä»˜å†œ æžå›ºç˜¤å•Š å¼Šå¦¨é¾™é³–..
    DrawMarkImage();    // æ æžèŠ­ ç§¦æ‹Žå…·çˆ¶ è´¸æ¾œä¿Š ä»˜å†œ æžå›ºç˜¤å•Š å¼Šå¦¨é¾™é³–..
}
void CViewMain_Recipe::ClickButtonOpenExceptionSettingView()
@@ -3191,7 +3191,7 @@
void CViewMain_Recipe::ClickButtonVisionSetting()
{
    // TODO: åœ¨æ­¤å¤„添加消息处理程序代码
    // TODO: åœ¨æ­¤å¤„添加消息处理程序代码
#if HALCON_VISION_KEY
    IVisionRecipe* pInstance = BlVision_GetVisionRecipe();
    if (!pInstance->getVisionUse()) {
EdgeInspector_App/ViewMain_Recipe.h
@@ -1,4 +1,4 @@
#pragma once
#pragma once
#include "btnenh.h"
#include "General_Draw.h"
@@ -14,21 +14,21 @@
#include "ViewLampControl.h"
#include "ViewRecipeList.h"
// CViewLedRecipeSetting æŽªæ‹³ æƒ‘磊涝聪促.
// CViewLedRecipeSetting æŽªæ‹³ æƒ‘磊涝聪促.
class CViewMain_Recipe : public CDialogEx
{
    DECLARE_DYNAMIC(CViewMain_Recipe)
public:
    CViewMain_Recipe(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    CViewMain_Recipe(CWnd* pParent = NULL);   // é’Žéœ– ç§¯å·±ç£Šæ¶èªä¿ƒ.
    virtual ~CViewMain_Recipe();
    // æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    // æŽªæ‹³ æƒ‘磊 å•捞磐涝聪促.
    enum { IDD = IDD_MAIN_VIEW_RECIPE };
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ç˜¤ç›”涝聪促.
    virtual BOOL OnInitDialog();
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    LRESULT OnProcessStatus(WPARAM wParam, LPARAM lParam);
EdgeInspector_App/WebSocket/ThreadPool.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "ThreadPool.h"
ThreadPool::ThreadPool(size_t thread_count) : m_stop(false) {
EdgeInspector_App/WebSocket/ThreadPool.h
@@ -1,4 +1,4 @@
#ifndef THREADPOOL_H
#ifndef THREADPOOL_H
#define THREADPOOL_H
#include <vector>
@@ -15,7 +15,7 @@
    explicit ThreadPool(size_t thread_count);
    ~ThreadPool();
    // æäº¤ä»»åŠ¡
    // æäº¤ä»»åŠ¡
    template<class F>
    void enqueue(F&& task) {
        {
EdgeInspector_App/WebSocket/WebSocketClient.cpp
@@ -1,13 +1,13 @@
#include "stdafx.h"
#include "stdafx.h"
#include "WebSocketClient.h"
//WebSocketClient::WebSocketClient() : m_connected(false), m_reconnect(true), m_close_done(false), m_message_received(false), m_heartbeat_interval(5) {
//    // æ¸…除之前的客户端配置并重新初始化
//    // æ¸…除之前的客户端配置并重新初始化
//    m_client.clear_access_channels(websocketpp::log::alevel::all);
//    m_client.clear_error_channels(websocketpp::log::elevel::all);
//    m_client.init_asio();
//
//    // è®¾ç½®äº‹ä»¶å›žè°ƒ
//    // è®¾ç½®äº‹ä»¶å›žè°ƒ
//    m_client.set_open_handler([this](websocketpp::connection_hdl hdl) { on_open(hdl); });
//    m_client.set_message_handler([this](websocketpp::connection_hdl hdl, message_ptr msg) { on_message(hdl, msg); });
//    m_client.set_close_handler([this](websocketpp::connection_hdl hdl) { on_close(hdl); });
@@ -27,7 +27,7 @@
//        m_client.clear_access_channels(websocketpp::log::alevel::all);
//        m_client.clear_error_channels(websocketpp::log::elevel::all);
//
//        std::lock_guard<std::mutex> lock(m_mutex);  // ä¿æŠ¤å…±äº«èµ„源
//        std::lock_guard<std::mutex> lock(m_mutex);  // ä¿æŠ¤å…±äº«èµ„源
//        auto con = m_client.get_connection(uri, ec);
//
//        if (ec) {
@@ -39,7 +39,7 @@
//        m_client.connect(con);
//    }
//
//    // å¯åŠ¨å·¥ä½œçº¿ç¨‹
//    // å¯åŠ¨å·¥ä½œçº¿ç¨‹
//    m_thread = std::thread(&WebSocketClient::run, this);
//}
//
@@ -95,9 +95,9 @@
//        std::string message = m_message_queue.front();
//        m_message_queue.pop();
//
//        send(message); // å‘送消息
//        send(message); // å‘送消息
//
//        set_busy(false); // è®¾ç½®ä¸ºç©ºé—²çŠ¶æ€ï¼Œå¹¶å¤„ç†ä¸‹ä¸€ä¸ª
//        set_busy(false); // è®¾ç½®ä¸ºç©ºé—²çŠ¶æ€ï¼Œå¹¶å¤„ç†ä¸‹ä¸€ä¸ª
//        process_next_message();
//    }
//}
@@ -108,9 +108,9 @@
//        std::vector<char> binary_data = m_binary_queue.front();
//        m_binary_queue.pop();
//
//        send_binary(binary_data); // å‘送二进制数据
//        send_binary(binary_data); // å‘送二进制数据
//
//        set_busy(false); // è®¾ç½®ä¸ºç©ºé—²çŠ¶æ€ï¼Œå¹¶å¤„ç†ä¸‹ä¸€ä¸ª
//        set_busy(false); // è®¾ç½®ä¸ºç©ºé—²çŠ¶æ€ï¼Œå¹¶å¤„ç†ä¸‹ä¸€ä¸ª
//        process_next_binary();
//    }
//}
@@ -120,7 +120,7 @@
//    m_message_received = false;
//
//    if (m_connected.load()) {
//        // å‘送消息
//        // å‘送消息
//        websocketpp::lib::error_code ec;
//        m_client.send(m_hdl, message, websocketpp::frame::opcode::text, ec);
//        if (ec) {
@@ -128,7 +128,7 @@
//            return false;
//        }
//
//        // ç­‰å¾…消息或超时
//        // ç­‰å¾…消息或超时
//        if (m_cv.wait_for(lock, std::chrono::milliseconds(timeout_ms), [this]() { return m_message_received; })) {
//            std::cout << "Server response received." << std::endl;
//            return true;
@@ -148,7 +148,7 @@
//    m_message_received = false;
//
//    if (m_connected.load()) {
//        // å‘送消息
//        // å‘送消息
//        websocketpp::lib::error_code ec;
//        m_client.send(m_hdl, binary_data.data(), binary_data.size(), websocketpp::frame::opcode::binary, ec);
//        if (ec) {
@@ -156,7 +156,7 @@
//            return false;
//        }
//
//        // ç­‰å¾…消息或超时
//        // ç­‰å¾…消息或超时
//        if (m_cv.wait_for(lock, std::chrono::milliseconds(timeout_ms), [this]() { return m_message_received; })) {
//            std::cout << "Server response received." << std::endl;
//            return true;
@@ -275,29 +275,29 @@
//    }
//
//    m_message_received = true;
//    m_cv.notify_one();  // å”¤é†’等待线程
//    m_cv.notify_one();  // å”¤é†’等待线程
//}
//
//void WebSocketClient::on_close(connection_hdl hdl) {
//    std::cout << "Connection closed." << std::endl;
//    std::lock_guard<std::mutex> lock(m_mutex);
//
//    m_hdl.reset();  // æ¸…空连接句柄
//    m_hdl.reset();  // æ¸…空连接句柄
//    m_connected.store(false);
//    if (m_close_handler) {
//        m_close_handler();
//    }
//
//    // å¦‚果需要重连
//    // å¦‚果需要重连
//    if (m_reconnect.load()) {
//
//        // åœæ­¢å½“前运行的事件循环
//        // åœæ­¢å½“前运行的事件循环
//        //m_client.stop();
//        //if (m_thread.joinable()) {
//        //    m_thread.join();
//        //}
//        std::cerr << "Connection lost. Attempting to reconnect..." << std::endl;
//        //reconnect();  // å¯åŠ¨é‡è¿žæœºåˆ¶
//        //reconnect();  // å¯åŠ¨é‡è¿žæœºåˆ¶
//    }
//    else {
//        m_cv.notify_one();
EdgeInspector_App/WebSocket/WebSocketClient.h
@@ -1,4 +1,4 @@
#ifndef WEBSOCKETCLIENT_H
#ifndef WEBSOCKETCLIENT_H
#define WEBSOCKETCLIENT_H
//#include <websocketpp/config/asio_no_tls_client.hpp>
@@ -27,62 +27,62 @@
//    WebSocketClient();
//    ~WebSocketClient();
//
//    // è¿žæŽ¥åˆ°æŒ‡å®šçš„URI
//    // è¿žæŽ¥åˆ°æŒ‡å®šçš„URI
//    void connect(const std::string& uri);
//
//    // å¢žåŠ å®¢æˆ·ç«¯çš„çŠ¶æ€æ ‡è¯†
//    // å¢žåŠ å®¢æˆ·ç«¯çš„çŠ¶æ€æ ‡è¯†
//    bool is_busy() const;
//    void set_busy(bool busy);
//
//    // å‘送文本消息
//    // å‘送文本消息
//    void send(const std::string& message);
//
//    // å‘送二进制数据
//    // å‘送二进制数据
//    void send_binary(const std::vector<char>& binary_data);
//
//    // é€šè¿‡é˜Ÿåˆ—发送文本消息
//    // é€šè¿‡é˜Ÿåˆ—发送文本消息
//    void enqueue_message(const std::string& message);
//
//    // é€šè¿‡é˜Ÿåˆ—发送二进制数据
//    // é€šè¿‡é˜Ÿåˆ—发送二进制数据
//    void enqueue_binary(const std::vector<char>& binary_data);
//
//    // å¤„理下一个消息
//    // å¤„理下一个消息
//    void process_next_message();
//    void process_next_binary();
//
//    // å‘送文本消息并等待回复
//    // å‘送文本消息并等待回复
//    bool send_and_wait(const std::string& message, int timeout_ms);
//
//    // å‘送二进制数据并等待回复
//    // å‘送二进制数据并等待回复
//    bool send_binary_and_wait(const std::vector<char>& binary_data, int timeout_ms);
//
//    // å…³é—­è¿žæŽ¥
//    // å…³é—­è¿žæŽ¥
//    void close();
//
//    // è®¾ç½®å„种回调函数
//    // è®¾ç½®å„种回调函数
//    void set_open_handler(OpenHandler handler);
//    void set_message_handler(MessageHandler handler);
//    void set_close_handler(CloseHandler handler);
//    void set_fail_handler(FailHandler handler);
//    void set_pong_handler(PongHandler handler);
//
//    // è®¾ç½®å¿ƒè·³é—´éš”(单位:秒)
//    // è®¾ç½®å¿ƒè·³é—´éš”(单位:秒)
//    void set_heartbeat_interval(int interval);
//
//    // èŽ·å–å½“å‰è¿žæŽ¥çš„URL
//    // èŽ·å–å½“å‰è¿žæŽ¥çš„URL
//    std::string get_current_url();
//
//    // æ£€æŸ¥å½“前连接是否仍然有效
//    // æ£€æŸ¥å½“前连接是否仍然有效
//    bool is_connected() const;
//
//private:
//    // WebSocket è¿è¡Œå‡½æ•°
//    // WebSocket è¿è¡Œå‡½æ•°
//    void run();
//
//    // å¿ƒè·³æ£€æŸ¥å‡½æ•°
//    // å¿ƒè·³æ£€æŸ¥å‡½æ•°
//    void heartbeat();
//
//    // å›žè°ƒå‡½æ•°è§¦å‘器
//    // å›žè°ƒå‡½æ•°è§¦å‘器
//    void on_open(websocketpp::connection_hdl hdl);
//    void on_message(connection_hdl hdl, message_ptr msg);
//    void on_close(websocketpp::connection_hdl hdl);
@@ -90,13 +90,13 @@
//    void on_pong(websocketpp::connection_hdl hdl, const std::string& payload);
//
//private:
//    // WebSocket客户端实例
//    // WebSocket客户端实例
//    client m_client;
//
//    // WebSocket è¿žæŽ¥å¥æŸ„
//    // WebSocket è¿žæŽ¥å¥æŸ„
//    connection_hdl m_hdl;
//
//    // çº¿ç¨‹ç›¸å…³
//    // çº¿ç¨‹ç›¸å…³
//    std::thread m_thread;
//    std::thread m_heartbeat_thread;
//    std::atomic<bool> m_connected;
@@ -104,21 +104,21 @@
//    int m_heartbeat_interval;
//    bool m_message_received;
//
//    // å‘送队列
//    // å‘送队列
//    std::queue<std::string> m_message_queue;
//    std::queue<std::vector<char>> m_binary_queue;
//
//    // æ ‡è¯†å®¢æˆ·ç«¯æ˜¯å¦å¿™ç¢Œ
//    // æ ‡è¯†å®¢æˆ·ç«¯æ˜¯å¦å¿™ç¢Œ
//    std::atomic<bool> m_busy; 
//
//    // çº¿ç¨‹åŒæ­¥ç›¸å…³
//    // çº¿ç¨‹åŒæ­¥ç›¸å…³
//    bool m_close_done;
//    std::condition_variable m_cv;
//
//    // äº’斥锁,用于保护共享资源
//    // äº’斥锁,用于保护共享资源
//    std::mutex m_mutex;
//
//    // å›žè°ƒå‡½æ•°
//    // å›žè°ƒå‡½æ•°
//    OpenHandler m_open_handler;
//    MessageHandler m_message_handler;
//    CloseHandler m_close_handler;
EdgeInspector_App/WebSocket/WebSocketClientPool.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "WebSocketClientPool.h"
//WebSocketClientPool::WebSocketClientPool(size_t thread_count) : m_thread_pool(thread_count) {}
@@ -33,7 +33,7 @@
//        }
//    }
//
//    // æ¸…空之前的客户端,确保是干净的状态
//    // æ¸…空之前的客户端,确保是干净的状态
//    m_clients.clear();
//}
//
@@ -62,148 +62,148 @@
//bool WebSocketClientPool::post_to_idle_client(const std::string& message) {
//    for (auto& client : m_clients) {
//        if (client->is_connected()) {
//            // æäº¤å‘送任务到线程池
//            // æäº¤å‘送任务到线程池
//            m_thread_pool.enqueue([client, message]() {
//                client->set_busy(true);   // æ ‡è®°ä¸ºå¿™ç¢Œ
//                client->send(message);    // å‘送消息
//                client->set_busy(false);  // å®ŒæˆåŽæ ‡è®°ä¸ºç©ºé—²
//                client->set_busy(true);   // æ ‡è®°ä¸ºå¿™ç¢Œ
//                client->send(message);    // å‘送消息
//                client->set_busy(false);  // å®ŒæˆåŽæ ‡è®°ä¸ºç©ºé—²
//            });
//            return true; // æˆåŠŸæäº¤ä»»åŠ¡
//            return true; // æˆåŠŸæäº¤ä»»åŠ¡
//        }
//    }
//    return false; // æ²¡æœ‰å¯ç”¨å®¢æˆ·ç«¯
//    return false; // æ²¡æœ‰å¯ç”¨å®¢æˆ·ç«¯
//}
//
//bool WebSocketClientPool::post_binary_to_idle_client(const std::vector<char>& binary_data) {
//    for (auto& client : m_clients) {
//        if (client->is_connected()) {
//            // æäº¤å‘送任务到线程池
//            // æäº¤å‘送任务到线程池
//            m_thread_pool.enqueue([client, binary_data]() {
//                client->set_busy(true);   // æ ‡è®°ä¸ºå¿™ç¢Œ
//                client->send_binary(binary_data); // å‘送二进制数据
//                client->set_busy(false);  // å®ŒæˆåŽæ ‡è®°ä¸ºç©ºé—²
//                client->set_busy(true);   // æ ‡è®°ä¸ºå¿™ç¢Œ
//                client->send_binary(binary_data); // å‘送二进制数据
//                client->set_busy(false);  // å®ŒæˆåŽæ ‡è®°ä¸ºç©ºé—²
//            });
//            return true; // æˆåŠŸæäº¤ä»»åŠ¡
//            return true; // æˆåŠŸæäº¤ä»»åŠ¡
//        }
//    }
//    return false; // æ²¡æœ‰å¯ç”¨å®¢æˆ·ç«¯
//    return false; // æ²¡æœ‰å¯ç”¨å®¢æˆ·ç«¯
//}
//
//bool WebSocketClientPool::send_to_idle_client(const std::string& message, int timeout_ms) {
//    for (auto& client : m_clients) {
//        if (!client->is_busy() && client->is_connected()) {
//            // æ ‡è®°ä¸ºå¿™
//            // æ ‡è®°ä¸ºå¿™
//            client->set_busy(true);
//
//            // ä½¿ç”¨çº¿ç¨‹æ± å‘送消息
//            // ä½¿ç”¨çº¿ç¨‹æ± å‘送消息
//            m_thread_pool.enqueue([client, message, timeout_ms]() {
//                // å‘送消息并等待服务器回复
//                client->send_and_wait(message, timeout_ms); // 5秒超时
//                client->set_busy(false); // æ ‡è®°ä¸ºç©ºé—²
//                // å‘送消息并等待服务器回复
//                client->send_and_wait(message, timeout_ms); // 5秒超时
//                client->set_busy(false); // æ ‡è®°ä¸ºç©ºé—²
//            });
//
//            return true; // æˆåŠŸå‘é€æ¶ˆæ¯ï¼Œè¿”å›ž true
//            return true; // æˆåŠŸå‘é€æ¶ˆæ¯ï¼Œè¿”å›ž true
//        }
//    }
//    return false; // æ²¡æœ‰ç©ºé—²å®¢æˆ·ç«¯
//    return false; // æ²¡æœ‰ç©ºé—²å®¢æˆ·ç«¯
//}
//
//bool WebSocketClientPool::send_binary_to_idle_client(const std::vector<char>& binary_data, int timeout_ms) {
//    for (auto& client : m_clients) {
//        if (!client->is_busy() && client->is_connected()) {
//            // æ ‡è®°ä¸ºå¿™
//            // æ ‡è®°ä¸ºå¿™
//            client->set_busy(true);
//
//            // ä½¿ç”¨çº¿ç¨‹æ± å‘送消息
//            // ä½¿ç”¨çº¿ç¨‹æ± å‘送消息
//            m_thread_pool.enqueue([client, binary_data, timeout_ms]() {
//                // å‘送消息并等待服务器回复
//                // å‘送消息并等待服务器回复
//                client->send_binary_and_wait(binary_data, timeout_ms);
//                client->set_busy(false); // æ ‡è®°ä¸ºç©ºé—²
//                client->set_busy(false); // æ ‡è®°ä¸ºç©ºé—²
//            });
//
//            return true; // æˆåŠŸå‘é€æ¶ˆæ¯ï¼Œè¿”å›ž true
//            return true; // æˆåŠŸå‘é€æ¶ˆæ¯ï¼Œè¿”å›ž true
//        }
//    }
//    return false; // æ²¡æœ‰ç©ºé—²å®¢æˆ·ç«¯
//    return false; // æ²¡æœ‰ç©ºé—²å®¢æˆ·ç«¯
//}
//
//bool WebSocketClientPool::send_to_idle_client_and_wait(const std::string& message, int timeout_ms) {
//    for (auto& client : m_clients) {
//        if (!client->is_busy() && client->is_connected()) {
//            client->set_busy(true); // æ ‡è®°ä¸ºå¿™
//            client->set_busy(true); // æ ‡è®°ä¸ºå¿™
//
//            try {
//                // ç›´æŽ¥åœ¨å½“前线程调用 send_and_wait,阻塞直到任务完成
//                // ç›´æŽ¥åœ¨å½“前线程调用 send_and_wait,阻塞直到任务完成
//                bool result = client->send_and_wait(message, timeout_ms);
//                client->set_busy(false); // è®¾ç½®ä¸ºç©ºé—²çŠ¶æ€
//                return result; // è¿”回结果
//                client->set_busy(false); // è®¾ç½®ä¸ºç©ºé—²çŠ¶æ€
//                return result; // è¿”回结果
//            }
//            catch (const std::exception& e) {
//                std::cerr << "Exception during sending: " << e.what() << std::endl;
//                client->set_busy(false); // å³ä½¿å‘生异常,也要重置为未忙状态
//                return false; // å‘生异常,返回失败
//                client->set_busy(false); // å³ä½¿å‘生异常,也要重置为未忙状态
//                return false; // å‘生异常,返回失败
//            }
//        }
//    }
//    return false; // æ²¡æœ‰ç©ºé—²å®¢æˆ·ç«¯
//    return false; // æ²¡æœ‰ç©ºé—²å®¢æˆ·ç«¯
//}
//
//bool WebSocketClientPool::send_binary_to_idle_client_and_wait(const std::vector<char>& binary_data, int timeout_ms) {
//    for (auto& client : m_clients) {
//        if (!client->is_busy() && client->is_connected()) {
//            client->set_busy(true); // æ ‡è®°ä¸ºå¿™
//            client->set_busy(true); // æ ‡è®°ä¸ºå¿™
//
//            try {
//                // ç›´æŽ¥åœ¨å½“前线程调用 send_and_wait,阻塞直到任务完成
//                // ç›´æŽ¥åœ¨å½“前线程调用 send_and_wait,阻塞直到任务完成
//                bool result = client->send_binary_and_wait(binary_data, timeout_ms);
//                client->set_busy(false); // è®¾ç½®ä¸ºç©ºé—²çŠ¶æ€
//                return result; // è¿”回结果
//                client->set_busy(false); // è®¾ç½®ä¸ºç©ºé—²çŠ¶æ€
//                return result; // è¿”回结果
//            }
//            catch (const std::exception& e) {
//                std::cerr << "Exception during sending: " << e.what() << std::endl;
//                client->set_busy(false); // å³ä½¿å‘生异常,也要重置为未忙状态
//                return false; // å‘生异常,返回失败
//                client->set_busy(false); // å³ä½¿å‘生异常,也要重置为未忙状态
//                return false; // å‘生异常,返回失败
//            }
//        }
//    }
//    return false; // æ²¡æœ‰ç©ºé—²å®¢æˆ·ç«¯
//    return false; // æ²¡æœ‰ç©ºé—²å®¢æˆ·ç«¯
//}
//
//bool WebSocketClientPool::send_to_idle_client_with_retry(const std::string& message, int total_timeout_ms, int retry_interval_ms) {
//    auto start_time = std::chrono::steady_clock::now();
//
//    while (true) {
//        // æŸ¥æ‰¾ç©ºé—²å®¢æˆ·ç«¯
//        // æŸ¥æ‰¾ç©ºé—²å®¢æˆ·ç«¯
//        for (auto& client : m_clients) {
//            if (!client->is_busy() && client->is_connected()) {
//                // æ ‡è®°ä¸ºå¿™
//                // æ ‡è®°ä¸ºå¿™
//                client->set_busy(true);
//
//                // ä½¿ç”¨çº¿ç¨‹æ± å‘送消息
//                // ä½¿ç”¨çº¿ç¨‹æ± å‘送消息
//                m_thread_pool.enqueue([client, message]() {
//                    try {
//                        // å‘送消息并等待服务器回复
//                        client->send_and_wait(message, 5000); // è¿™é‡Œçš„超时可以根据需要调整
//                        // å‘送消息并等待服务器回复
//                        client->send_and_wait(message, 5000); // è¿™é‡Œçš„超时可以根据需要调整
//                    }
//                    catch (const std::exception& e) {
//                        std::cerr << "Error sending data: " << e.what() << std::endl;
//                    }
//                    client->set_busy(false); // æ ‡è®°ä¸ºç©ºé—²
//                    client->set_busy(false); // æ ‡è®°ä¸ºç©ºé—²
//                });
//
//                return true; // æˆåŠŸå‘é€
//                return true; // æˆåŠŸå‘é€
//            }
//        }
//
//        // è®¡ç®—已使用的时间
//        // è®¡ç®—已使用的时间
//        auto elapsed_time = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - start_time).count();
//
//        if (elapsed_time >= total_timeout_ms) {
//            std::cerr << "Timeout: failed to send data within the specified timeout of " << total_timeout_ms << " ms." << std::endl;
//            return false; // è¶…时,无法发送
//            return false; // è¶…时,无法发送
//        }
//
//        // æ²¡æœ‰æ‰¾åˆ°ç©ºé—²å®¢æˆ·ç«¯ï¼Œç­‰å¾… retry_interval_ms æ¯«ç§’后重试
//        // æ²¡æœ‰æ‰¾åˆ°ç©ºé—²å®¢æˆ·ç«¯ï¼Œç­‰å¾… retry_interval_ms æ¯«ç§’后重试
//        std::this_thread::sleep_for(std::chrono::milliseconds(retry_interval_ms));
//    }
//}
@@ -212,37 +212,37 @@
//    auto start_time = std::chrono::steady_clock::now();
//
//    while (true) {
//        // æŸ¥æ‰¾ç©ºé—²å®¢æˆ·ç«¯
//        // æŸ¥æ‰¾ç©ºé—²å®¢æˆ·ç«¯
//        for (auto& client : m_clients) {
//            if (!client->is_busy() && client->is_connected()) {
//                // æ ‡è®°ä¸ºå¿™
//                // æ ‡è®°ä¸ºå¿™
//                client->set_busy(true);
//
//                // ä½¿ç”¨çº¿ç¨‹æ± å‘送消息
//                // ä½¿ç”¨çº¿ç¨‹æ± å‘送消息
//                m_thread_pool.enqueue([client, binary_data = std::move(binary_data)]() mutable {
//                    try {
//                        // å‘送消息并等待服务器回复
//                        client->send_binary_and_wait(binary_data, 5000); // è¿™é‡Œçš„超时可以根据需要调整
//                        // å‘送消息并等待服务器回复
//                        client->send_binary_and_wait(binary_data, 5000); // è¿™é‡Œçš„超时可以根据需要调整
//                    }
//                    catch (const std::exception& e) {
//                        std::cerr << "Error sending binary data: " << e.what() << std::endl;
//                    }
//                    client->set_busy(false); // æ ‡è®°ä¸ºç©ºé—²
//                    client->set_busy(false); // æ ‡è®°ä¸ºç©ºé—²
//                });
//
//                return true; // æˆåŠŸå‘é€
//                return true; // æˆåŠŸå‘é€
//            }
//        }
//
//        // è®¡ç®—已使用的时间
//        // è®¡ç®—已使用的时间
//        auto elapsed_time = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - start_time).count();
//
//        if (elapsed_time >= total_timeout_ms) {
//            std::cerr << "Timeout: failed to send data within the specified timeout of " << total_timeout_ms << " ms." << std::endl;
//            return false; // è¶…时,无法发送
//            return false; // è¶…时,无法发送
//        }
//
//        // æ²¡æœ‰æ‰¾åˆ°ç©ºé—²å®¢æˆ·ç«¯ï¼Œç­‰å¾… retry_interval_ms æ¯«ç§’后重试
//        // æ²¡æœ‰æ‰¾åˆ°ç©ºé—²å®¢æˆ·ç«¯ï¼Œç­‰å¾… retry_interval_ms æ¯«ç§’后重试
//        std::this_thread::sleep_for(std::chrono::milliseconds(retry_interval_ms));
//    }
//}
EdgeInspector_App/WebSocket/WebSocketClientPool.h
@@ -1,4 +1,4 @@
#ifndef WEBSOCKETCLIENTWITHPOOL_H
#ifndef WEBSOCKETCLIENTWITHPOOL_H
#define WEBSOCKETCLIENTWITHPOOL_H
//#include "WebSocketClient.h"
@@ -9,33 +9,33 @@
//    explicit WebSocketClientPool(size_t thread_count);
//    ~WebSocketClientPool();
//
//    // åˆå§‹åŒ–客户端
//    // åˆå§‹åŒ–客户端
//    void init_clients(const std::vector<std::string>& uris);
//
//    // é€€å‡ºæ‰€æœ‰å®¢æˆ·ç«¯
//    // é€€å‡ºæ‰€æœ‰å®¢æˆ·ç«¯
//    void exit_clients();
//
//    // ä½¿ç”¨çº¿ç¨‹æ± å‘送消息
//    // ä½¿ç”¨çº¿ç¨‹æ± å‘送消息
//    void post_to_all(const std::string& message);
//    void post_binary_to_all(const std::vector<char>& binary_data);
//
//    // ä»Žæ± ä¸­é€‰æ‹©ä¸€ä¸ªç©ºé—²çš„客户端进行发送,不需要服务器响应
//    // ä»Žæ± ä¸­é€‰æ‹©ä¸€ä¸ªç©ºé—²çš„客户端进行发送,不需要服务器响应
//    bool post_to_idle_client(const std::string& message);
//    bool post_binary_to_idle_client(const std::vector<char>& binary_data);
//
//    // ä»Žæ± ä¸­é€‰æ‹©ä¸€ä¸ªç©ºé—²çš„客户端进行发送,并需要服务器响应
//    // ä»Žæ± ä¸­é€‰æ‹©ä¸€ä¸ªç©ºé—²çš„客户端进行发送,并需要服务器响应
//    bool send_to_idle_client(const std::string& message, int timeout_ms);
//    bool send_binary_to_idle_client(const std::vector<char>& binary_data, int timeout_ms);
//
//    // ä»Žæ± ä¸­é€‰æ‹©ä¸€ä¸ªç©ºé—²çš„客户端进行发送,并等待服务器响应
//    // ä»Žæ± ä¸­é€‰æ‹©ä¸€ä¸ªç©ºé—²çš„客户端进行发送,并等待服务器响应
//    bool send_to_idle_client_and_wait(const std::string& message, int timeout_ms);
//    bool send_binary_to_idle_client_and_wait(const std::vector<char>& binary_data, int timeout_ms);
//
//    // ä»Žæ± ä¸­é€‰æ‹©ä¸€ä¸ªç©ºé—²çš„客户端进行发送,并等待服务器响应,如果超时则重试
//    // ä»Žæ± ä¸­é€‰æ‹©ä¸€ä¸ªç©ºé—²çš„客户端进行发送,并等待服务器响应,如果超时则重试
//    bool send_to_idle_client_with_retry(const std::string& message, int total_timeout_ms, int retry_interval_ms);
//    bool send_binary_to_idle_client_with_retry(std::vector<char>&& binary_data, int total_timeout_ms, int retry_interval_ms);
//
//    // è®¾ç½® WebSocket å®¢æˆ·ç«¯äº‹ä»¶å¤„理程序
//    // è®¾ç½® WebSocket å®¢æˆ·ç«¯äº‹ä»¶å¤„理程序
//    void set_open_handler(WebSocketClient::OpenHandler handler);
//    void set_message_handler(WebSocketClient::MessageHandler handler);
//    void set_close_handler(WebSocketClient::CloseHandler handler);
EdgeInspector_App/resource.h
Binary files differ
EdgeInspector_App/stdafx.cpp
@@ -1,7 +1,7 @@
// stdafx.cpp : é’Žéœ– å™¨çªƒ é¢‡è€çˆ¶ ç”¸ç»¢ ä¹ç»° å®¶èƒ¶ é¢‡è€æ¶èªä¿ƒ.
// EdgeInspector_App.pchç»° å›ºåºœ å“ªé¢‡è€ç­‰ åº†æ­¹å•Š é‚“èªä¿ƒ.
// stdafx.obj俊绰 å›ºåºœ å“ªé¢‡è€ç­‰ å±ˆä¾¥ æ²¥ç„Šå•Š å™¨çªƒé‚“èªä¿ƒ.

// stdafx.cpp : é’Žéœ– å™¨çªƒ é¢‡è€çˆ¶ ç”¸ç»¢ ä¹ç»° å®¶èƒ¶ é¢‡è€æ¶èªä¿ƒ.
// EdgeInspector_App.pchç»° å›ºåºœ å“ªé¢‡è€ç­‰ åº†æ­¹å•Š é‚“èªä¿ƒ.
// stdafx.obj俊绰 å›ºåºœ å“ªé¢‡è€ç­‰ å±ˆä¾¥ æ²¥ç„Šå•Š å™¨çªƒé‚“èªä¿ƒ.
#include "stdafx.h"
EdgeInspector_App/stdafx.h
@@ -1,7 +1,7 @@
// stdafx.h : ç£Šæž— è¤ä¾©çªç˜¤çˆ¶ ç£Šæž— å‡½ç‰ˆç™»ç˜¤ç»° è‡¼ç»°
// é’Žéœ– çŸ«èƒ¶è¢ å™¨çªƒ é¢‡è€ æ£º æ©‡è‚ºç’ƒé£˜ åŒ…访 å™¨çªƒ é¢‡è€æž
// ç”¸ç»¢ ä¹ç»° å™¨çªƒ é¢‡è€æ¶èªä¿ƒ.

// stdafx.h : ç£Šæž— è¤ä¾©çªç˜¤çˆ¶ ç£Šæž— å‡½ç‰ˆç™»ç˜¤ç»° è‡¼ç»°
// é’Žéœ– çŸ«èƒ¶è¢ å™¨çªƒ é¢‡è€ æ£º æ©‡è‚ºç’ƒé£˜ åŒ…访 å™¨çªƒ é¢‡è€æž
// ç”¸ç»¢ ä¹ç»° å™¨çªƒ é¢‡è€æ¶èªä¿ƒ.
#pragma once
@@ -10,32 +10,32 @@
#endif
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // èŠ­ç‹¼ è¤ä¾©ç™»ç˜¤ è‡¼ç»° éƒ´ä¾©ç¯® Windows åº†æ­¹ä¿Šè¾‘ åŠ›å¯‡é’¦èªä¿ƒ.
#define VC_EXTRALEAN            // èŠ­ç‹¼ è¤ä¾©ç™»ç˜¤ è‡¼ç»° éƒ´ä¾©ç¯® Windows åº†æ­¹ä¿Šè¾‘ åŠ›å¯‡é’¦èªä¿ƒ.
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // è€ä½• CString ç§¯å·±ç£Šç»° ç–™çŸ«åˆ©æ è‚º æ€¥æ”«é‚“聪促.
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // è€ä½• CString ç§¯å·±ç£Šç»° ç–™çŸ«åˆ©æ è‚º æ€¥æ”«é‚“聪促.
// MFC狼 å‚çƒ¹ ä½•盒苞 å…¬çŸ« å•Šç“·èŒ„ ç‰ˆç»Š çš‹çŸ«ç˜¤ä¿Š æŽªèŒ„ è§æ‰æ‰ç”« ç§¦åŠ›é’¦èªä¿ƒ.
// MFC狼 å‚çƒ¹ ä½•盒苞 å…¬çŸ« å•Šç“·èŒ„ ç‰ˆç»Š çš‹çŸ«ç˜¤ä¿Š æŽªèŒ„ è§æ‰æ‰ç”« ç§¦åŠ›é’¦èªä¿ƒ.
#define _AFX_ALL_WARNINGS
#include <afxwin.h>         // MFC ç´ç¼´ æ£º é’Žéœ– å¤‡å·± å¤¸å®¶æ¶èªä¿ƒ.
#include <afxext.h>         // MFC çŠ¬åŽ˜æ¶èªä¿ƒ.
#include <afxwin.h>         // MFC ç´ç¼´ æ£º é’Žéœ– å¤‡å·± å¤¸å®¶æ¶èªä¿ƒ.
#include <afxext.h>         // MFC çŠ¬åŽ˜æ¶èªä¿ƒ.
#include <afxdisp.h>        // MFC ç£Šæ‚¼æ‹³ åŠªè´°èƒ¶æ¶èªä¿ƒ.
#include <afxdisp.h>        // MFC ç£Šæ‚¼æ‹³ åŠªè´°èƒ¶æ¶èªä¿ƒ.
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // Internet Explorer 4 å‚ä¾© ç‰§é£˜è´¹ä¿Š æŽªèŒ„ MFC ç˜¤ç›”涝聪促.
#include <afxdtctl.h>           // Internet Explorer 4 å‚ä¾© ç‰§é£˜è´¹ä¿Š æŽªèŒ„ MFC ç˜¤ç›”涝聪促.
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>             // Windows å‚ä¾© ç‰§é£˜è´¹ä¿Š æŽªèŒ„ MFC ç˜¤ç›”涝聪促.
#include <afxcmn.h>             // Windows å‚ä¾© ç‰§é£˜è´¹ä¿Š æŽªèŒ„ MFC ç˜¤ç›”涝聪促.
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h>     // MFC狼 åºœå¤¯ æ£º ç‰§é£˜è´¹ é˜œæŽª ç˜¤ç›”
#include <afxcontrolbars.h>     // MFC狼 åºœå¤¯ æ£º ç‰§é£˜è´¹ é˜œæŽª ç˜¤ç›”
#include "InspectionBase.h"
@@ -55,7 +55,7 @@
static UINT g_nSequenceOffColor            = RGB(0, 0, 0);
static UINT g_nSequenceOnColor            = RGB(0, 180, 0);
//1. é‡‡é›†æ¨¡å—
//1. é‡‡é›†æ¨¡å—
#include "../SDK/BlGrabber/include/FrameBufferController.h"
#include "../SDK/BlGrabber/include/GrabberControl.h"
#if _DEBUG
@@ -65,7 +65,7 @@
#endif
#if HALCON_VISION_KEY
//2. è§†è§‰æ—¥å¿—模块
//2. è§†è§‰æ—¥å¿—模块
#include "../SDK/LogSDK/include/ILogger.h"
#include "../SDK/LogSDK/include/LogLib.h"
#if _DEBUG
@@ -74,7 +74,7 @@
#pragma comment(lib,"../SDK/LogSDK/lib/x64/Release/Log.lib")
#endif
//3. è§†è§‰æ˜¾ç¤ºæ¨¡å—
//3. è§†è§‰æ˜¾ç¤ºæ¨¡å—
#include "../SDK/BaseDisplaySDK/include/typesdef.h"
#include "../SDK/BaseDisplaySDK/include/BaseVision.h"
#include "../SDK/BaseDisplaySDK/include/IClsShape.h"
@@ -86,7 +86,7 @@
#pragma comment(lib,"../SDK/BaseDisplaySDK/lib/x64/Release/BaseDisplay.lib")
#endif
//4. è§†è§‰å¤„理模块
//4. è§†è§‰å¤„理模块
#include "../SDK/BlVisionPro/include/IVisionRecipe.h"
#include "../SDK/BlVisionPro/include/ISoftVisionApp.h"
#include "../SDK/BlVisionPro/include/BlVisionLib.h"
@@ -97,7 +97,7 @@
#endif
#endif
//5. AI模块
//5. AI模块
#include "../SDK/AIClient/include/AiDetectEx.h"
#if _DEBUG
#pragma comment (lib, "../SDK/AIClient/lib/AIClientD.lib")
@@ -105,7 +105,7 @@
#pragma comment (lib, "../SDK/AIClient/lib/AIClient.lib")
#endif
//6. SIS底层模块
//6. SIS底层模块
#ifdef _DEBUG
#pragma comment(lib, "../SDK/CHThreadPool/lib/x64/Release/CHThreadPoolD.lib")
#pragma comment(lib, "../SDK/SISControls/lib/x64/Release/SISControlsD.lib")
EdgeInspector_App/targetver.h
@@ -1,8 +1,8 @@
#pragma once
#pragma once
// å™¨çªƒ SDKDDKVer.hç»° è¤ä¾© å•Šç“·èŒ„ Windows æ•²é˜€æ±½ å æ»šå‚ˆæž å•ŠåŽ˜ è‡­ç¯® æ•²é˜€æ±½é˜‘ æ²¥ç‹¼é’¦èªä¿ƒ.
// å™¨çªƒ SDKDDKVer.hç»° è¤ä¾© å•Šç“·èŒ„ Windows æ•²é˜€æ±½ å æ»šå‚ˆæž å•ŠåŽ˜ è‡­ç¯® æ•²é˜€æ±½é˜‘ æ²¥ç‹¼é’¦èªä¿ƒ.
// æžå‚ˆ Windows æ•²é˜€æ±½ä¿Š æŽªç§¦ è§ˆä¾© æ©‡è‚ºå¼Šä¼é˜‘ å‘¼é›çªå¦¨ç»° ç‰ˆå¿«ä¿Šç»° SDKDDKVer.h甫 å™¨çªƒçªæ‰ å‚ˆä¿Š
// WinSDKVer.h甫 å™¨çªƒçªç»Š _WIN32_WINNT æ¦‚农肺甫 ç˜¤ç›”窍妨绰 æ•²é˜€æ±½æ è‚º æ±²æ²¥çªç»žçŸ«å·.
// æžå‚ˆ Windows æ•²é˜€æ±½ä¿Š æŽªç§¦ è§ˆä¾© æ©‡è‚ºå¼Šä¼é˜‘ å‘¼é›çªå¦¨ç»° ç‰ˆå¿«ä¿Šç»° SDKDDKVer.h甫 å™¨çªƒçªæ‰ å‚ˆä¿Š
// WinSDKVer.h甫 å™¨çªƒçªç»Š _WIN32_WINNT æ¦‚农肺甫 ç˜¤ç›”窍妨绰 æ•²é˜€æ±½æ è‚º æ±²æ²¥çªç»žçŸ«å·.
#include <SDKDDKVer.h>