In order to provide my own CMFCHeaderCtrl derived header in a list control I override CMFCListCtrl ::GetHeaderCtrl() such that all references to the header use my header. Unfortunately there are 2 functions in CMFCListCtrl that reference the original header by using m_wndHeader directly. Therefore I also have to override CMFCListCtrl::OnSize and CMFCListCtrl::InitHeader() in order to use GetHeaderCtrl(). This should be done in CMFCListCtrl.
You may wonder why I want to override CMFCHeaderCtrl. It's because the sort arrows are big and ugly. This way I can adjust the arrow rectangle in OnDrawSortArrow but the origianl rectangle still takes too much space away from the header label. I suggest drawing a neater, smaller sort arrow like the header in Windows 7 task manager.