Drop down a popdown window instead of a dropdown list from a combobox
Environment: VC++ 5.0 , Windows NT 4.0
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