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]