SDC C-Project CF Review 프로그램
Merge branch 'feature/#3766_CF_AOI_Review_전설비_설정한_기준치_이상_Offset_적용시_경고_기능_추가' into feature/#3662_CF_AOI_Review_전설비_알람_발생_조치

# Conflicts:
# ReviewHistory/ReveiwHistory/ReveiwHistory.rc
# ReviewHistory/bin/ReviewHistroy.exe
11개 파일 변경됨
207 ■■■■■ 파일 변경됨
ReviewHistory/ReveiwHistory/ReveiwHistory.rc 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp 67 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h 14 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/resource.h 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/bin/ReviewHistroy.exe 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.cpp 76 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.h 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/MainFrm.cpp 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewSystem.rc 17 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/resource.h 9 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/stdafx.h 4 ●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistory.rc
Binary files differ
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
@@ -89,6 +89,7 @@
    HANDLE hThread = CreateThread(NULL, 0, RunThreadReviewHistory, this, 0, &dwThreadId);
    m_ThreadId = dwThreadId;
    /*< LYW 20211029 - #3684 ADD End >*/
    m_CheckInsViewCenterLine.SetCheck(FALSE);
    for (int i = 0; i < 105; i++)
    {
@@ -126,6 +127,7 @@
    DDX_Text(pDX, IDC_EDIT_OFFSET_Y, m_dEditOffsetY);
    DDX_Text(pDX, IDC_EDIT_DFFSET_GANTRY_IDX, m_strGantryIdx);
    DDX_Text(pDX, IDC_STATIC_LAST_SAVE_OFFSET_TIME, m_TextLastSaveOffsetTime);
    DDX_Control(pDX, IDC_CHECK_INS_VIEW_CENTER_LINE, m_CheckInsViewCenterLine);
}
BEGIN_MESSAGE_MAP(CReveiwHistoryDlg, CDialogEx)
@@ -155,6 +157,7 @@
    ON_WM_KEYDOWN()
    ON_BN_CLICKED(IDC_BUTTON_OFFSET_APPLY, &CReveiwHistoryDlg::OnBnClickedButtonOffsetApply)
    ON_BN_CLICKED(IDC_BUTTON_OFFSET_SAVE, &CReveiwHistoryDlg::OnBnClickedButtonOffsetSave)
    ON_BN_CLICKED(IDC_CHECK_INS_VIEW_CENTER_LINE, &CReveiwHistoryDlg::OnBnClickedCheckInsViewCenterLine)
END_MESSAGE_MAP()
// CReveiwHistoryDlg 메시지 처리기
@@ -342,6 +345,10 @@
        {
            dc.SetStretchBltMode(COLORONCOLOR);
            m_AlignSecend.Draw(dc, m_Align_rect2);
        }
        if (m_CheckInsViewCenterLine.GetCheck() == TRUE)
        {
            DrawInsViewCenterLine(&dc);
        }
        CDialogEx::OnPaint();
    }
@@ -1830,6 +1837,25 @@
    m_ConfigOption.m_nSelectRawType = 3;
}
void CReveiwHistoryDlg::DrawInsViewCenterLine(CPaintDC * pDC)
{
    if (m_picture_rect2.Width() == 0 || m_picture_rect2.Height() == 0) return;
    CRect rtDraw = m_picture_rect2;
    CPen pen, *pPen = NULL;
    pen.CreatePen(PS_DOT, 1, RGB(255, 0, 0));
    pDC->SelectObject(&pen);
    //pDC->SelectStockObject(WHITE_PEN);
    // center line
    pDC->MoveTo((rtDraw.Width() / 2) + rtDraw.left, 0 + rtDraw.top);
    pDC->LineTo((rtDraw.Width() / 2) + rtDraw.left, rtDraw.Height() + rtDraw.top);
    pDC->MoveTo(0 + rtDraw.left, (rtDraw.Height() / 2) + rtDraw.top);
    pDC->LineTo(rtDraw.Width() + rtDraw.left, (rtDraw.Height() / 2) + rtDraw.top);
}
void CReveiwHistoryDlg::OnBnClickedBtnFindBin()
@@ -4031,6 +4057,7 @@
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    SaveOffset();
    SendMsg2ReviewSystem();
}
BOOL CReveiwHistoryDlg::LoadOffset(CString strFilePath)
@@ -4046,6 +4073,10 @@
    macroFile.GetItem(_T("CAMERA_COUNT"), m_nCameraCount, 0);
    macroFile.GetItem(_T("SCAN_COUNT"), m_nScanCount, 0);
    macroFile.GetItem(_T("XPOS_COUNT"), m_XposCount, 0);
    /*< LYW 20211111 - #3766 ADD Start >*/
    macroFile.GetItem(_T("WARN_STANDARD"), m_dWarnStandard, 0);
    macroFile.GetItem(_T("HARD_STANDARD"), m_dHardStandard, 0);
    /*< LYW 20211111 - #3766 ADD End >*/
    CString strItem = _T("");
    double dXoffset = 0;
    double dYoffset = 0;
@@ -4126,6 +4157,14 @@
    strItem.Format(_T("XPOS_COUNT"));
    macroFile.SetItem(strItem, m_XposCount);
    /*< LYW 20211111 - #3766 ADD Start >*/
    strItem.Format(_T("WARN_STANDARD"));
    macroFile.SetItem(strItem, m_dWarnStandard);
    strItem.Format(_T("HARD_STANDARD"));
    macroFile.SetItem(strItem, m_dHardStandard);
    /*< LYW 20211111 - #3766 ADD End >*/
    CString strData;
    double dData = 0;
@@ -4177,6 +4216,25 @@
    else AfxMessageBox(_T("OFFSET SAVE FAIL"), MB_OK | MB_ICONHAND);
    return bReturn;
}
BOOL CReveiwHistoryDlg::SendMsg2ReviewSystem()
{
    HWND hWnd = ::FindWindow(NULL, _T("ReviewSystem"));
    if (hWnd)
    {
        COPYDATASTRUCT cds;
        cds.dwData = COPYDATA_REVIEWHISTORYOR2REVIEWSYSTEM;
        cds.cbData = 0;
        cds.lpData = 0;
        ::SendMessage(hWnd, WM_COPYDATA, 0, (LPARAM)(LPVOID)&cds);
        return TRUE;
    }
    return FALSE;
}
BOOL CReveiwHistoryDlg::ApplyOffset(int nModuleidx, int nCamIndex, int ScanIndex, double dXOffsetValue, double dYOffsetValue)
@@ -4391,4 +4449,11 @@
    }
    return 0;
}
/*< LYW 20211029 - #3684 ADD End >*/
/*< LYW 20211029 - #3684 ADD End >*/
void CReveiwHistoryDlg::OnBnClickedCheckInsViewCenterLine()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    Invalidate(TRUE);
}
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h
@@ -29,6 +29,10 @@
#define REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME _T("D:\\DIT_Review\\ReviewServerConfig\\ReviewOffSet.cfg")
#define    REVIEW_OFFSET_BACKUP_FORDER_NAME _T("OffsetBackup")
#define    REVIEW_OFFSET_BACKUP_FORDER_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\OffsetBackup\\")
/*< LYW 20211111 - #3766 ADD Start >*/
#define COPYDATA_REVIEWHISTORYOR2REVIEWSYSTEM 1800
/*< LYW 20211111 - #3766 ADD End >*/
/*< LYW 20211025 - #3684 ADD End >*/
struct _DefectList
@@ -288,12 +292,18 @@
    void OpenFileHeader(CString strPath, CString strFullPath);
    void BinFileOpen(int nCount);
    void OnCbnSelchangeComboRawtype();
    /*< LYW 20211111 - #3766 ADD Start >*/
    void DrawInsViewCenterLine(CPaintDC *pDC);
    /*< LYW 20211111 - #3766 ADD End >*/
    /*< LYW 20211025 - #3684 ADD Start >*/
    afx_msg void OnBnClickedButtonOffsetApply();
    afx_msg void OnBnClickedButtonOffsetSave();
    BOOL LoadOffset(CString strFilePath);
    BOOL SaveOffset();
    /*< LYW 20211111 - #3766 ADD Start >*/
    BOOL SendMsg2ReviewSystem();
    /*< LYW 20211111 - #3766 ADD End >*/
    BOOL ApplyOffset(int nModuleidx, int nCamIndex, int ScanIndex, double dXOffsetValue, double dYOffsetValue);
    BOOL SetInputOffSet(int nModuleidx, int nCamIndex, int ScanIndex, int nXposIndex, double dXOffsetValue, double dYOffsetValue, double dXposMin, double dXposMax, BOOL bCheckSave = 0);
    void InitDataInfo();
@@ -302,6 +312,8 @@
    int m_nCameraCount;
    int m_nScanCount;
    int m_XposCount;
    double m_dWarnStandard;
    double m_dHardStandard;
    int m_nCurModelIdx;
    /*< LYW 20211025 - #3684 ADD End >*/
@@ -374,4 +386,6 @@
    /*< LYW 20211028 - #index ADD Start >*/
    CString m_TextLastSaveOffsetTime;
    /*< LYW 20211028 - #index ADD End >*/
    CButton m_CheckInsViewCenterLine;
    afx_msg void OnBnClickedCheckInsViewCenterLine();
};
ReviewHistory/ReveiwHistory/resource.h
@@ -1,6 +1,6 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++에서 생성한 포함 파일입니다.
// ReveiwHistory.rc에서 사용되고 있습니다.
// Microsoft Visual C++에서 생성한 포함 파일입니다.
// ReveiwHistory.rc에서 사용되고 있습니다.
//
#define IDM_ABOUTBOX                    0x0010
#define IDD_ABOUTBOX                    100
@@ -95,6 +95,7 @@
#define IDC_BUTTON_OFFSET_APPLY         1060
#define IDC_STATIC_GROUP_LAST_OFFSET_SAVE_TIME 1061
#define IDC_STATIC_LAST_SAVE_OFFSET_TIME 1062
#define IDC_CHECK_INS_VIEW_CENTER_LINE  1063
#define ID_OPTION_PATHSETTING           32771
#define ID_VIEW_ALLDEFECT               32772
#define ID_VIEW_REVIEWDEFECT            32773
@@ -107,7 +108,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        150
#define _APS_NEXT_COMMAND_VALUE         32776
#define _APS_NEXT_CONTROL_VALUE         1063
#define _APS_NEXT_CONTROL_VALUE         1064
#define _APS_NEXT_SYMED_VALUE           104
#endif
#endif
ReviewHistory/bin/ReviewHistroy.exe
Binary files differ
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.cpp
@@ -25,6 +25,8 @@
    , m_editGlassOffSetmodeScanIndex(0)
    , m_editGlassOffSetmodeXpos(0)
    , m_editGlassOffSetmodeYpos(0)
    , m_dWarnStandard(0)
    , m_dHardStandard(0)
{
    m_EditChangeTargetXpos = 0;
    m_EditChangeTargetYpos = 0;
@@ -72,6 +74,8 @@
    DDX_Text(pDX, IDC_EDIT_SCAN_INDEX, m_editGlassOffSetmodeScanIndex);
    DDX_Text(pDX, IDC_EDIT_MOTOR_XPOS, m_editGlassOffSetmodeXpos);
    DDX_Text(pDX, IDC_EDIT_MOTOR_YPOS, m_editGlassOffSetmodeYpos);
    DDX_Text(pDX, IDC_EDIT_WARN_STANDARD, m_dWarnStandard);
    DDX_Text(pDX, IDC_EDIT_HARD_STANDARD, m_dHardStandard);
}
@@ -441,8 +445,37 @@
                strData.Format(_T("%.03lf"), pOffSet.dXoffSetValue);
                m_ctrlGridReviewOffSetInfo.SetItemText(nCol, nRow,strData);
                /*< LYW 20211111 - #3766 ADD Start >*/
                if (abs(pOffSet.dXoffSetValue) * 1000 >= m_dHardStandard)
                {
                    m_ctrlGridReviewOffSetInfo.SetItemBkColour(nCol, nRow, RGB(255, 0, 0));
                }
                else if (abs(pOffSet.dXoffSetValue) * 1000 >= m_dWarnStandard)
                {
                    m_ctrlGridReviewOffSetInfo.SetItemBkColour(nCol, nRow, RGB(255, 255, 0));
                }
                else
                {
                    m_ctrlGridReviewOffSetInfo.SetItemBkColour(nCol, nRow, RGB(255, 255, 210));
                }
                /*< LYW 20211111 - #3766 ADD End >*/
                strData.Format(_T("%.03lf"), pOffSet.dYoffSetValue);
                m_ctrlGridReviewOffSetInfo.SetItemText( nCol, nRow + 1, strData);
                /*< LYW 20211111 - #3766 ADD Start >*/
                if (abs(pOffSet.dYoffSetValue) * 1000 >= m_dHardStandard)
                {
                    m_ctrlGridReviewOffSetInfo.SetItemBkColour(nCol, nRow + 1, RGB(255, 0, 0));
                }
                else if (abs(pOffSet.dYoffSetValue) * 1000 >= m_dWarnStandard)
                {
                    m_ctrlGridReviewOffSetInfo.SetItemBkColour(nCol, nRow + 1, RGB(255, 255, 0));
                }
                else
                {
                    m_ctrlGridReviewOffSetInfo.SetItemBkColour(nCol, nRow + 1, RGB(255, 255, 210));
                }
                /*< LYW 20211111 - #3766 ADD End >*/
                nRow += 2;
            }
            nRow = 1;
@@ -870,12 +903,17 @@
        pDlgOffsetTool->InitProcess();
        pDlgOffsetTool->EnableBT();
    }
    else
    else if(pDlgOffsetTool->nThreadType == 1)
    {
        pDlgOffsetTool->DissableBT();
        pDlgOffsetTool->SaveConfigFile();
        pDlgOffsetTool->EnableBT();
    }
    else
    {
        pDlgOffsetTool->DissableBT();
        pDlgOffsetTool->OffsetLoad();
        pDlgOffsetTool->EnableBT();
    }
    return 0;
}
@@ -915,6 +953,10 @@
    macroFile.GetItem(_T("CAMERA_COUNT"),m_nCameraCount , 0);
    macroFile.GetItem(_T("SCAN_COUNT"), m_nScanCount, 0);
    macroFile.GetItem(_T("XPOS_COUNT"), m_XposCount, 0);
    /*< LYW 20211111 - #3766 ADD Start >*/
    macroFile.GetItem(_T("WARN_STANDARD"), m_dWarnStandard, 0);
    macroFile.GetItem(_T("HARD_STANDARD"), m_dHardStandard, 0);
    /*< LYW 20211111 - #3766 ADD End >*/
    CString strItem = _T("");
    double dXoffset=0;
    double dYoffset=0;
@@ -993,6 +1035,14 @@
    strItem.Format(_T("XPOS_COUNT"));
    macroFile.SetItem(strItem, m_XposCount);
    /*< LYW 20211111 - #3766 ADD Start >*/
    strItem.Format(_T("WARN_STANDARD"));
    macroFile.SetItem(strItem, m_dWarnStandard);
    strItem.Format(_T("HARD_STANDARD"));
    macroFile.SetItem(strItem, m_dHardStandard);
    /*< LYW 20211111 - #3766 ADD End >*/
    
    CString strData;
    double dData= 0;
@@ -1044,6 +1094,11 @@
        g_pLog->DisplayMessage(_T("Save Offset Success!!"));
    }
    // #3563 LYW_ CF AOI Review Offset 파라미터 저장시 완료 팝업 추가 ADD END
    /*< LYW 20211111 - #3766 ADD Start >*/
    UpdateGridcontrol();
    UpdateData(TRUE);
    Invalidate(FALSE);
    /*< LYW 20211111 - #3766 ADD End >*/
    return bReturn;
}
@@ -1067,6 +1122,14 @@
LRESULT DlgReviewOffSetTool::OnUserFunc(WPARAM wParam, LPARAM lParam)
{
    int nmsg = (int)wParam;
    if (nmsg == 0)
    {
        nThreadType = 2;
        m_ctrlProcessBar.SetPos(0);
        m_pThread = AfxBeginThread(ThradProcess, this);
        return 0;
    }
    UpdateData(FALSE);
    Invalidate(TRUE);
    return 0;
@@ -1103,11 +1166,16 @@
/*< LYW 20211025 - #3684 ADD Start >*/
void DlgReviewOffSetTool::OnBnClickedOffsetLoad()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    nThreadType = 2;
    m_ctrlProcessBar.SetPos(0);
    m_pThread = AfxBeginThread(ThradProcess, this);
}
void DlgReviewOffSetTool::OffsetLoad()
{
    ReadConfigFile();
    UpdateGridcontrol();
    UpdateData(TRUE);
    Invalidate(FALSE);
}
/*< LYW 20211025 - #3684 ADD End >*/
/*< LYW 20211025 - #3684 ADD End >*/
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.h
@@ -186,5 +186,10 @@
    afx_msg void OnBnClickedCheckOffsetMode();
    /*< LYW 20211025 - #index ADD Start >*/
    afx_msg void OnBnClickedOffsetLoad();
    void OffsetLoad();
    /*< LYW 20211025 - #index ADD End >*/
    /*< LYW 20211111 - #3766 ADD Start >*/
    double m_dWarnStandard;
    double m_dHardStandard;
    /*< LYW 20211111 - #3766 ADD End >*/
};
ReviewSystem/ReviewSystem/MainFrm.cpp
@@ -888,6 +888,14 @@
            if (pCopyData) OnCopyDataAoiServer(pCopyData);
        }
        break;
    case COPYDATA_REVIEWHISTORYOR2REVIEWSYSTEM:
    {
        DlgReviewOffSetTool* pReviewOffSetTool = m_pView->GetReviewOffSetToolHandle();
        pReviewOffSetTool->PostMessage(WM_OFFSETTOOL_MESSAGE, 0, 200);
    }
    break;
    }
    return __super::OnCopyData(pWnd, pCopyDataStruct);
ReviewSystem/ReviewSystem/ReviewSystem.rc
@@ -849,11 +849,11 @@
    PUSHBUTTON      "SET",IDC_BUTTION_CAHNGE_TARGET_POS,207,41,50,14
    PUSHBUTTON      "APPLY",IDC_BUTTON_APPLT_OFFSET,262,26,60,23
    GROUPBOX        "결함 정보",IDC_STATIC,7,2,328,59
    GROUPBOX        "적용될 OFF SET",IDC_STATIC,339,11,173,50
    EDITTEXT        IDC_EDIT_OFFSET_X_VALUE,352,37,66,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_OFFSET_Y_VALUE,423,37,66,14,ES_AUTOHSCROLL
    LTEXT           "Xmotor Pos : ",IDC_STATIC,354,22,44,8
    LTEXT           "Ymotor Pos : ",IDC_STATIC,426,22,44,8
    GROUPBOX        "적용될 OFF SET",IDC_STATIC,339,3,173,25
    EDITTEXT        IDC_EDIT_OFFSET_X_VALUE,379,11,39,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_OFFSET_Y_VALUE,450,11,39,14,ES_AUTOHSCROLL
    LTEXT           "X Pos : ",IDC_STATIC,354,13,25,8
    LTEXT           "Y Pos : ",IDC_STATIC,426,13,23,8
    COMBOBOX        IDC_COMBO_SELECT_MODULE,47,67,75,104,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP,WS_EX_CLIENTEDGE
    LTEXT           "모듈 선택 ",IDC_STATIC,13,70,34,8
    GROUPBOX        "Param Setting ",IDC_STATIC,518,5,233,79
@@ -877,6 +877,13 @@
    EDITTEXT        IDC_EDIT_CAM_INDEX,600,67,19,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_MOTOR_YPOS,694,67,54,14,ES_AUTOHSCROLL
    PUSHBUTTON      "Offset Load",IDC_OFFSET_LOAD,139,63,62,22
    GROUPBOX        "기준 값 설정",IDC_STATIC,340,31,172,33
    LTEXT           "경 알람 기준",IDC_STATIC,369,38,42,8
    LTEXT           "중 알람 기준",IDC_STATIC,431,38,42,8
    EDITTEXT        IDC_EDIT_WARN_STANDARD,368,48,38,13,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_HARD_STANDARD,432,48,38,13,ES_AUTOHSCROLL
    LTEXT           "um",IDC_STATIC,410,50,10,8
    LTEXT           "um",IDC_STATIC,474,49,10,8
END
IDD_DLG_REVIEW_HISTORY_TOOL DIALOGEX 0, 0, 961, 455
ReviewSystem/ReviewSystem/resource.h
@@ -1,6 +1,6 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++에서 생성한 포함 파일입니다.
// ReviewSystem.rc에서 사용되고 있습니다.
// Microsoft Visual C++에서 생성한 포함 파일입니다.
// ReviewSystem.rc에서 사용되고 있습니다.
//
#define IDCANCEL                        2
#define IDD_ABOUTBOX                    100
@@ -433,6 +433,9 @@
#define IDC_EDIT_WSI_HEIGHT13           1183
#define IDC_LIST_WSI_DIAGNOSIS_RESULT   1184
#define IDC_OFFSET_LOAD                 1185
#define IDC_EDIT_WARN_STANDARD          1186
#define IDC_EDIT_HARD_STANDARD          1187
#define IDC_BUTTON_STANDARD_SAVE        1188
#define ID_INS_HOOK                     32772
#define ID_UNINS_HOOK                   32773
@@ -442,7 +445,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        381
#define _APS_NEXT_COMMAND_VALUE         32775
#define _APS_NEXT_CONTROL_VALUE         1186
#define _APS_NEXT_CONTROL_VALUE         1189
#define _APS_NEXT_SYMED_VALUE           346
#endif
#endif
ReviewSystem/ReviewSystem/stdafx.h
@@ -201,7 +201,9 @@
#define    COPYDATA_SYSTEMSETTING2REVIEWSYSTEM            1500
#define    COPYDATA_RECIPEEDITOR2REVIEWSYSTEM            1600
/*< LYW 20211111 - #3766 ADD Start >*/
#define COPYDATA_REVIEWHISTORYOR2REVIEWSYSTEM        1800
/*< LYW 20211111 - #3766 ADD End >*/
// [2017:1:13]-[WEZASW] : 다중 모니터에서의 ReviewSystem Display
enum MonitorPosition    {MonitorPos_CENTER=0, MonitorPos_TOP, MonitorPos_BOTTOM, MonitorPos_LEFT, MonitorPos_RIGHT, MonitorPos_Count};