Ensure (partial) visibility of a column

WEBINAR: On-demand webcast

How to Boost Database Development Productivity on Linux, Docker, and Kubernetes with Microsoft SQL Server 2017 REGISTER >

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));
	ASSERT(pHeader->IsKindOf(RUNTIME_CLASS(CHeaderCtrl)));

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

	CRect rcClient;
	GetClientRect(&rcClient);

	int nOffset = GetScrollPos(SB_HORZ);

	if(bPartialOK)
	{
		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);
		Scroll(size);
	}

	return true;
}



Comments

  • 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

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

Top White Papers and Webcasts

  • Microsoft Azure® is a leading choice for businesses looking to take advantage of the cloud. Azure is particularly appealing to businesses that have already invested in Microsoft on-premises and are now considering running these applications and other workloads in the cloud. To understand how to make this move to Azure, many businesses are turning to managed service providers (MSPs) with specific Azure expertise. Read this white paper to learn the eight key areas to focus on when considering an MSP for an …

  • The software-defined data center (SDDC) and new trends in cloud and virtualization bring increased agility, automation, and intelligent services and management to all areas of the data center. Businesses can now more easily manage the entire lifecycle of their applications and services via the SDDC. This Aberdeen analyst report examines how a strong foundation in both the cloud and internal data centers is empowering organizations to fully leverage their IT infrastructure and is also preparing them to be able …

Most Popular Programming Stories

More for Developers

RSS Feeds

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