
Introduction
This adds sorting to MFC's list control class. Sorting is automatically taken care
of: it will sort text, dates and numbers in ascending or descending order, and show an arrow in the appropriate direction in the heading for the sorted column. It also adds some other things that make life easier when using list controls - it is much easier to set the columns and add rows, and it can load and save the column widths.
How to use it
Look at the example to see how it is used. You need to add the files SortListCtrl.cpp/h and
SortHeaderCtrl.cpp/h to your project, then associate a CSortListCtrl
variable with your list control (you can do this with ClassWizard).
In the OnInitDialog
member function of your dialog class you set the columns and their initial widths by calling the list control's
SetHeadings
function, it takes a string, or a string ID in the string table, which defines the column headings and their widths,
e.g.
m_ctlList.SetHeadings( _T("Name,120;Date of Birth,90;Score,50") );
Adding rows is very easy, you call the list control's AddItem
function with the same number of strings as the number of columns you added,
e.g.
m_ctlList.AddItem( _T("Mark Jackson"), _T("09/08/1974"), _T("100") );
To remember the columns' widths call the list control's LoadColumnInfo
function after setting the headings, add a handler for your dialog's
WM_DESTROY
message and in there call SaveColumnInfo
.
Implementation
It was a REAL pain to do, your callback function gets the item data for the two rows to compare, but what use is that, you need the text to compare! This control stores the text for the columns in the item data, so the compare function can get at it, it also allows users of the control to use the item data as usual.
Credits
The code for drawing the arrow in the header control was written by Zafir Anjum
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.