How do I access the CHeaderCtrl in a CListCtrl?
bshamsian@ccvhs.vhsla.com Tuesday, November 26, 1996 Environment: VC++ 4.1b, NT 4.0 I need to place arrows in the CHeaderCtrl of a CListCtrl to indicate if a column is sorted Ascending or Descending. I have seen this in other applications like MS Scheduler or the new MS News application which is part of MS Internet Explorer package. I probably need to draw the column heading myself using OwnerDraw but how do I get hold of the CHeaderCtrl embedded in a CListCtrl? ================================== Ben Shamsian (bshamsian@vhsla.com)
Randy Taylor -- randy_taylor@ebt.com Wednesday, November 27, 1996 CHeaderCtrl *head = (CHeaderCtrl*) m_yourListCtrl->GetDlgItem(0); ---------- > From: bshamsian@ccvhs.vhsla.com > To: mfc-l@netcom.com > Subject: How do I access the CHeaderCtrl in a CListCtrl? > Date: Tuesday, November 26, 1996 1:58 PM > > Environment: VC++ 4.1b, NT 4.0 > > I need to place arrows in the CHeaderCtrl of a CListCtrl to indicate > if a column is sorted Ascending or Descending. I have seen this in > other applications like MS Scheduler or the new MS News application > which is part of MS Internet Explorer package. I probably need to > draw the column heading myself using OwnerDraw but how do I get hold > of the CHeaderCtrl embedded in a CListCtrl? > > ================================== > Ben Shamsian (bshamsian@vhsla.com)
Charles N. Johnson -- charlej9@mail.idt.net Thursday, November 28, 1996 Ben: I believe the resource ID for the header control that is displayed inside a list control with the "report" style is 0, so something like the following should work: CHeaderCtrl* pHdrCtrl = pYourListCtrl->GetDlgItem(0); if (pHdrCtrl == NULL) { Trace0("ERROR -- LIST CONTROL: not in report style\n"); // do an ASSERT and return, // or something to get your attention in DEBUG mode } else { // get your work done here... } Cheers-- Charles ---------- > From: bshamsian@ccvhs.vhsla.com > To: mfc-l@netcom.com > Subject: How do I access the CHeaderCtrl in a CListCtrl? > Date: Tuesday, November 26, 1996 12:58 PM > > Environment: VC++ 4.1b, NT 4.0 > > I need to place arrows in the CHeaderCtrl of a CListCtrl to indicate > if a column is sorted Ascending or Descending. I have seen this in > other applications like MS Scheduler or the new MS News application > which is part of MS Internet Explorer package. I probably need to > draw the column heading myself using OwnerDraw but how do I get hold > of the CHeaderCtrl embedded in a CListCtrl? > > ================================== > Ben Shamsian (bshamsian@vhsla.com) >
Thomas Schall -- schall@csv.ica.uni-stuttgart.de Friday, November 29, 1996 > > Environment: VC++ 4.1b, NT 4.0 > > I need to place arrows in the CHeaderCtrl of a CListCtrl to indicate > if a column is sorted Ascending or Descending. I have seen this in > other applications like MS Scheduler or the new MS News application > which is part of MS Internet Explorer package. I probably need to > draw the column heading myself using OwnerDraw but how do I get hold > of the CHeaderCtrl embedded in a CListCtrl? > This Problem is easy to solve. You need to subclass the original header control. Use for example a member variable m_Header of class CYourHeaderCtrl (derived from CHeaderCtrl) in your list control. int CYourListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { // subclass default header control m_Header.SubclassDlgItem(GetDlgItem(0)->GetDlgCtrlID(), this); // ..... return 0; } That's all. Now you can reimplement any WM_xxx event. Thomas
T.K.Wessing -- tkw@xs4all.nl Thursday, November 28, 1996 Environment: VC++ 4.2b, NT 4.0 Hi, It is really quite simple (if you see it) First: get a pointer to the header control in the list then: Ask the header for it's number of columns CHeaderCtrl* GetHeaderControl( const CListCtrl* pList) { CHeaderCtrl* pHdr ; ASSERT( NULL != pList ); // the Child ID of the header control is hardcoded (to 0) in Microsoft Windows pHdr = (CHeaderCtrl*) pList->GetDlgItem( 0 ) ; // // place the calling function after initialization please ASSERT( NULL != pHdr ); if ( NULL == pHdr ) { return NULL ; } return pHdr; } int GetSizesFromListCtrl( const CListCtrl* pList ) { CHeaderCtrl* pHdr ; ASSERT( NULL != pList ); pHdr = GetHeaderControl( pList ) ; // // place the calling function after initialization please ASSERT( NULL != pHdr ); if ( NULL == pHdr ) { return ; } return GetSizesFromHeaderCtrl( pHdr ) ; } int GetSizesFromHeaderCtrl( const CHeaderCtrl* pHeader ) { ASSERT( NULL != pHeader ); ASSERT_VALID( pHeader ); return pHeader->GetItemCount(); } -- /===================================== | T.K.Wessing | Senior Software Engineer | Caledon Systems International BV | The Netherlands | Private E-Mail: | tkw@xs4all.nl \===================================== The Nedherlands ? Yep, "The Nedherlands" It does exists indeed! ---------- > From: bshamsian@ccvhs.vhsla.com > To: mfc-l@netcom.com > Subject: How do I access the CHeaderCtrl in a CListCtrl? > Date: Tuesday, November 26, 1996 7:58 PM > > Environment: VC++ 4.1b, NT 4.0 > > I need to place arrows in the CHeaderCtrl of a CListCtrl to indicate > if a column is sorted Ascending or Descending. I have seen this in > other applications like MS Scheduler or the new MS News application > which is part of MS Internet Explorer package. I probably need to > draw the column heading myself using OwnerDraw but how do I get hold > of the CHeaderCtrl embedded in a CListCtrl? > > ================================== > Ben Shamsian (bshamsian@vhsla.com) >
| Вернуться в корень Архива |