--- chetan verma <[EMAIL PROTECTED]>
wrote:
>
>
> 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
> don't get any more messages, so SetCapture() never
> gets called annd for the same reason mouse leave
> also doesn't works.
>
You need to use the coordinates from the mouse move
message to determine if mouse in the control.
If the mouse is in the control and the release capture
is called, the messages should be sent to the
control.
Mickey M.
Construction Partner Inc.
http://www.constructionpartner.com
____________________________________________________________________________________
Boardwalk for $500? In 2007? Ha! Play Monopoly Here and Now (it's updated for
today's economy) at Yahoo! Games.
http://get.games.yahoo.com/proddesc?gamekey=monopolyherenow