From da93dd698952262d233f3dae96746e75278fe996 Mon Sep 17 00:00:00 2001 From: TAO Cheng Date: Fri, 21 Jun 2013 15:20:18 +0800 Subject: [PATCH] Build Version6.0 --- .../Hsi/Tools/UsbUtility/UsbUtil/AboutDlg.cpp | 34 +++++++++++++ .../Hsi/Tools/UsbUtility/UsbUtil/AboutDlg.h | 21 ++++++++ .../Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc | 48 +++++++++--------- .../Tools/UsbUtility/UsbUtil/Mv_UtilDlg.cpp | 31 +---------- .../Tools/UsbUtility/UsbUtil/So7_Option.cpp | 43 +++++++++++++--- .../Hsi/Tools/UsbUtility/UsbUtil/So7_Option.h | 1 + .../Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj | 3 ++ .../UsbUtil/Usb_Util.vcxproj.filters | 6 +++ .../Hsi/Tools/UsbUtility/UsbUtil/resource.h | 6 ++- .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo | Bin 2355712 -> 2355712 bytes 10 files changed, 132 insertions(+), 61 deletions(-) create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/AboutDlg.cpp create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/AboutDlg.h diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/AboutDlg.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/AboutDlg.cpp new file mode 100644 index 0000000..a10092b --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/AboutDlg.cpp @@ -0,0 +1,34 @@ +// AboutDlg.cpp : implementation file +// + +#include "stdafx.h" +#include "resource.h" +#include "AboutDlg.h" +#include "afxdialogex.h" + + +// CAboutDlg dialog + +IMPLEMENT_DYNAMIC(CAboutDlg, CDialog) + +CAboutDlg::CAboutDlg(CWnd* pParent /*=NULL*/) + : CDialog(CAboutDlg::IDD, pParent) +{ + +} + +CAboutDlg::~CAboutDlg() +{ +} + +void CAboutDlg::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + + +BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) +END_MESSAGE_MAP() + + +// CAboutDlg message handlers diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/AboutDlg.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/AboutDlg.h new file mode 100644 index 0000000..6a3e70b --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/AboutDlg.h @@ -0,0 +1,21 @@ +#pragma once + + +// CAboutDlg dialog + +class CAboutDlg : public CDialog +{ + DECLARE_DYNAMIC(CAboutDlg) + +public: + CAboutDlg(CWnd* pParent = NULL); // standard constructor + virtual ~CAboutDlg(); + +// Dialog Data + enum { IDD = IDD_ABOUTBOX }; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + + DECLARE_MESSAGE_MAP() +}; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc index 655126e..ea02d7a 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc @@ -368,15 +368,16 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSM CAPTION "Utility for SO7" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - CONTROL "SDK3000视频卡",IDC_RADIO_VIDEOCARD_SDK3000,"Button",BS_AUTORADIOBUTTON,48,39,69,10 - CONTROL "SV2000E视频卡",IDC_RADIO_VIDEOCARD_SV2000E,"Button",BS_AUTORADIOBUTTON,48,64,69,10 - CONTROL "TC4000视频卡",IDC_RADIO_VIDEOCARD_TC4000,"Button",BS_AUTORADIOBUTTON,48,89,69,10 - CONTROL "IP Camera",IDC_RADIO_SO7_IP_CAMERA,"Button",BS_AUTORADIOBUTTON,48,114,62,10 - CONTROL "控制器",IDC_RADIO_CONTROLLER,"Button",BS_AUTORADIOBUTTON,175,39,40,10 - CONTROL "Manual Machine",IDC_RADIO__SO7_RS232,"Button",BS_AUTORADIOBUTTON,175,57,67,10 + CONTROL "SDK3000视频卡",IDC_RADIO_VIDEOCARD_SDK3000,"Button",BS_AUTORADIOBUTTON | WS_GROUP,48,39,69,10 + CONTROL "SV2000E视频卡",IDC_RADIO_VIDEOCARD_SV2000E,"Button",BS_AUTORADIOBUTTON,48,57,69,10 + CONTROL "SV4000E视频卡",IDC_RADIO_VIDEOCARD_SV4000E,"Button",BS_AUTORADIOBUTTON,48,75,68,10 + CONTROL "TC4000视频卡",IDC_RADIO_VIDEOCARD_TC4000,"Button",BS_AUTORADIOBUTTON,48,93,69,10 + CONTROL "IP Camera",IDC_RADIO_SO7_IP_CAMERA,"Button",BS_AUTORADIOBUTTON,48,111,62,10 + CONTROL "控制器(USB)",IDC_RADIO_CONTROLLER,"Button",BS_AUTORADIOBUTTON,175,39,69,10 + CONTROL "控制器(RS232)",IDC_RADIO__SO7_RS232,"Button",BS_AUTORADIOBUTTON,175,57,77,10 CONTROL "Keyence激光",IDC_RADIO_KEYENCE_LASER,"Button",BS_AUTORADIOBUTTON,175,75,76,10 - CONTROL "Verifcation",IDC_RADIO_SO7_VERIFICATION_ALGORITHM, - "Button",BS_AUTORADIOBUTTON,175,93,50,10 + CONTROL "Verifcation algorithm",IDC_RADIO_SO7_VERIFICATION_ALGORITHM, + "Button",BS_AUTORADIOBUTTON,175,93,81,10 CONTROL "Image.dll",IDC_RADIO_TEST_IMAGE_DLL,"Button",BS_AUTORADIOBUTTON,175,111,45,10 DEFPUSHBUTTON "OK",IDOK,181,145,50,14 PUSHBUTTON "Cancel",IDCANCEL,241,145,50,14 @@ -756,7 +757,7 @@ BEGIN BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 291 - TOPMARGIN, 7 + TOPMARGIN, 6 BOTTOMMARGIN, 159 END @@ -1200,15 +1201,15 @@ BEGIN PUSHBUTTON "Home",IDC_BUTTON_ANIMATICS_HOME,35,40,63,15 END -IDD_ABOUTBOX DIALOGEX 0, 0, 198, 63 +IDD_ABOUTBOX DIALOGEX 0, 0, 198, 67 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "About Mv_Util" +CAPTION "About Utility" FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - ICON 103,IDC_STATIC,14,14,21,20 - LTEXT "Mv/Mitu_Util Version 1.0",IDC_STATIC,42,14,114,8,SS_NOPREFIX - LTEXT "Hexagon Metrology., Copyright (C) 2012",IDC_STATIC,42,26,139,8 - DEFPUSHBUTTON "OK",IDOK,141,42,50,14,WS_GROUP + ICON IDR_MAINFRAME,IDC_STATIC,16,11,21,20 + LTEXT "Version 6.0",IDC_STATIC,89,13,45,8,SS_NOPREFIX + LTEXT "Hexagon Metrology, Copyright (C) 2013",IDC_STATIC,51,27,129,8 + DEFPUSHBUTTON "OK",IDOK,141,46,50,14,WS_GROUP END IDD_MV_UTIL_DIALOG DIALOGEX 0, 0, 407, 389 @@ -1688,7 +1689,7 @@ BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 191 TOPMARGIN, 7 - BOTTOMMARGIN, 56 + BOTTOMMARGIN, 60 END IDD_MV_UTIL_DIALOG, DIALOG @@ -1827,8 +1828,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2012,0,0,1 - PRODUCTVERSION 2012,0,0,1 + FILEVERSION 6,0,0,0 + PRODUCTVERSION 6,0,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -1843,14 +1844,14 @@ BEGIN BEGIN BLOCK "040904e4" BEGIN - VALUE "CompanyName", "Hexagon" - VALUE "FileDescription", "Hexagon" - VALUE "FileVersion", "1.0.0.1" + VALUE "CompanyName", "Hexagon Metrology" + VALUE "FileDescription", "Utility for Hexagon Metrology" + VALUE "FileVersion", "6.0.0.0" VALUE "InternalName", "Usb_Util.exe" - VALUE "LegalCopyright", "(c) . All rights reserved." + VALUE "LegalCopyright", "Copyright 2013 Hexagon Metrology." VALUE "OriginalFilename", "Usb_Util.exe" VALUE "ProductName", "Utility" - VALUE "ProductVersion", "1.0.0.1" + VALUE "ProductVersion", "6.0.0.0" END END BLOCK "VarFileInfo" @@ -1868,6 +1869,7 @@ END STRINGTABLE BEGIN IDS_ABOUTBOX "&About Mv_Util..." + IDS_SO7_ABOUTBOX "&About Utility for SO7..." END #endif // English (United States) resources diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_UtilDlg.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_UtilDlg.cpp index a6d292d..d363b84 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_UtilDlg.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_UtilDlg.cpp @@ -2,6 +2,8 @@ // #include "stdafx.h" +#include "resource.h" +#include "AboutDlg.h" #include "Mv_Util.h" #include "Mv_UtilDlg.h" #include "Mv_Move_Location.h" @@ -32,35 +34,6 @@ char *str_index_z = "\r\nIndex Positions Z: "; char *str_model = "\r\nModel : "; char *str_serial_no = "\r\nSerial No : "; -// CAboutDlg dialog used for App About - -class CAboutDlg : public CDialog -{ -public: - CAboutDlg(); - -// Dialog Data - enum { IDD = IDD_ABOUTBOX }; - - protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - -// Implementation -protected: - DECLARE_MESSAGE_MAP() -}; - -CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) -{ -} - -void CAboutDlg::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); -} - -BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) -END_MESSAGE_MAP() // CMv_UtilDlg dialog diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp index d5c5910..ed9a716 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp @@ -3,7 +3,7 @@ #include "stdafx.h" #include "resource.h" - +#include "AboutDlg.h" #include "..\..\..\SevenOcean\CMMIO_SERIAL.H" #include "..\..\..\SevenOcean\EF8000_Interface.h" #include "..\..\..\SevenOcean\SO7_Proto.h" @@ -39,6 +39,8 @@ #include "So7_Option.h" #include "afxdialogex.h" +//#define _RELEASE_ONLY_ONE_FUNCTION + //CSerial* m_pSO7_Serial=NULL; CPSerial* m_pSO7_PCDSerial=NULL; CSO7_Proto* m_pSO7_Proto=NULL; @@ -48,6 +50,7 @@ CKeyence_Proto* m_pKeyence_Proto=NULL; CSo7_Interface* m_pSo7_Interface=NULL; CEF8000_Interface* m_pEF8000_Interface=NULL; + // CSo7_Option dialog IMPLEMENT_DYNAMIC(CSo7_Option, CDialog) @@ -69,6 +72,7 @@ void CSo7_Option::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(CSo7_Option, CDialog) + ON_WM_SYSCOMMAND() ON_WM_TIMER() ON_BN_CLICKED(IDOK, &CSo7_Option::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &CSo7_Option::OnBnClickedCancel) @@ -92,7 +96,7 @@ BOOL CSo7_Option::OnInitDialog() { BOOL bNameValid; CString strAboutMenu; - bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); + bNameValid = strAboutMenu.LoadString(IDS_SO7_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { @@ -101,22 +105,47 @@ BOOL CSo7_Option::OnInitDialog() } } - ((CButton *)GetDlgItem(IDC_RADIO_CONTROLLER))->SetCheck(TRUE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SDK3000))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV2000E))->SetCheck(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV4000E))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_TC4000))->SetCheck(FALSE); - ((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_IP_CAMERA))->SetCheck(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_CONTROLLER))->SetCheck(TRUE); ((CButton *)GetDlgItem(IDC_RADIO__SO7_RS232))->SetCheck(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_VERIFICATION_ALGORITHM))->SetCheck(FALSE); - + ((CButton *)GetDlgItem(IDC_RADIO_TEST_IMAGE_DLL))->SetCheck(FALSE); + #ifdef _RELEASE_SO7_CONTROLER_ONLY + ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SDK3000))->EnableWindow(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV2000E))->EnableWindow(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV4000E))->EnableWindow(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_TC4000))->EnableWindow(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_SO7_IP_CAMERA))->EnableWindow(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER))->EnableWindow(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_SO7_VERIFICATION_ALGORITHM))->EnableWindow(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_TEST_IMAGE_DLL))->EnableWindow(FALSE); +#endif + +#ifdef _RELEASE_ONLY_ONE_FUNCTION SetTimer(1,50,NULL); #endif return TRUE; // return TRUE unless you set the focus to a control } - +//================================================================================================ +void CSo7_Option::OnSysCommand(UINT nID, LPARAM lParam) +{ + if ((nID & 0xFFF0) == IDM_ABOUTBOX) + { + CAboutDlg dlgAbout; + dlgAbout.DoModal(); + } + else + { + CDialog::OnSysCommand(nID, lParam); + } +} //=================================== void CSo7_Option::OnBnClickedOk() { @@ -249,7 +278,7 @@ void CSo7_Option::OnBnClickedOk() } -#ifdef _RELEASE_SO7_CONTROLER_ONLY +#ifdef _RELEASE_ONLY_ONE_FUNCTION OnBnClickedCancel(); #endif } diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.h index 2b9a761..775cb58 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.h @@ -19,6 +19,7 @@ protected: virtual BOOL OnInitDialog(); DECLARE_MESSAGE_MAP() public: + afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedCancel(); afx_msg void OnTimer(UINT_PTR nIDEvent); diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj index 4e2bdd4..1a93509 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj @@ -117,6 +117,7 @@ false false false + Utility for So7 Controller @@ -313,6 +314,7 @@ + @@ -371,6 +373,7 @@ + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters index de1d576..3b180de 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters @@ -130,6 +130,9 @@ Sources Files + + Sources Files + @@ -291,6 +294,9 @@ Header Files + + Header Files + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h index 33d6688..2b55c23 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h @@ -11,6 +11,7 @@ #define IDD_ABOUTBOX 100 #define IDS_ABOUTBOX 101 #define IDD_MV_UTIL_DIALOG 102 +#define IDS_SO7_ABOUTBOX 102 #define IDD_DIALOG_FRAME_ID 104 #define IDD_MV_UTIL_MOVE_LOCATION 105 #define IDD_DIALOG_SET_LIGHTS 106 @@ -756,6 +757,7 @@ #define IDC_MFCBUTTON_STATUS_IN_PORT5 1665 #define IDC_RADIO_SPEED_GEAR5 1666 #define IDC_EDIT_SO7_READ_IO_STATUS_ADDRESS 1667 +#define IDC_RADIO_VIDEOCARD_SV4000E 1668 #define IDC_MFCBUTTON_STATUS_IN_PORT6 1670 // Next default values for new objects @@ -764,7 +766,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 169 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1668 -#define _APS_NEXT_SYMED_VALUE 101 +#define _APS_NEXT_CONTROL_VALUE 1669 +#define _APS_NEXT_SYMED_VALUE 104 #endif #endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo index ed5c6e8c0b3f86e3b8486e8b4e5c23f5c0b78517..3e1700364ba6689fd580ca2d3f1aa014e7a5ee7a 100644 GIT binary patch delta 9922 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 Kd;dN>i2pB}3)@-%