* * Now, redraw the area.
public void showColumn (TableColumn column) {	checkWidget ();	if (column == null) error (SWT.ERROR_NULL_ARGUMENT);	if (column.isDisposed()) error(SWT.ERROR_INVALID_ARGUMENT);	if (column.parent != this) return;	int index = indexOf (column);	if (!(0 <= index && index < columnCount)) return;	/*	* Feature in Windows.  Calling LVM_GETSUBITEMRECT with -1 for the	* row number gives the bounds of the item that would be above the	* first row in the table.  This is undocumented and does not work	* for the first column. In this case, to get the bounds of the	* first column, get the bounds of the second column and subtract	* the width of the first. The left edge of the second column is	* also used as the right edge of the first.	*/	RECT itemRect = new RECT ();	itemRect.left = OS.LVIR_BOUNDS;	if (index == 0) {		itemRect.top = 1;		ignoreCustomDraw = true;		OS.SendMessage (handle, OS.LVM_GETSUBITEMRECT, -1, itemRect);		ignoreCustomDraw = false;		itemRect.right = itemRect.left;		int width = OS.SendMessage (handle, OS.LVM_GETCOLUMNWIDTH, 0, 0);		itemRect.left = itemRect.right - width;	} else {		itemRect.top = index;		ignoreCustomDraw = true;		OS.SendMessage (handle, OS.LVM_GETSUBITEMRECT, -1, itemRect);		ignoreCustomDraw = false;	}	/*	* Bug in Windows.  When a table that is drawing grid lines	* is slowly scrolled horizontally to the left, the table does	* not redraw the newly exposed vertical grid lines.  The fix	* is to save the old scroll position, call the window proc,	* get the new scroll position and redraw the new area.	* 	* First, save the horizontal scroll position.	*/	int oldPos = 0;	int bits = OS.SendMessage (handle, OS.LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);	if ((bits & OS.LVS_EX_GRIDLINES) != 0) {		SCROLLINFO info = new SCROLLINFO ();		info.cbSize = SCROLLINFO.sizeof;		info.fMask = OS.SIF_POS;		OS.GetScrollInfo (handle, OS.SB_HORZ, info);		oldPos = info.nPos;	}		/* Scroll the table */	RECT rect = new RECT ();	OS.GetClientRect (handle, rect);	if (itemRect.left < rect.left) {		int dx = itemRect.left - rect.left;		OS.SendMessage (handle, OS.LVM_SCROLL, dx, 0);	} else {		int width = Math.min (rect.right - rect.left, itemRect.right - itemRect.left);		if (itemRect.left + width > rect.right) {			int dx = itemRect.left + width - rect.right;			OS.SendMessage (handle, OS.LVM_SCROLL, dx, 0);		}	}		/*	* Bug in Windows.  When a table that is drawing grid lines	* is slowly scrolled horizontally to the left, the table does	* not redraw the newly exposed vertical grid lines.  The fix	* is to save the old scroll position, call the window proc,	* get the new scroll position and redraw the new area.	* 	* Now, redraw the area.	*/	if ((bits & OS.LVS_EX_GRIDLINES) != 0) {		SCROLLINFO info = new SCROLLINFO ();		info.cbSize = SCROLLINFO.sizeof;		info.fMask = OS.SIF_POS;		OS.GetScrollInfo (handle, OS.SB_HORZ, info);		int newPos = info.nPos;		if (newPos < oldPos) {			rect.right = oldPos - newPos + GRID_WIDTH;			OS.InvalidateRect (handle, rect, true);		}	}}