Ok, thanks, I managed to come up with a solution by inheriting from NumberColumn. I'd post the code, but its fairly lengthy and keeps getting cut off when I post it. So here are the key parts:
public override Columns Owner
{
get { return base.Owner; }
set
{
if ( value != base.Owner )
{
if ( base.Owner != null && hotTrack ) DeregisterHotTrackEvents( this.GetGrid() );
base.Owner = value;
if ( hotTrack ) RegisterHotTrackEvents( this.GetGrid() );
}
}
}
private void flyGrid_MouseMove( object sender, MouseEventArgs e )
{
FlyGrid grid = (FlyGrid) sender;
if ( lastHotTrackedNode != null )
{
NodeBase tmp = lastHotTrackedNode;
tmp.HotTrack = false;
lastHotTrackedNode = null;
grid.InvalidateCell( tmp, this );
}
HitTestInfo hi = grid.GetHitTestInfoAt( e.Location );
if ( ( hi.HitTest & HitTest.OnNode ) != 0 && hi.Col != -1 && hi.Row != -1 && grid.Columns.VisibleColumns[hi.Col] == this )
{
NodeBase nb = hi.port.Rows.GetNodeFromRow( hi.Row );
if ( nb.Depth == hotTrackNodeDepth )
{
lastHotTrackedNode = nb;
lastHotTrackedNode.HotTrack = true;
hi.port.InvalidateNode( lastHotTrackedNode );
}
}
}
protected override void PaintTextInCell( CellDrawInfo dci, Brush bkBrush, Color foreColor )
{
if ( hotTrack && lastHotTrackedNode == dci.node )
dci.Font = new Font( dci.Font, ( dci.Font.Style | FontStyle.Underline ) );
base.PaintTextInCell( dci, bkBrush, foreColor );
}