1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 %% Purpose: wxHVScrolledWindow documentation
4 %% Author: Vadim Zeitlin
5 %% Modified by: Brad Anderson
8 %% Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwindows.org>
9 %% License: wxWindows license
10 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
12 \section{\class{wxHVScrolledWindow
}}\label{wxhvscrolledwindow
}
14 This class is strongly influenced by
15 \helpref{wxVScrolledWindow
}{wxvscrolledwindow
}.
16 Like wxVScrolledWindow, this class is here to provide an easy way to implement
17 variable line sizes. The difference is that wxVScrolledWindow only works with
18 vertical scrolling. This class extends the behavior of wxVScrolledWindow to
19 the horizontal axis in addition to the vertical axis.
21 The scrolling is also "virtual" in the sense that row widths and column heights
22 only need to be known for the rows and columns that are currently visible.
24 Like
\helpref{wxVScrolledWindow
}{wxvscrolledwindow
}, this is a generalization
25 of the
\helpref{wxScrolledWindow
}{wxscrolledwindow
} class which can be only
26 used when all rows have a constant height and columns have a constant width.
27 Like wxVScrolledWinow it lacks some of wxScrolledWindow features such as
28 scrolling another window or only scrolling a rectangle of the window and not
29 its entire client area.
31 If only vertical scrolling is needed, wxVScrolledWindow is recommended
32 because it is simpler to use.
34 There is no wxHScrolledWindow but horizontal-only scrolling is implemented
35 easily enough with this class.
37 To use this class, you need to derive from it and implement both the
38 \helpref{OnGetRowHeight()
}{wxhvscrolledwindowongetrowheight
} and the
39 \helpref{OnGetColumnWidth()
}{wxhvscrolledwindowongetcolumnwidth
} pure virtual
40 methods. You also must call
41 \helpref{SetRowColumnCounts
}{wxhvscrolledwindowsetrowcolumncounts
} to let the
42 base class know how many rows and columns it should display. After these
43 requirements are met scrolling is handled entirely by wxHVScrolledWindow. You
44 only need to draw the visible part of contents in your
{\tt OnPaint()
} method
45 as usual. You should use
46 \helpref{GetVisibleRowsBegin()
}{wxhvscrolledwindowgetvisiblerowsbegin
},
47 \helpref{GetVisibleColumnsBegin()
}{wxhvscrolledwindowgetvisiblecolumnsbegin
},
48 \helpref{GetVisibleRowsEnd()
}{wxhvscrolledwindowgetvisiblerowsend
}, and
49 \helpref{GetVisibleColumnsEnd()
}{wxhvscrolledwindowgetvisiblecolumnsend
} to
50 determine which lines to to display. If physical scrolling is enabled the
51 device context origin is shifted by the scroll position (through
52 {\tt PrepareDC()
}), child windows are moved as the window scrolls, and the
53 pixels on the screen are moved to minimize the region that requires painting.
54 Physical scrolling is enabled by default.
56 \wxheading{Derived from
}
58 \helpref{wxPanel
}{wxpanel
}
60 \wxheading{Include files
}
65 \latexignore{\rtfignore{\wxheading{Members
}}}
68 \membersection{wxHVScrolledWindow::wxHVScrolledWindow
}\label{wxhvscrolledwindowctor
}
70 \func{}{wxHVScrolledWindow
}{\param{wxWindow*
}{parent
},
\param{wxWindowID
}{id = wxID
\_ANY},
\param{const wxPoint\&
}{pos = wxDefaultPosition
},
\param{const wxSize\&
}{size = wxDefaultSize
},
\param{long
}{style =
0},
\param{const wxString\&
}{name = wxPanelNameStr
}}
72 This is the normal constructor, no need to call Create() after using this one.
74 Note that
{\tt wxVSCROLL
} and
{\tt wxHSCROLL
} are always automatically added to
75 our style, there is no need to specify them explicitly.
77 \func{}{wxHVScrolledWindow
}{\void}
79 Default constructor, you must call
\helpref{Create()
}{wxhvscrolledwindowcreate
}
82 \wxheading{Parameters
}
84 \docparam{parent
}{The parent window, must not be
{\tt NULL
}}
86 \docparam{id
}{The identifier of this window,
{\tt wxID
\_ANY} by default
}
88 \docparam{pos
}{The initial window position
}
90 \docparam{size
}{The initial window size
}
92 \docparam{style
}{The window style. There are no special style bits defined for
95 \docparam{name
}{The name for this window; usually not used
}
98 \membersection{wxHVScrolledWindow::Create
}\label{wxhvscrolledwindowcreate
}
100 \func{bool
}{Create
}{\param{wxWindow*
}{parent
},
\param{wxWindowID
}{id = wxID
\_ANY},
\param{const wxPoint\&
}{pos = wxDefaultPosition
},
\param{const wxSize\&
}{size = wxDefaultSize
},
\param{long
}{style =
0},
\param{const wxString\&
}{name = wxPanelNameStr
}}
102 Same as the
\helpref{non default ctor
}{wxhvscrolledwindowctor
} but returns
103 status code:
{\tt true
} if ok,
{\tt false
} if the window couldn't have been created.
105 Just as with the ctor above, both the
{\tt wxVSCROLL
} and the
{\tt wxHSCROLL
}
106 styles are always used. There is no need to specify either explicitly.
108 \membersection{wxHVScrolledWindow::EnablePhysicalScrolling
}\label{wxhvscrolledwindowenablephysicalscrolling
}
110 \func{\void}{EnablePhysicalScrolling
}{\param{bool
}{scrolling = true
}}
112 With physical scrolling enabled the device origin is changed properly when a
113 wxDC is prepared using
{\tt PrepareDC()
}, children are actually moved and layed
114 out according to the current scroll position, and the contents of the window
115 (pixels) are actually moved to reduce the amount of redraw needed.
117 Physical scrolling is enabled by default but can be disable or re-enabled at
118 any time. An example of when you'd want to disable it would be if you have
119 statically positioned graphic elements or children you do not want to move
120 while the window is being scrolled. If you disable physical scrolling you must
121 manually adjust positioning for items within the scrolled window yourself.
122 Also note that an unprepared wxDC requires you to do the same, regardless of
123 the physical scrolling state.
126 \membersection{wxHVScrolledWindow::EstimateTotalHeight
}\label{wxhvscrolledwindowestimatetotalheight
}
128 \constfunc{virtual wxCoord
}{EstimateTotalHeight
}{\void}
130 This protected function is used internally by wxHVScrolledWindow to estimate the
131 total height of the window when
132 \helpref{SetRowColumnCounts
}{wxhvscrolledwindowsetrowcolumncounts
}
133 is called. The default implementation uses the brute force approach if the
134 number of the items in the control is small enough. Otherwise, it tries to find
135 the average row height using some rows in the beginning, middle and the end.
137 If it is undesirable to query all these rows (some of which might be never
138 shown) just for the total height calculation, you may override the function and
139 provide your own guess using a better and/or faster method.
141 Note that although returning a totally wrong value would still work, it risks
142 causing some very strange scrollbar behaviour so this function should really
143 try to make the best guess possible.
146 \membersection{wxHVScrolledWindow::EstimateTotalWidth
}\label{wxhvscrolledwindowestimatetotalwidth
}
148 \constfunc{virtual wxCoord
}{EstimateTotalWidth
}{\void}
150 This protected function is used internally by wxHVScrolledWindow to estimate the
151 total width of the window when
152 \helpref{SetRowColumnCounts
}{wxhvscrolledwindowsetrowcolumncounts
}
153 is called. The default implementation uses the brute force approach if the
154 number of the items in the control is small enough. Otherwise, it tries to find
155 the average column width using some columns in the beginning, middle and the end.
157 If it is undesirable to query all these columns (some of which might be never
158 shown) just for the total width calculation, you may override the function and
159 provide your own guess using a better and/or faster method.
161 Note that although returning a totally wrong value would still work, it risks
162 causing some very strange scrollbar behaviour so this function should really
163 try to make the best guess possible.
166 \membersection{wxHVScrolledWindow::GetColumnCount
}\label{wxhvscrolledwindowgetcolumncount
}
168 \constfunc{wxSize
}{GetColumnCount
}{\void}
170 Get the number of columns this window contains (previously set by
171 \helpref{SetRowColumnCounts()
}{wxhvscrolledwindowsetrowcolumncounts
})
174 \membersection{wxHVScrolledWindow::GetRowCount
}\label{wxhvscrolledwindowgetrowcount
}
176 \constfunc{wxSize
}{GetRowCount
}{\void}
178 Get the number of rows this window contains (previously set by
179 \helpref{SetRowColumnCounts()
}{wxhvscrolledwindowsetrowcolumncounts
})
182 \membersection{wxHVScrolledWindow::GetRowColumnCounts
}\label{wxhvscrolledwindowgetrowcolumncounts
}
184 \constfunc{wxSize
}{GetRowColumnCounts
}{\void}
186 Get the number of rows (X or width) and columns (Y or height) this window
187 contains (previously set
188 by
\helpref{SetRowColumnCounts()
}{wxhvscrolledwindowsetrowcolumncounts
})
191 \membersection{wxHVScrolledWindow::GetVisibleBegin
}\label{wxhvscrolledwindowgetvisiblebegin
}
193 \constfunc{wxPoint
}{GetVisibleBegin
}{\void}
195 Returns the indicies of the first visible row (Y) and column (X).
199 \helpref{GetVisibleRowsBegin
}{wxhvscrolledwindowgetvisiblerowsbegin
},
\helpref{GetVisibleColumnsBegin
}{wxhvscrolledwindowgetvisiblecolumnsbegin
}
202 \membersection{wxHVScrolledWindow::GetVisibleColumnsBegin
}\label{wxhvscrolledwindowgetvisiblecolumnsbegin
}
204 \constfunc{size
\_t}{GetVisibleColumnsBegin
}{\void}
206 Returns the index of the first currently visible column.
210 \helpref{GetVisibleColumnsEnd
}{wxhvscrolledwindowgetvisiblecolumnsend
}
213 \membersection{wxHVScrolledWindow::GetVisibleColumnsEnd
}\label{wxhvscrolledwindowgetvisiblecolumnsend
}
215 \constfunc{size
\_t}{GetVisibleColumnsEnd
}{\void}
217 Returns the index of the first column after the currently visible page. If the
218 return value is $
0$ it means that no columns are currently shown (which only
219 happens if the control is empty). Note that the index returned by this method
220 is not always a valid index as it may be equal to
221 \helpref{GetColumnCount
}{wxhvscrolledwindowgetcolumncount
}.
225 \helpref{GetVisibleColumnsBegin
}{wxhvscrolledwindowgetvisiblecolumnsbegin
}
228 \membersection{wxHVScrolledWindow::GetVisibleEnd
}\label{wxhvscrolledwindowgetvisiblebegin
}
230 \constfunc{wxPoint
}{GetVisibleEnd
}{\void}
232 Returns the indicies of the row and column after the last visible row (Y) and
233 last visible column (X), respectively.
237 \helpref{GetVisibleRowsEnd
}{wxhvscrolledwindowgetvisiblerowsend
},
\helpref{GetVisibleColumnsEnd
}{wxhvscrolledwindowgetvisiblecolumnsend
}
240 \membersection{wxHVScrolledWindow::GetVisibleRowsBegin
}\label{wxhvscrolledwindowgetvisiblerowsbegin
}
242 \constfunc{size
\_t}{GetVisibleRowsBegin
}{\void}
244 Returns the index of the first currently visible row.
248 \helpref{GetVisibleRowsEnd
}{wxhvscrolledwindowgetvisiblerowsend
}
251 \membersection{wxHVScrolledWindow::GetVisibleRowsEnd
}\label{wxhvscrolledwindowgetvisiblerowsend
}
253 \constfunc{size
\_t}{GetVisibleRowsEnd
}{\void}
255 Returns the index of the first row after the currently visible page. If the
256 return value is $
0$ it means that no rows are currently shown (which only
257 happens if the control is empty). Note that the index returned by this method
258 is not always a valid index as it may be equal to
259 \helpref{GetRowCount
}{wxhvscrolledwindowgetrowcount
}.
263 \helpref{GetVisibleRowsBegin
}{wxhvscrolledwindowgetvisiblerowsbegin
}
266 \membersection{wxHVScrolledWindow::HitTest
}\label{wxhvscrolledwindowhittest
}
268 \constfunc{wxPoint
}{HitTest
}{\param{wxCoord
}{x
},
\param{wxCoord
}{y
}}
270 \constfunc{wxPoint
}{HitTest
}{\param{const wxPoint\&
}{pt
}}
272 Return the position (X as column, Y as row) of the cell occupying the specified
273 position (in physical coordinates). A value of
{\tt wxNOT
\_FOUND} in either X,
274 Y, or X and Y means it is outside the range availible rows and/or columns.
277 \membersection{wxHVScrolledWindow::IsColumnVisible
}\label{wxhvscrolledwindowiscolumnvisible
}
279 \constfunc{bool
}{IsColumnVisible
}{\param{size
\_t}{column
}}
281 Returns
{\tt true
} if the given column is at least partially visible or
282 {\tt false
} otherwise.
285 \membersection{wxHVScrolledWindow::IsRowVisible
}\label{wxhvscrolledwindowisrowvisible
}
287 \constfunc{bool
}{IsRowVisible
}{\param{size
\_t }{row
}}
289 Returns
{\tt true
} if the given row is at least partially visible or
{\tt false
}
293 \membersection{wxHVScrolledWindow::IsVisible
}\label{wxhvscrolledwindowisvisible
}
295 \constfunc{bool
}{IsVisible
}{\param{size
\_t }{row
},
\param{size
\_t}{column
}}
297 Returns
{\tt true
} if the given row and column are both at least partially
298 visible or
{\tt false
} otherwise.
301 \membersection{wxHVScrolledWindow::OnGetColumnWidth
}\label{wxhvscrolledwindowongetcolumnwidth
}
303 \constfunc{wxCoord
}{OnGetColumnWidth
}{\param{size
\_t }{n
}}
305 This protected pure virtual function must be overridden in the derived class
306 and should return the width of the given column in pixels.
310 \helpref{OnGetColumnsWidthHint
}{wxhvscrolledwindowongetcolumnswidthhint
}
313 \membersection{wxHVScrolledWindow::OnGetColumnsWidthHint
}\label{wxhvscrolledwindowongetcolumnswidthhint
}
315 \constfunc{void
}{OnGetColumnsWidthHint
}{\param{size
\_t }{columnMin
},
\param{size
\_t }{columnMax
}}
317 This function doesn't have to be overridden but it may be useful to do
318 it if calculating the columns' heights is a relatively expensive operation
319 as it gives the user code a possibility to calculate several of them at
322 {\tt OnGetColumnsWidthHint()
} is normally called just before
323 \helpref{OnGetColumnWidth()
}{wxhvscrolledwindowongetcolumnwidth
} but you
324 shouldn't rely on the latter being called for all columns in the interval
325 specified here. It is also possible that OnGetColumnWidth() will be
326 called for the columns outside of this interval, so this is really just a
329 Finally note that
{\it columnMin
} is inclusive, while
{\it columnMax
} is exclusive,
333 \membersection{wxHVScrolledWindow::OnGetRowHeight
}\label{wxhvscrolledwindowongetrowheight
}
335 \constfunc{wxCoord
}{OnGetRowHeight
}{\param{size
\_t }{n
}}
337 This protected pure virtual function must be overridden in the derived class
338 and should return the height of the given row in pixels.
342 \helpref{OnGetRowsHeightHint
}{wxhvscrolledwindowongetrowsheighthint
}
345 \membersection{wxHVScrolledWindow::OnGetRowsHeightHint
}\label{wxhvscrolledwindowongetrowsheighthint
}
347 \constfunc{void
}{OnGetRowsHeightHint
}{\param{size
\_t }{rowMin
},
\param{size
\_t }{rowMax
}}
349 This function doesn't have to be overridden but it may be useful to do
350 it if calculating the row's heights is a relatively expensive operation
351 as it gives the user code a possibility to calculate several of them at
354 {\tt OnGetRowsHeightHint()
} is normally called just before
355 \helpref{OnGetRowHeight()
}{wxhvscrolledwindowongetrowheight
} but you
356 shouldn't rely on the latter being called for all rows in the interval
357 specified here. It is also possible that OnGetRowHeight() will be
358 called for the rows outside of this interval, so this is really just a
361 Finally note that
{\it rowMin
} is inclusive, while
{\it rowMax
} is exclusive,
365 \membersection{wxHVScrolledWindow::RefreshColumn
}\label{wxhvscrolledwindowrefreshcolumn
}
367 \func{void
}{RefreshColumn
}{\param{size
\_t }{column
}}
369 Refreshes the specified column -- it will be redrawn during the next main loop
373 \membersection{wxHVScrolledWindow::RefreshRow
}\label{wxhvscrolledwindowrefreshrow
}
375 \func{void
}{RefreshRow
}{\param{size
\_t }{row
}}
377 Refreshes the specified row -- it will be redrawn during the next main loop
381 \membersection{wxHVScrolledWindow::RefreshRowColumn
}\label{wxhvscrolledwindowrefreshrowcolumn
}
383 \func{void
}{RefreshRowColumn
}{\param{size
\_t }{row
},
\param{size
\_t }{column
}}
385 Refreshes the specified cell -- it will be redrawn during the next main loop
390 \helpref{RefreshRowsColumns
}{wxhvscrolledwindowrefreshrowscolumns
}
393 \membersection{wxHVScrolledWindow::RefreshColumns
}\label{wxhvscrolledwindowrefreshcolumns
}
395 \func{void
}{RefreshColumns
}{\param{size
\_ t
}{fromColumn
},
\param{size
\_t }{toColumn
}}
397 Refreshes the columns between
{\it fromColumn
} and
{\it toColumn
} (inclusive).
398 {\it fromColumn
} should be less than or equal to
{\it toColumn
}.
402 \helpref{RefreshColumn
}{wxhvscrolledwindowrefreshcolumn
}
405 \membersection{wxHVScrolledWindow::RefreshRows
}\label{wxhvscrolledwindowrefreshrows
}
407 \func{void
}{RefreshRows
}{\param{size
\_ t
}{fromRow
},
\param{size
\_t }{toRow
}}
409 Refreshes the rows between
{\it fromRow
} and
{\it toRow
} (inclusive).
410 {\it fromRow
} should be less than or equal to
{\it toRow
}.
414 \helpref{RefreshRow
}{wxhvscrolledwindowrefreshrow
}
417 \membersection{wxHVScrolledWindow::RefreshRowsColumns
}\label{wxhvscrolledwindowrefreshrowscolumns
}
419 \func{void
}{RefreshRowsColumns
}{\param{size
\_t }{fromRow
},
\param{size
\_t }{toRow
},
\param{size
\_ t
}{fromColumn
},
\param{size
\_t }{toColumn
}}
421 Refreshes the region of cells between
{\it fromRow
},
{\it fromColumn
} and
422 {\it toRow
},
{\it toColumn
} (inclusive).
{\it fromRow
} and
{\it fromColumn
}
423 should be less than or equal to
{\it toRow
} and
{\it toColumn
}, respectively.
427 \helpref{RefreshRowColumn
}{wxhvscrolledwindowrefreshrowcolumn
}
430 \membersection{wxHVScrolledWindow::RefreshAll
}\label{wxhvscrolledwindowrefreshall
}
432 \func{void
}{RefreshAll
}{\void}
434 This function completely refreshes the control, recalculating the number of
435 items shown on screen and repainting them. It should be called when the values
436 returned by either
\helpref{OnGetRowHeight
}{wxhvscrolledwindowongetrowheight
} or
437 \helpref{OnGetColumnWidth
}{wxhvscrolledwindowongetcolumnwidth
} change for some
438 reason and the window must be updated to reflect this.
441 \membersection{wxHVScrolledWindow::ScrollColumns
}\label{wxhvscrolledwindowscrollcolumns
}
443 \func{bool
}{ScrollColumns
}{\param{int
}{columns
}}
445 Scroll by the specified number of columns which may be positive (to scroll
446 right) or negative (to scroll left).
448 Returns
{\tt true
} if the window was scrolled,
{\tt false
} otherwise (for
449 example if we're trying to scroll right but we are already showing the last
453 \membersection{wxHVScrolledWindow::ScrollRows
}\label{wxhvscrolledwindowscrollrows
}
455 \func{bool
}{ScrollRows
}{\param{int
}{rows
}}
457 Scroll by the specified number of rows which may be positive (to scroll
458 down) or negative (to scroll up).
460 Returns
{\tt true
} if the window was scrolled,
{\tt false
} otherwise (for
461 example if we're trying to scroll down but we are already showing the last
466 \helpref{LineUp
}{wxwindowlineup
},
\helpref{LineDown
}{wxwindowlinedown
}
469 \membersection{wxHVScrolledWindow::ScrollRowsColumns
}\label{wxhvscrolledwindowscrollrowscolumns
}
471 \func{bool
}{ScrollRowsColumns
}{\param{int
}{rows
},
\param{int
}{columns
}}
473 Scroll by the specified number of rows and columns which may be positive (to
474 scroll down or right) or negative (to scroll up or left).
476 Returns
{\tt true
} if the window was scrolled,
{\tt false
} otherwise (for
477 example if we're trying to scroll down but we are already showing the last
482 \helpref{LineUp
}{wxwindowlineup
},
\helpref{LineDown
}{wxwindowlinedown
}
485 \membersection{wxHVScrolledWindow::ScrollColumnPages
}\label{wxhvscrolledwindowscrollcolumnpages
}
487 \func{bool
}{ScrollColumnPages
}{\param{int
}{columnPages
}}
489 Scroll by the specified number of column pages, which may be positive (to
490 scroll right) or negative (to scroll left).
493 \membersection{wxHVScrolledWindow::ScrollPages
}\label{wxhvscrolledwindowscrollpages
}
495 \func{bool
}{ScrollPages
}{\param{int
}{rowPages
},
\param{int
}{columnPages
}}
497 Scroll by the specified number of row pages and column pages, both of which may
498 be positive (to scroll down or right) or negative (to scroll up or left).
502 \helpref{ScrollRowsColumns
}{wxhvscrolledwindowscrollrowscolumns
},\\
503 \helpref{PageUp
}{wxwindowpageup
},
\helpref{PageDown
}{wxwindowpagedown
}
506 \membersection{wxHVScrolledWindow::ScrollRowPages
}\label{wxhvscrolledwindowscrollrowpages
}
508 \func{bool
}{ScrollRowPages
}{\param{int
}{rowPages
}}
510 Scroll by the specified number of row pages, which may be positive (to scroll
511 down) or negative (to scroll up).
515 \helpref{PageUp
}{wxwindowpageup
},
\helpref{PageDown
}{wxwindowpagedown
}
518 \membersection{wxHVScrolledWindow::ScrollToColumn
}\label{wxhvscrolledwindowscrolltocolumn
}
520 \func{bool
}{ScrollToColumn
}{\param{size
\_t }{column
}}
522 Scroll to the specified column. The specified column will be the first visible
523 column on the left side afterwards.
525 Return
{\tt true
} if we scrolled the window,
{\tt false
} if nothing was done.
528 \membersection{wxHVScrolledWindow::ScrollToRow
}\label{wxhvscrolledwindowscrolltorow
}
530 \func{bool
}{ScrollToRow
}{\param{size
\_t }{row
}}
532 Scroll to the specified row. The specified column will be the first visible row
533 on the top afterwards.
535 Return
{\tt true
} if we scrolled the window,
{\tt false
} if nothing was done.
538 \membersection{wxHVScrolledWindow::ScrollToRowColumn
}\label{wxhvscrolledwindowscrolltorowcolumn
}
540 \func{bool
}{ScrollToRowColumn
}{\param{size
\_t }{row
},
\param{size
\_t }{column
}}
542 Scroll to the specified row and column. The cell described will be the top left
543 visible cell afterwards.
545 Return
{\tt true
} if we scrolled the window,
{\tt false
} if nothing was done.
548 \membersection{wxHVScrolledWindow::SetRowColumnCounts
}\label{wxhvscrolledwindowsetrowcolumncounts
}
550 \func{void
}{SetLineCount
}{\param{size
\_t }{row
},
\param{size
\_t }{column
}}
552 Set the number of rows and columns the window contains. The derived class must
553 provide the heights for all rows and the widths for all columns with indices up
554 to the respective values given here in its
555 \helpref{OnGetRowHeight()
}{wxhvscrolledwindowongetrowheight
} and
556 \helpref{OnGetColumnWidth()
}{wxhvscrolledwindowongetcolumnwidth
}