/*[]=====================================================================[]*/ /*[] LeadTools Run Time Library - Version 13 []*/ /*[] []*/ /*[] []*/ /*[] Copyright (c) 1991-2001 LEAD Technologies, Inc. []*/ /*[] All Rights Reserved. []*/ /*[]=====================================================================[]*/ #include "ImgPF.h" static L_BOOL RefDataDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL RefDataDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID RefDataDialog_OnTimer (HWND hWnd, L_INT nID); static L_BOOL RefNextDataDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify); static L_BOOL RefNextDataDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam); static L_VOID RefNextDataDialog_OnTimer (HWND hWnd, L_INT nID); static L_VOID RefNextDataDialog_OnAddData (HWND, POINT L_FAR *, RECT L_FAR *); typedef struct tagNEXTDATADLG { RECT Rect; RECT MarkRect; L_BOOL bFilled; POINT Point; } NEXTDATADLG, L_FAR * LPNEXTDATADLG; L_BOOL bAdd, bArea; extern L_BOOL bRefDlg2; extern L_BOOL bRefDlg1; L_BOOL CALLBACK RefDataDlgProc (HWND hWnd, L_UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { HANDLE_MSG (hWnd, WM_COMMAND, RefDataDialog_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, RefDataDialog_OnInitDialog); HANDLE_MSG (hWnd, WM_TIMER, RefDataDialog_OnTimer); } return FALSE; } static L_VOID RefDataDialog_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(nID); } static L_BOOL RefDataDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPREFDATADLG pRefDataDlg; HWND hWndParent; pCHILDDATA pData; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); pRefDataDlg = (LPREFDATADLG)lParam; hGlobalWnd = hWnd; pData->bCross = FALSE; MoveDialogToMiddle(hWnd); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pRefDataDlg); SetDlgItemInt(hWnd, IDC_REF_MINSIZE_EDT, pRefDataDlg->uMinRatio, FALSE); SetDlgItemInt(hWnd, IDC_REF_MAXSIZE_EDT, pRefDataDlg->uMaxRatio, FALSE); SetDlgItemInt(hWnd, IDC_REF_HEIGHT_EDT, pRefDataDlg->uHeight, FALSE); SetDlgItemInt(hWnd, IDC_REF_WIDTH_EDT, pRefDataDlg->uWidth, FALSE); ComboBox_AddString(GetDlgItem(hWnd, IDC_REF_TYPE_CMB), TEXT("T Shape")); ComboBox_SetCurSel(GetDlgItem(hWnd, IDC_REF_TYPE_CMB), pRefDataDlg->uTypeIndex ); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); bRefDlg1 = TRUE; bRefDlg2 = FALSE; return ( TRUE ); } static L_BOOL RefDataDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPREFDATADLG pRefDataDlg; HWND hWndParent; pCHILDDATA pData; L_INT nValue; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); pRefDataDlg = (LPREFDATADLG) GetWindowLong(hWnd, GWL_USERDATA); switch (nID) { case IDC_REF_MAXSIZE_EDT: if(uCodeNotify == EN_KILLFOCUS) { nValue = (L_INT)GetDlgItemInt(hWnd, nID, NULL, FALSE); if(nValue <= 0 || (L_UINT)nValue < pRefDataDlg->uMinRatio) { MessageBox(hWnd, TEXT("Maximum size ratio should be greater than minimum size ratio"), TEXT("ERROR"), MB_OK); SetDlgItemInt(hWnd, IDC_REF_MAXSIZE_EDT, pRefDataDlg->uMaxRatio, FALSE); return TRUE; } pRefDataDlg->uMaxRatio = (L_UINT)nValue; } break; case IDC_REF_MINSIZE_EDT: if(uCodeNotify == EN_KILLFOCUS) { nValue = (L_INT)GetDlgItemInt(hWnd, nID, NULL, FALSE); if(nValue <= 0 || (L_UINT)nValue > pRefDataDlg->uMaxRatio) { MessageBox(hWnd, TEXT("Minimum size ratio should be less than maximum size ratio and greater than zero"), TEXT("ERROR"), MB_OK); SetDlgItemInt(hWnd, IDC_REF_MINSIZE_EDT, pRefDataDlg->uMinRatio, FALSE); return TRUE; } pRefDataDlg->uMinRatio = (L_UINT)nValue; } break; case IDC_REF_WIDTH_EDT: if(uCodeNotify == EN_CHANGE) { nValue = (L_INT)GetDlgItemInt(hWnd, nID, NULL, FALSE); if(nValue <= 0) { SetDlgItemInt(hWnd, IDC_REF_WIDTH_EDT, pRefDataDlg->uWidth, FALSE); return TRUE; } pRefDataDlg->uWidth = (L_UINT)nValue; } break; case IDC_REF_HEIGHT_EDT: if(uCodeNotify == EN_CHANGE) { nValue = (L_INT)GetDlgItemInt(hWnd, nID, NULL, FALSE); if(nValue <= 0) { SetDlgItemInt(hWnd, IDC_REF_HEIGHT_EDT, pRefDataDlg->uHeight, FALSE); return TRUE; } pRefDataDlg->uHeight = (L_UINT)nValue; } break; case IDC_REF_TYPE_CMB: if (uCodeNotify == CBN_SELCHANGE) { pRefDataDlg->uTypeIndex = (ComboBox_GetCurSel(GetDlgItem(hWnd, IDC_REF_TYPE_CMB))); } break; case IDC_REF_NEXT_BTN: bRefDlg1 = FALSE; pData->bCross = FALSE; pData->uMarkHeight = pRefDataDlg->uHeight; pData->uMarkWidth = pRefDataDlg->uWidth; pData->uMarkMaxPrc = pRefDataDlg->uMaxRatio; pData->uMarkMinPrc = pRefDataDlg->uMinRatio; pData->uMarkType = pRefDataDlg->uTypeIndex; InvalidateRect(hWndParent, NULL, FALSE); EndDialog(hWnd, TRUE); break; case IDCANCEL: bRefDlg1 = FALSE; bRefDlg2 = FALSE; pData->bCross = FALSE; InvalidateRect(hWndParent, NULL, FALSE); EndDialog(hWnd, FALSE); break; } return TRUE; } L_BOOL CALLBACK RefNextDataDlgProc (HWND hWnd, L_UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { HANDLE_MSG (hWnd, WM_COMMAND, RefNextDataDialog_OnCommand); HANDLE_MSG (hWnd, WM_INITDIALOG, RefNextDataDialog_OnInitDialog); HANDLE_MSG (hWnd, WM_TIMER, RefNextDataDialog_OnTimer); case WM_USER_ADDDATA: RefNextDataDialog_OnAddData(hWnd, (POINT L_FAR *)wParam, (RECT L_FAR *)lParam); break; } return FALSE; } static L_VOID RefNextDataDialog_OnTimer (HWND hWnd, L_INT nID) { Dialog_Timer(1); } static L_BOOL RefNextDataDialog_OnInitDialog (HWND hWnd, HWND hWndFocus, LPARAM lParam) { LPREFDATADLG pRefDataDlg; HWND hWndParent; pCHILDDATA pData; L_INT nI; L_TCHAR StripName[255]; LPNEXTDATADLG pNextData; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); pRefDataDlg = (LPREFDATADLG)lParam; hGlobalWnd = hWnd; pData->bCross = FALSE; MoveDialogToMiddle(hWnd); SetWindowLong(hWnd, GWL_USERDATA, (LONG)pRefDataDlg); pData->uTimerID = SetTimer(hWnd, 1, 100, NULL); if(pRefDataDlg->uNumber) { for(nI = 0; nI < (L_INT)pRefDataDlg->uNumber; nI++) { if(pRefDataDlg->pFilled[nI]) wsprintf(StripName, TEXT("* x = %d y = %d"), pRefDataDlg->pPoints[nI].x, pRefDataDlg->pPoints[nI].y); else wsprintf(StripName, TEXT("x = %d y = %d"), pRefDataDlg->pPoints[nI].x, pRefDataDlg->pPoints[nI].y); pNextData = (LPNEXTDATADLG) malloc(sizeof(NEXTDATADLG)); //nCount = ListBox_GetCount(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST)); ListBox_AddString(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), StripName); pNextData->bFilled = pRefDataDlg->pFilled[nI]; pNextData->Rect = pRefDataDlg->pRects[nI]; pNextData->MarkRect = pRefDataDlg->pMarkRects[nI]; pNextData->Point = pRefDataDlg->pPoints[nI]; ListBox_SetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nI, (LONG)pNextData); } if(!(pRefDataDlg->uIndex >= 0 && pRefDataDlg->uIndex < pRefDataDlg->uNumber)) pRefDataDlg->uIndex = 0; ListBox_SetCurSel(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), pRefDataDlg->uIndex); if(pRefDataDlg->pFilled[pRefDataDlg->uIndex]) L_SetBitmapRgnRect(&pData->LeadBitmap, NULL, &pRefDataDlg->pRects[pRefDataDlg->uIndex], L_RGN_SET); else L_FreeBitmapRgn(&pData->LeadBitmap); pData->ptCenter.x = pRefDataDlg->pPoints[pRefDataDlg->uIndex].x; pData->ptCenter.y = pRefDataDlg->pPoints[pRefDataDlg->uIndex].y; pData->bCross = TRUE; } if(pRefDataDlg->uNumber) EnableWindow(GetDlgItem(hWnd, IDC_REF_NEXT_AREA_BTN), TRUE); else EnableWindow(GetDlgItem(hWnd, IDC_REF_NEXT_AREA_BTN), FALSE); bRefDlg1 = FALSE; bRefDlg2 = TRUE; InvalidateRect(hWndParent, NULL, FALSE); return ( TRUE ); } static L_BOOL RefNextDataDialog_OnCommand (HWND hWnd, L_INT nID, HWND hWndCtl, L_UINT uCodeNotify) { LPREFDATADLG pRefDataDlg; HWND hWndParent; pCHILDDATA pData; L_INT nCount, nI; L_INT nIndex; LPNEXTDATADLG pNextData; hWndParent = FORWARD_WM_MDIGETACTIVE(hWndClient, SendMessage); pData = LOCKCHILDDATA (hWndParent); pRefDataDlg = (LPREFDATADLG) GetWindowLong(hWnd, GWL_USERDATA); switch (nID) { case IDC_REF_NEXT_POINTS_LST: nIndex = ListBox_GetCurSel(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST)); if(nIndex >= 0) { pNextData = (LPNEXTDATADLG)ListBox_GetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nIndex); if(pNextData->Point.x != -1) { pData->ptCenter.x = pNextData->Point.x; pData->ptCenter.y = pNextData->Point.y; pData->bCross = TRUE; pData->rcMarkRect = pNextData->MarkRect; pData->rcSearchRect = pNextData->Rect; pData->bFilled = pNextData->bFilled; pData->NextDlgWnd = hWnd; if(pNextData->bFilled) L_SetBitmapRgnRect(&pData->LeadBitmap, NULL, &pNextData->Rect, L_RGN_SET); else L_FreeBitmapRgn(&pData->LeadBitmap); InvalidateRect(hWndParent, NULL, FALSE); } } break; case IDC_REF_NEXT_ADD_BTN: bArea = FALSE; pData->bNextArea = FALSE; pData->NextDlgWnd = hWnd; nIndex = ListBox_GetCurSel(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST)); if(nIndex >= 0) { pNextData = (LPNEXTDATADLG)ListBox_GetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nIndex); if(pNextData->bFilled) L_SetBitmapRgnRect(&pData->LeadBitmap, NULL, &pNextData->Rect, L_RGN_SET); else L_FreeBitmapRgn(&pData->LeadBitmap); InvalidateRect(hWndParent, NULL, FALSE); } if(Button_GetCheck(hWndCtl)) { nRgnType = 5; bAdd = TRUE; pData->bNextAddPoint = TRUE; Button_SetCheck(GetDlgItem(hWnd, IDC_REF_NEXT_AREA_BTN), FALSE); } else { nRgnType = 0; bAdd = FALSE; pData->bNextAddPoint = FALSE; } break; case IDC_REF_NEXT_AREA_BTN: bAdd = FALSE; pData->bNextAddPoint = FALSE; nIndex = ListBox_GetCurSel(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST)); if(nIndex >= 0) { pNextData = (LPNEXTDATADLG)ListBox_GetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nIndex); if(pNextData->bFilled) L_SetBitmapRgnRect(&pData->LeadBitmap, NULL, &pNextData->Rect, L_RGN_SET); else L_FreeBitmapRgn(&pData->LeadBitmap); InvalidateRect(hWndParent, NULL, FALSE); } if(Button_GetCheck(hWndCtl)) { nRgnType = 1; bArea = TRUE; pData->bNextArea = TRUE; Button_SetCheck(GetDlgItem(hWnd, IDC_REF_NEXT_ADD_BTN), FALSE); nIndex = ListBox_GetCurSel(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST)); if(nIndex < 0) { nIndex = 0; ListBox_SetCurSel(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nIndex); } pNextData = (LPNEXTDATADLG)ListBox_GetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nIndex); if(pNextData->Point.x != -1) { pData->ptCenter.x = pNextData->Point.x; pData->ptCenter.y = pNextData->Point.y; pData->bCross = TRUE; pData->rcMarkRect = pNextData->MarkRect; pData->rcSearchRect = pNextData->Rect; pData->bFilled = pNextData->bFilled; pData->NextDlgWnd = hWnd; } } else { nRgnType = 0; bArea = FALSE; pData->bNextArea = FALSE; pData->bCross = FALSE; } break; case IDC_REF_NEXT_DELETE_BTN: nRgnType = 0; bAdd = FALSE; bArea = FALSE; pData->bNextAddPoint = FALSE; pData->bNextArea = FALSE; pData->bCross = FALSE; Button_SetCheck(GetDlgItem(hWnd, IDC_REF_NEXT_AREA_BTN), FALSE); Button_SetCheck(GetDlgItem(hWnd, IDC_REF_NEXT_ADD_BTN), FALSE); nIndex = ListBox_GetCurSel(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST)); if(nIndex >= 0) { L_FreeBitmapRgn(&pData->LeadBitmap); pNextData = (LPNEXTDATADLG)ListBox_GetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nIndex); if(pNextData) free(pNextData); ListBox_DeleteString(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nIndex); nCount = ListBox_GetCount(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST)); if(!nCount) { EnableWindow(GetDlgItem(hWnd, IDC_REF_NEXT_AREA_BTN), FALSE); } else { if(nCount == nIndex) { nIndex = nCount - 1; } ListBox_SetCurSel(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nIndex); pNextData = (LPNEXTDATADLG)ListBox_GetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nIndex); if(pNextData->Point.x != -1) { pData->ptCenter.x = pNextData->Point.x; pData->ptCenter.y = pNextData->Point.y; pData->bCross = TRUE; pData->rcMarkRect = pNextData->MarkRect; pData->NextDlgWnd = hWnd; } if(pNextData->bFilled) L_SetBitmapRgnRect(&pData->LeadBitmap, NULL, &pNextData->Rect, L_RGN_SET); else L_FreeBitmapRgn(&pData->LeadBitmap); } } else L_FreeBitmapRgn(&pData->LeadBitmap); InvalidateRect(hWndParent, NULL, FALSE); break; case IDCANCEL: case IDC_REF_NEXT_BACK_BTN: //////////////////////////////////////// bRefDlg1 = FALSE; bRefDlg2 = FALSE; pData->bCross = FALSE; nRgnType = 0; bArea = FALSE; bAdd = FALSE; pData->bNextArea = FALSE; pData->bNextAddPoint = FALSE; pData->NextDlgWnd = hWnd; ///////////////////////////////////////// L_FreeBitmapRgn(&pData->LeadBitmap); InvalidateRect(hWndParent, NULL, FALSE); nCount = ListBox_GetCount(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST)); pRefDataDlg->uNumber = nCount; pRefDataDlg->uIndex = ListBox_GetCurSel(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST)); if(pRefDataDlg->pFilled) free(pRefDataDlg->pFilled); if(pRefDataDlg->pRects) free(pRefDataDlg->pRects); if(pRefDataDlg->pPoints) free(pRefDataDlg->pPoints); if(pRefDataDlg->pMarkRects) free(pRefDataDlg->pMarkRects); pRefDataDlg->pFilled = NULL; pRefDataDlg->pRects = NULL; pRefDataDlg->pMarkRects = NULL; pRefDataDlg->pPoints = NULL; if(!nCount) { KillTimer(hWnd, 1); EndDialog(hWnd, FALSE); PostMessage ( hWndParent , WM_COMMAND, MAKEWPARAM(IDM_IMAGE_REF_DATA, 132), 131); break; } pRefDataDlg->pFilled = (L_BOOL L_FAR *)malloc(nCount * sizeof(L_BOOL)); pRefDataDlg->pRects = (RECT L_FAR *)malloc(nCount * sizeof(RECT)); pRefDataDlg->pMarkRects = (RECT L_FAR *)malloc(nCount * sizeof(RECT)); pRefDataDlg->pPoints = (POINT L_FAR *)malloc(nCount * sizeof(POINT)); for(nI = 0; nI < nCount; nI++) { pNextData = (LPNEXTDATADLG)ListBox_GetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nI); pRefDataDlg->pPoints[nI] = pNextData->Point; pRefDataDlg->pMarkRects[nI] = pNextData->MarkRect; if(pNextData->bFilled) { pRefDataDlg->pFilled[nI] = TRUE; pRefDataDlg->pRects[nI] = pNextData->Rect; } else { pRefDataDlg->pFilled[nI] = FALSE; pRefDataDlg->pRects[nI].top = -1; pRefDataDlg->pRects[nI].left = -1; pRefDataDlg->pRects[nI].right = -1; pRefDataDlg->pRects[nI].bottom = -1; } free(pNextData); } KillTimer(hWnd, 1); EndDialog(hWnd, FALSE); PostMessage ( hWndParent , WM_COMMAND, MAKEWPARAM(IDM_IMAGE_REF_DATA, 132), 131); break; case IDOK: nCount = ListBox_GetCount(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST)); if(!nCount) { MessageBox(hWnd, TEXT("No registration mark was selected. You must select 3 registration marks before continuing"), TEXT("ERROR"), MB_OK); return 0; } if(nCount < 3) { MessageBox(hWnd, TEXT("You must select 3 registration marks before continuing"), TEXT("ERROR"), MB_OK); return 0; } if(nCount > 3) { MessageBox(hWnd, TEXT("You must select only 3 registration marks"), TEXT("ERROR"), MB_OK); return 0; } for(nI = 0; nI < nCount; nI++) { pNextData = (LPNEXTDATADLG)ListBox_GetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nI); if(!pNextData->bFilled) { MessageBox(hWnd, TEXT("Not all search regions were specified"), TEXT("ERROR"), MB_OK); return 0; } } //////////////////////////////////////// bRefDlg1 = FALSE; bRefDlg2 = FALSE; pData->bCross = FALSE; nRgnType = 0; bArea = FALSE; bAdd = FALSE; pData->bNextArea = FALSE; pData->bNextAddPoint = FALSE; pData->NextDlgWnd = hWnd; ///////////////////////////////////////// L_FreeBitmapRgn(&pData->LeadBitmap); InvalidateRect(hWndParent, NULL, FALSE); pRefDataDlg->uNumber = nCount; pRefDataDlg->uIndex = 0; if(pRefDataDlg->pFilled) free(pRefDataDlg->pFilled); if(pRefDataDlg->pRects) free(pRefDataDlg->pRects); if(pRefDataDlg->pPoints) free(pRefDataDlg->pPoints); if(pRefDataDlg->pMarkRects) free(pRefDataDlg->pMarkRects); pRefDataDlg->pFilled = NULL; pRefDataDlg->pRects = NULL; pRefDataDlg->pMarkRects = NULL; pRefDataDlg->pPoints = NULL; pRefDataDlg->uIndex = ListBox_GetCurSel(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST)); pRefDataDlg->pFilled = (L_BOOL L_FAR *)malloc(nCount * sizeof(L_BOOL)); pRefDataDlg->pRects = (RECT L_FAR *)malloc(nCount * sizeof(RECT)); pRefDataDlg->pMarkRects = (RECT L_FAR *)malloc(nCount * sizeof(RECT)); pRefDataDlg->pPoints = (POINT L_FAR *)malloc(nCount * sizeof(POINT)); for(nI = 0; nI < nCount; nI++) { pNextData = (LPNEXTDATADLG)ListBox_GetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nI); pRefDataDlg->pPoints[nI] = pNextData->Point; pRefDataDlg->pMarkRects[nI] = pNextData->MarkRect; if(pNextData->bFilled) { pRefDataDlg->pFilled[nI] = TRUE; pRefDataDlg->pRects[nI] = pNextData->Rect; } else { pRefDataDlg->pFilled[nI] = FALSE; pRefDataDlg->pRects[nI].top = -1; pRefDataDlg->pRects[nI].left = -1; pRefDataDlg->pRects[nI].right = -1; pRefDataDlg->pRects[nI].bottom = -1; } free(pNextData); } KillTimer(hWnd, 1); EndDialog(hWnd, TRUE); PostMessage ( hWndParent , WM_COMMAND, MAKEWPARAM(IDM_IMAGE_REF_DATA, 133), 131); break; } return TRUE; } L_VOID RefNextDataDialog_OnAddData(HWND hWnd, POINT L_FAR * pPoint, RECT L_FAR * pRect) { L_INT nIndex, i; LPNEXTDATADLG pNextData; L_INT nCount; L_TCHAR StripName[255]; if(bArea) { nIndex = ListBox_GetCurSel(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST)); if(nIndex < 0) return; pNextData = (LPNEXTDATADLG)ListBox_GetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nIndex); pNextData->Rect.top = pRect->top; pNextData->Rect.bottom = pRect->bottom; pNextData->Rect.left = pRect->left; pNextData->Rect.right = pRect->right; pNextData->bFilled = TRUE; if(pNextData->bFilled) wsprintf(StripName, TEXT("* x = %d y = %d"), pNextData->Point.x, pNextData->Point.y); else wsprintf(StripName, TEXT(" x = %d y = %d"), pNextData->Point.x, pNextData->Point.y); ListBox_DeleteString(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nIndex); ListBox_InsertString(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nIndex, StripName); ListBox_SetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nIndex, (LONG)pNextData); } else { if(bAdd) { nCount = ListBox_GetCount(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST)); //check if the current mark has been selected before for(i = 0; i < nCount; i++) { pNextData = (LPNEXTDATADLG)ListBox_GetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), i); if(pPoint->x >= pNextData->MarkRect.left && pPoint->x <= pNextData->MarkRect.right && pPoint->y >= pNextData->MarkRect.top && pPoint->y <= pNextData->MarkRect.bottom) { MessageBox(hWnd, TEXT("This mark has been selected before."), TEXT("ERROR"), MB_OK); return; } } pNextData = NULL; pNextData = (LPNEXTDATADLG) malloc(sizeof(NEXTDATADLG)); pNextData->Point.x = pPoint->x; pNextData->Point.y = pPoint->y; pNextData->MarkRect.top = pRect->top; pNextData->MarkRect.bottom = pRect->bottom; pNextData->MarkRect.left = pRect->left; pNextData->MarkRect.right = pRect->right; pNextData->bFilled = FALSE; if(pNextData->bFilled) wsprintf(StripName, TEXT("* x = %d y = %d"), pNextData->Point.x, pNextData->Point.y); else wsprintf(StripName, TEXT(" x = %d y = %d"), pNextData->Point.x, pNextData->Point.y); ListBox_AddString(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), StripName); ListBox_SetItemData(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), nCount, (LONG)pNextData); if(!nCount) { EnableWindow(GetDlgItem(hWnd, IDC_REF_NEXT_AREA_BTN), TRUE); ListBox_SetCurSel(GetDlgItem(hWnd, IDC_REF_NEXT_POINTS_LST), 0); } } } }