Ensure (partial) visibility of a column

The following function ensures that a column is at least partially visible. Rex Myer provided a comparable function in his article "Multiline editable subitems", but his code relies on the list having an item with index 0, it steps through all columns to find the left border and finally, if a column overlaps the right border by just one pixel but still has a 200 pixel distance from the left, the column will be moved to the left border. Additionally, the following code provides the bPartialOK-Flag known from CListCtrl::EnsureVisible(). Usage should be pretty much obvious :)

This code was developed with VC++ 5.0 (SP3), Windows NT 4.0 (SP3) and the new COMCTL32.DLL (v4.72)

bool CMyListCtrl::EnsureColumnVisible(int nColumn, bool bPartialOK)
	CHeaderCtrl* pHeader = reinterpret_cast(GetDlgItem(0));

	CRect rcHeader;
	Header_GetItemRect(pHeader->m_hWnd, nColumn, &rcHeader);

	CRect rcClient;

	int nOffset = GetScrollPos(SB_HORZ);

		if((rcHeader.left - nOffset < rcClient.right) && (rcHeader.right - nOffset > 0))
			return true;

	int nScrollX = 0;

	if((rcHeader.Width() > rcClient.Width()) || (rcHeader.left - nOffset < 0))
		nScrollX = rcHeader.left - nOffset;
	else if(rcHeader.right - nOffset > rcClient.right)
		nScrollX = rcHeader.right - nOffset - rcClient.right;

	if(nScrollX != 0)
		CSize size(nScrollX, 0);

	return true;


  • Error in compiling.

    Posted by Legacy on 04/23/1999 12:00am

    Originally posted by: Carl Smith

    It looks like on the first line of code:

    CHeaderCtrl* pHeader = reinterpret_cast(GetDlgItem(0));

    the type-id was left out, reinterpret_cast requires the form:
    reinterpret_cast < type-id > ( expression ).

    The line should read:
    CHeaderCtrl* pHeader = reinterpret_cast<CHeaderCtrl*>(GetDlgItem(0));

    Hope this helps:
    Carl Smith

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Featuring Doug Kaplan, Director of Customer Success at InfoArmor Live Event Date: October 26, 2016 @ 10 AM PT / 1 PM ET We'll be highlighting InfoArmor, a solution provider for identity protection software, who recently made the move to a cloud contact center to support their advanced threat protection services offered to their large user base in the cloud. Join InfoArmor and Genesys to hear: An insider view of how InfoArmor built a justification and gained consensus to make the move to the cloud Tips on …

  • The open source cloud computing project OpenStack has come a long way since NASA and Rackspace launched it in 2010. Backed by leading technology infrastructure providers including Cisco, Dell, EMC, HP, IBM, Intel, and VMware, OpenStack underpins significant workloads at an increasingly diverse set of organizations, including BWM, CERN, Comcast, eBay, and Wal-Mart. For CIOs engaged in broader programs to win, serve, and retain customers -- and refocus business technology (BT) spend -- a planned and pragmatic …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date