Click here to Skip to main content
Click here to Skip to main content

3D Studio Max like Slidable DialogBar

, 17 Feb 2002
Rate this:
Please Sign up or sign in to vote.
Ever seen 3D Studio 2.5 Slidable DialogBar? Want to know how they did it?

Introduction

Kinetix and Autodesk always impressed me with their great GUI. 3D Studio Max has a Slidable DialogBar that the user can slide up and down... Well here is how to do it yourself. It is probably one of the easiest code I ever had to show around and anybody with a little experience in VC++ / MFC will get it. (I actually posted it because I have never seen another programmer or company create a GUI similar to 3DS Max)

Here is the Magic Theory behind it

  1. Create any kind of CWnd derived class . That will be your TOP level Window (could be a CDialog / CDialogBar / CButton anything...)

    Lets say CDialogBarExt ....derived from CDialogBar.

  2. Create a CWnd derived Class that will contain the actual sliding dialog.

    Lets say CDlgContainer ....derived from CWnd

  3. Create a member variable for CDialogBarExt of type CDlgContainer.

  4. Create a CDialog derived class .

    Lets say CInnerDlg (this is the actual sliding dialog !!!)

  5. Create a member variable of type CInnerDlg for CDlgContainer....

So up till know we have CDialogBarExt--->CDlgContainer--->CInnerDlg ? ok? the Code for Sliding the dialog is below and should be entered in the CInnerDlg

The easiest way to understand, is to look through the code it is very simple!!!

void CInnerDlg::OnLButtonUp(UINT nFlags, CPoint point) 
{
    /// IF WE WHERE DRAGGING THEN RELEASE THE MOUSE CAPTURE
    if(m_bDragging)
    {
        ReleaseCapture();
        m_bDragging = FALSE;
    }
    
    CDialog::OnLButtonUp(nFlags, point);
}

void CInnerDlg::OnMouseMove(UINT nFlags, CPoint point) 
{

 int ydiff;

    if(m_bDragging && nFlags & MK_LBUTTON)
    {
       // GET DIALOGS WINDOW SCREEN COORDINATES
       CRect rcWnd;
       GetWindowRect(&rcWnd);

       // GET PARENTS CLIENT RECTANGLE
       CRect prect;
       GetParent()->GetClientRect (prect);

       // IF WE HAVE TO GO DOWN OR UP // 
       if (m_ptDragFrom.y>point.y) {    
          ydiff = point.y - m_ptDragFrom.y;
          posY+=ydiff;
       }// IF WE HAVE TO GO DOWN OR UP // 
       if (m_ptDragFrom.y<point.y) {    
          ydiff = m_ptDragFrom.y -point.y;
          posY-=ydiff;
       }
       //////////////////////////////


       // CALCULATE IF WE ARE GOING TO EXCEED BOTTOM DIALOG BORDER
       int tmp=prect.Height ()-rcWnd.Height ();
       
       // CONSTRAINTS !
       if (posY<tmp+1) posY=tmp+1;
       if (posY>-1) posY=-1;

       // MOVE THE DIALOG 
        SetWindowPos(NULL, 3, 
                     posY, 
                     rcWnd.Width(), 
                     rcWnd.Height(), SWP_SHOWWINDOW|SWP_NOSIZE);


    }    
    
    CDialog::OnMouseMove(nFlags, point);
}

void CInnerDlg::OnLButtonDown(UINT nFlags, CPoint point) 
{
   // START DRAGGING 
   SetCapture();
   m_bDragging = TRUE;
   m_ptDragFrom = point;
   ::SetCursor(AfxGetApp()->LoadCursor (IDC_CURSOR_HAND));
   CDialog::OnLButtonDown(nFlags, point);
}

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

John Aspras

United States United States
No Biography provided

Comments and Discussions

 
Generalyes but... legal issues PinmemberMember 564686713-Nov-08 4:53 
QuestionHow do I replace m_inner with a sheet Pinmemberakira3230-Oct-08 0:57 
QuestionHelp to use the buttons on it Pinmembermaster_pgl30-Oct-07 20:59 
GeneralGreat effort indeed (to author) PinmemberRAD CPP30-Jul-06 1:34 
GeneralProblem CInnerDlg is not "inside" my Container Pinmemberpeca200610-Jun-06 23:35 
Generalgreat job, can you helpl me to figure out this problem, thanks a lot Pinmembernickong25-Jul-05 22:47 
QuestionHow to make a Dockable "TabPan" with this DialogBar just like 3DS MAX ? Pinmembersgy2321-Dec-03 23:22 
AnswerRe: How to make a Dockable &quot;TabPan&quot; with this DialogBar just like 3DS MAX ? Pinmemberimsniper15-Jan-04 3:36 
QuestionHow to map messages back to the main frame? PinmemberBubba214618-Jul-03 3:48 
AnswerRe: How to map messages back to the main frame? PinmemberBubba214621-Jul-03 5:06 
GeneralRe: How to map messages back to the main frame? PinmemberWREY3-Jun-04 18:43 
Generaldoesn't always work Pinmembermel@endlessquests.com1-Jul-03 10:07 
GeneralAwesome, but I have problems PinmemberTurok_4_2_023-May-03 7:33 
GeneralThanks a lot Pinmembercwtung10-Apr-03 21:33 
GeneralRe: Thanks a lot Pinmemberimsniper18-Apr-03 0:19 
GeneralRe: Thanks a lot Pinmembercwtung14-Aug-07 18:51 
QuestionHow to make it slide? PinsussJinming Xu10-Apr-03 9:16 
AnswerRe: How to make it slide? PinsussAnonymous22-Apr-03 1:39 
Generalthere is a control better than this already in Code Project Pinmemberkonqueror22-Jan-03 23:47 
Generaldocking CdialogBar like toolbal Pinmemberyaser8-Sep-02 21:16 
GeneralRe: docking CdialogBar like toolbal Pinmembermnansyah30-Jan-03 20:04 
GeneralUsability... Pinmemberaaronp3-Sep-02 6:29 
GeneralRe: Usability... PinsussAnonymous8-Sep-02 1:26 
GeneralThank you, thank you..oh, and thank you!! PinsussAnonymous16-Jul-02 22:33 
GeneralIt has a problem.... PinmemberAnonymous18-Jun-02 3:04 
GeneralRe: It has a problem.... PinmemberJohn Aspras19-Jun-02 20:59 
GeneralSorry, not cool at all PinmemberAnonymous20-Mar-02 13:11 
GeneralRe: Sorry, not cool at all PinmemberJohn Aspras2-Apr-02 20:48 
GeneralRe: Sorry, not cool at all PinmemberZHANG Yan8-May-02 21:21 
GeneralRe: Sorry, not cool at all PinsussAnonymous20-Aug-02 12:50 
GeneralRe: Sorry, not cool at all - cool code, but stupid reader! PinsussAnonymous-219-Aug-02 0:09 
GeneralRe: Sorry, not cool at all - cool code, but stupid reader! PinsussAnonymous-219-Aug-02 0:09 
GeneralRe: Sorry, not cool at all Pinmembercwtung10-Apr-03 21:43 
GeneralRe: Sorry, not cool at all Pinmemberaguest22-Apr-03 19:22 
GeneralRe: Sorry, not cool at all Pinmemberdoublej7-Nov-03 3:45 
GeneralRe: Sorry, not cool at all PinmemberSynetech29-Oct-04 9:43 
GeneralRe: Sorry, not cool at all Pinmembercwtung14-Aug-07 19:43 
GeneralGood work. Just a problem! PinmemberAnonymous26-Feb-02 11:04 
GeneralRe: Good work. Just a problem! PinmemberJohn Aspras6-Mar-02 1:59 
QuestionUsability issue? PinmemberIgor Green18-Feb-02 20:29 
AnswerRe: Usability issue? PinmemberChristian Graus18-Feb-02 23:34 
GeneralRe: Usability issue? PinmemberThomas Freudenberg18-Feb-02 23:54 
AnswerRe: Usability issue? PinmemberMitchell19-Feb-02 4:42 
AnswerRe: Usability issue? PinmemberBjoern Graf19-Feb-02 5:48 
GeneralRe: Usability issue? PinmemberIgor Green20-Feb-02 21:13 
AnswerRe: Usability issue? Pinmemberarchimedean4-May-03 5:01 
GeneralThat is <i>sooo</i> cool! PinmemberShog918-Feb-02 14:06 
GeneralRe: That is <i>sooo</i> cool! PinmemberChristian Graus18-Feb-02 17:27 
GeneralRe: That is <i>sooo</i> cool! PinmemberTriac12-Mar-02 21:54 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web03 | 2.8.140721.1 | Last Updated 18 Feb 2002
Article Copyright 2002 by John Aspras
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid