Mickey Mathieson <[EMAIL PROTECTED]> wrote:                               
 --- chetan verma <[EMAIL PROTECTED]>
 wrote:
 
 > 
 > 
 > chetan verma <[EMAIL PROTECTED]> wrote:
 >                               
 >  
 >  chetan verma <[EMAIL PROTECTED]>
 > wrote:                               
 >   
 >   Mickey Mathieson <[EMAIL PROTECTED]> wrote:     
 >                          
 >    --- chetan verma <[EMAIL PROTECTED]>
 >    wrote:
 >    
 >    > hi,
 >    > I am trying to create a "drop down tree"
 > control
 >    > similar to "drop down list" (or combobox). I
 > have
 >    > derived my class from CComboBox and have a
 > CTreeCtrl
 >    > object in my derived class. What I am trying to
 > do
 >    > is draw my tree over the dropped down list box.
 >    > Everything works fine except the scroll bar.
 >    > After I make my tree visible I call SetCapture
 > to
 >    > capture all the mouse inputs (Two reasons to do
 > so:
 >    > 1] I need to know if user clicked outside tree
 > so
 >    > that i can make the tree invisible 2] The
 > dropped
 >    > down list of the combo box does the same thing
 > so,
 >    > to make sure that messages are sent to tree
 > instead
 >    > of the list control.)
 >    > But After calling this the scroll bar in the
 > tree
 >    > doesn't works. I can scroll using the mouse
 > wheel
 >    > but scroll bar doesn't responds.
 >    > If you know how to handle this please help me.
 >    > If you have any doubts please let me know.
 >    > 
 >    > 
 >    > Following are the functions called to show/hide
 > the
 >    > tree
 >    > 
 >    >
 >   
 >
 //=============================================================================
 >    > void uiTreeComboBox::show_drop_down(CRect*
 >    > dropped_rect)
 >    > {
 >    >   InterceptParentWndProc();  //function to
 > subclass
 >    > parent window to capture the messages sent by
 >    > combobox to its parent
 >    >   display_tree(dropped_rect); //dropped rect is
 > the
 >    > rect of the dropped down list
 >    >   dropped_state = utTRUE;
 >    >   m_treectrl.Invalidate();
 >    >   Invalidate();
 >    >   ::SetCapture(m_treectrl.GetSafeHwnd()); 
 >    > }
 >    > 
 >    > 
 >    >
 >   
 >
 //=============================================================================
 >    > void uiTreeComboBox::hide_drop_down()
 >    > {
 >    >   dropped_state = utFALSE;
 >    >   ::ReleaseCapture();
 >    >   m_treectrl.ShowWindow(SW_HIDE);
 >    >   UnInterceptWndProc(); 
 >    >   Invalidate();
 >    >  }
 >    > 
 >    The mouse capture should only be set when the
 > mouse
 >    leaves the drop down (treecntl).
 >    
 >    Check out the messages WM_MOUSELEAVE and
 > WM_MOUSENTER.
 >    
 >    When the WM_MOUSELEAVE is sent turn on the mouse
 >    capture. When WM_MOUSEENTER is sent turn off the
 > mouse
 >    capture.
 >    
 >    Mickey M.
 >    Construction Partner Inc.
 >    http://www.constructionpartner.com
 >     
 >   
 >   Thanks Mickey for your help. I tried doing this
 > but it did not help. After I capture mouse i don't
 > get the mouse leave message. And also after
 > releasing i am not getting any mouse move messages
 > until i click on the tree window.
 
 The set capture needs to be set after receiving the
 message WM_MOUSELEAVE - not before. The capture needs
 to be released when WM_MOUSEENTER is received. 
 
 Sometimes receiving these messages can be problematic
 and and alternate approach can be used - see code
 segment below.
 
 case WM_MOUSEMOVE :
         {
           POINTS point;
           point.x = GET_X_LPARAM(lParam); 
           point.y = GET_Y_LPARAM(lParam); 
 
    CRect rClient;
    GetClientRect(rClient);
 
    if (rClient.PtInRect(point))
    {
      SetCapture();      // Mouse in
    }
    else
    {
      ReleaseCapture();  // Mouse out
    }
           break;
         }
 
 >   Is there any way to get the handle of the scroll
 > bar in the tree window. What I am thinking is to
 > post the message to scroll bar whenever i get mouse
 > move or mouse click messages.
 >   
 >   Thanks and regards
 >   chetan
 >   
 
 Mickey M.
 Construction Partner Inc.
 http://www.constructionpartner.com


Hi,
I tried this once more as:
if(nMsg == WM_MOUSEMOVE) {
    CRect tree_rect;
    m_activecombo->m_treectrl.GetClientRect(&tree_rect);
    if(tree_rect.PtInRect(point)) {
      ::ReleaseCapture();
    }
  }
  else {
    ::SetCapture(m_activecombo->m_treectrl.GetSafeHwnd());
    }
  }
The problem is that, once i release the capture, i dont get any more messages, 
so SetCapture() never gets called annd for the same reason mouse leave also 
doesn't works.

-chetan






       
---------------------------------
Be a better Heartthrob. Get better relationship answers from someone who knows.
Yahoo! Answers - Check it out. 

[Non-text portions of this message have been removed]

Reply via email to