void TABLE::DestroyEditControl() { if(hEdit) { // Get the rectangle of the cell for intelligent update RECT cellRect; GetWindowRect(hEdit, &cellRect); ScreenToClient(hTable, (POINT*)&cellRect); ScreenToClient(hTable, (POINT*)&cellRect.right); cellRect.left -= COLUMN::CellCharWidth(editCol); cellRect.top = cellRect.bottom - TABLE_ATTRIBUTES::CellHeight(); cellRect.right += COLUMN::CellCharWidth(editCol); // un-subclass the control in preparation for destroy RemoveProp(hEdit, "loPtr"); RemoveProp(hEdit, "hiPtr"); RemoveProp(hEdit, "number"); SetWindowLong(hEdit, GWL_WNDPROC, (long)oldEditControlProc); // get the text and update the cell as necessary WORD len = (WORD)SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0L)+1; char* buffer = new char[len]; SendMessage(hEdit, WM_GETTEXT, (WPARAM)(len+1), (LPARAM)buffer); RUNTIMEINFO* rtime = (RUNTIMEINFO*)AObjGetRuntimeInfo(theObject); ROW* row = rtime->GetRow(); if(hstrcmp(row->GetCell(editRow, editCol, FALSE, NULL), buffer)) { row->SetCell(editRow, editCol, buffer); TABLE_ATTRIBUTES::SetEditRow(editRow); TABLE_ATTRIBUTES::SetEditColumn(editCol); PostObjectChanged(CHANGED_FULLREDRAW); AEvtPostSignalAtMark(theObject, SIGNAL_TABLEEDITED); } delete buffer; // destroy the window DestroyWindow(hEdit); hEdit = NULL; DeleteObject(hEditFont); AEvtPostSignalAtMark(theObject, SIGNAL_STOPEDITING); // make sure the proper region is redrawn InvalidateRect(hTable, &cellRect, FALSE); UpdateWindow(hTable); // wipPreventThieves(ParentID, FALSE); SKJ need replacement } }