Drop down a popdown window instead of a dropdown list from a combobox

Environment: VC++ 5.0 , Windows NT 4.0

 

This article explains how to drop down a tool window from a combobox. The dropdown tool window will replace the default dropdown list in an ordinary combobox. The following procedure describes how to go about it:

Step 1:

When the user clicks the arrow button in the combobox, the ON_CBN_DROPDOWN handler gets to have a go at it. ON_CBN_DROPDOWN(IDC_COMBO1, OnDropdownCombo)

Now to disable the default drop down call ShowDropDown() member function of the combobox with the flag set to FALSE.

void CCoolComboDlg::OnDropdownCombo()
{

	// prevent drop down of the combo
	m_CoolCombo.ShowDropDown(FALSE);  

	// Display our own popdown window instead 
	DisplayPopdownWindow(); 
} 

Step 2:

Now it's time to display our pop down window. Make sure you create the window with the extended styles WS_EX_TOPMOST and WS_EX_TOOL_WINDOW. The WS_EX_PALETTE_WINDOW style is optional.

void CCoolComboDlg::DisplayPopdownWindow()
{
	//Get the combo's alignment
	CRect rectCombo;
	m_CoolCombo.GetWindowRect(&rectCombo);

	//if window is already present delete it
	if(m_pWndPopDown) delete m_pWndPopDown;
	
	///Register class and create window
	LPCTSTR lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW);
	m_pWndPopDown = new CPopDownWnd();
	m_pWndPopDown->CreateEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW|WS_EX_PALETTEWINDOW
	                        lpszClass, 
	                        _T(""),
	                        WS_POPUP | WS_VISIBLE,
	                        rectCombo.left,rectCombo.bottom, 
	                        rectCombo.Width(),200,
	                        m_CoolCombo.GetSafeHwnd(),
	                        NULL,
	                        NULL);
}

Step 3:

Now there is one problem that crops up. Grab the title bar and move the dialog. What happens ?. Our tool window floats freely independent of the dialog. So we need to prevent the user from dragging the dialog. Trapping the non client hit test notifications is the way to go about it. When the user clicks the title bar , a HTCAPTION is returned. To nullify the drag attempt, simply return HTNOWHERE.

UINT CCoolComboDlg::OnNcHitTest(CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	UINT nHitTest =  CDialog::OnNcHitTest(point);
	//HTCAPTION  implies user clicked on the title bar , so return HTNOWHERE 
	return (nHitTest == HTCAPTION) ? HTNOWHERE : nHitTest;
}

That's it. So you now have your own window popping out from the combobox instead of the default list entries.

Last updated: 13 June 1998



Comments

  • louis vuitton evidence sunglasses for women thjahj

    Posted by Achiegaic on 05/16/2013 06:48am

    http://hermesbags.citationguide.net 27497 965631how to identify fake louis vuitton bags louis vuitton outlet store online cheap hermes belts china hermes bags for sale on ebay

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

Top White Papers and Webcasts

  • On-demand Event Event Date: August 27, 2015 With the cloud enabling companies to spin up servers and stand up data stores more quickly, mobile apps can be created faster, reducing the time-to-value. But three major obstacles stand in the way for many organizations: The backlog of app project requests confronting every enterprise regardless of their internal app development capabilities Finding and employing better, faster tools to speed and simplify the process of developing those apps. The emergence of …

  • U.S. companies are desperately trying to recruit and hire skilled software engineers and developers, but there is simply not enough quality talent to go around. Tiempo Development is a nearshore software development company. Our headquarters are in AZ, but we are a pioneer and leader in outsourcing to Mexico, based on our three software development centers there. We have a proven process and we are experts at providing our customers with powerful solutions. We transform ideas into reality.

Most Popular Programming Stories

More for Developers

RSS Feeds

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