The grid control -- problems and questions

Bob Klahn wrote:

The attached grid code features a custom renderer. In that renderer, apart from drawing the given cell, I print the row, col, and isSelected values to stdout, along with the number of the current call to the draw routine (1, 2, 3, ...).
Some questions:
    (1) How do I best avoid the excessive drawing that occurs
             (a) when switching to another application and switching back?
             (b) when resizing the test frame?

Which platform are you on?

Windows XP SP2

If on the Mac then I think there is code in wxGrid that always redraws all of the visible cells instead of optimizing it down as is done on the other platforms.

Otherwise only those cells that intersect with whatever region the OS reports needs to be redrawn are painted.

Then, since

···

At 10:10 PM 9/3/2007, Robin wrote:

The Grid class doesn't make use of any double buffering at all, and would probably need to be rearchitected to be able to do so, but in practice the method it does use is normally efficient enough.

    (2) Note the rows that are redrawn as one clicks on different rows.
             (a) When one clicks on the row immediately below the current row,
                      (i) notice the color of the rightmost column
                              -- Why is that happening?
                              -- Why is it different when moving from row 0 to row 1, versus
                                 moving from row n to row n+1 where n <> 0 ?

I don't notice any color problem so I'm not quite sure what you are talking about, but I do notice that you never specify in your renderer's Draw method what the text foreground color should be, so whatever it was set to previously in the DC will be used. Perhaps that is what you are seeing.

                      (ii) notice which rows are redrawn, and in what order
                              -- Why so many?
             (b) When one clicks on any row not immediately below the current row,
                      (i) notice that the color problem seen above does not occur
                              -- Why not?
                      (ii) notice that fewer rows are redrawn
                              -- Why?

IIRC, when a new cell selected then the cells around the old one are marked as needing refreshed because the cursor rectangle can overlap the other cells by 1 pixel, so those cells end up getting redrawn to be able to restore the border where the cursor used to be.