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)
> 
 
  
   
     
  | Вернуться в корень Архива
  |