Using a CDialogBar with an MDI app
CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 3 of 3

Thread: Using a CDialogBar with an MDI app

Hybrid View

  1. #1
    Join Date
    Aug 2010
    Posts
    47

    Question Using a CDialogBar with an MDI app

    What I need to do is add an area (preferably at the top) to my app that will host some custom controls like buttons or whatever else I happen to need. I can't seem to get it working though. Here's what I'm doing, starting from scratch in Visual Studio 2010:

    New->Project->MFC Application
    Name it skeleton
    On the application type window:
    Application type: Multiple Documents (uncheck tabbed documents)
    Project style: MFC Standard
    Finish

    Now I add a dialog to the app by right-clicking my project, and going:
    Add->Resource
    Dialog->IDD_DIALOGBAR
    New

    I now have a dialog, and add some buttons or text just so I can see it easily. For this skeleton app I'll leave it's id as IDD_DIALOGBAR.

    Now I go to MainFrm.cpp (generated by the app wizard), find the OnCreate() function, and add the following code to the bottom of the function (but above the return in the function):
    Code:
    if (!m_wndDlgBar.Create(this, IDD_DIALOGBAR,
    	CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY, IDD_DIALOGBAR))
    {
    	TRACE0("Failed to create DlgBar\n");
    	return -1;      // fail to create
    }
    And in the protected section in MainFrm.h I add:
    Code:
    CDialogBar  m_wndDlgBar;
    From what I've read, I would think that it would work at this point. But I get nothing. No error, just the dialogbar doesn't appear. A couple things I searched up on the net indicated that I would have to make a DockControlBar call to get it added, so I try adding this below the Create() call:
    Code:
    m_wndDlgBar.EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndDlgBar);
    Now, at this point it bails on an assert in DockControlBar which says:
    // assert fails when initial CBRS_ of bar does not
    // match available docking sites, as set by EnableDocking()

    I find this odd, as I think I specified any available dock site. Then again, I'm not convinced that I should even be doing these last two lines.

    Anyone know what I'm missing here?

    Edit: There is a working test project that does the kind of thing I want at:
    http://www.codeguru.com/forum/showthread.php?t=308712
    I'm not sure what he's doing differently from me. The only significant difference I see is that my class is based on CMDIFrameWndEx and his is CMDIFrameWnd. Would that make a big difference?
    Last edited by Ankheg; September 14th, 2010 at 01:51 PM. Reason: Added more info

  2. #2
    Join Date
    May 2006
    Location
    Dresden, Germany
    Posts
    458

    Re: Using a CDialogBar with an MDI app

    Quote Originally Posted by Ankheg View Post
    ...
    Code:
    if (!m_wndDlgBar.Create(this, IDD_DIALOGBAR,
        CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY, IDD_DIALOGBAR))
    {
        TRACE0("Failed to create DlgBar\n");
        return -1;      // fail to create
    }
    And in the protected section in MainFrm.h I add:
    Code:
    CDialogBar  m_wndDlgBar;
    From what I've read, I would think that it would work at this point. But I get nothing. No error, just the dialogbar doesn't appear. A couple things I searched up on the net indicated that I would have to make a DockControlBar call to get it added, so I try adding this below the Create() call:
    Code:
    m_wndDlgBar.EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndDlgBar);
    Now, at this point it bails on an assert in DockControlBar which says:
    // assert fails when initial CBRS_ of bar does not
    // match available docking sites, as set by EnableDocking()

    I find this odd, as I think I specified any available dock site. Then again, I'm not convinced that I should even be doing these last two lines.
    No you didn't. I'm not sure whether this is the reason for not showing the dialog bar but you specified CBRS_LEFT when creating the dialog bar and CBRS_ALIGN_ANY when trying to make it dockable.

    Maybe this can help.

    I do not know if it matters using CMDIFrameWndEx instead of CMDIFrameWnd. I would try it out with two projects from the scracth one using CMDIFrameWnd and the other one using CMDIFrameWndEx.

    With regards
    Programartist

  3. #3
    Join Date
    Aug 2010
    Posts
    47

    Re: Using a CDialogBar with an MDI app

    Quote Originally Posted by ProgramArtist View Post
    No you didn't. I'm not sure whether this is the reason for not showing the dialog bar but you specified CBRS_LEFT when creating the dialog bar and CBRS_ALIGN_ANY when trying to make it dockable.
    Changing the CBRS_s to match didn't make a difference. However...

    Quote Originally Posted by ProgramArtist View Post
    I do not know if it matters using CMDIFrameWndEx instead of CMDIFrameWnd. I would try it out with two projects from the scracth one using CMDIFrameWnd and the other one using CMDIFrameWndEx.
    This was a helpful hint! I went back through the app wizard and created an app based on CMDIFrameWnd, and the dialogbar now displays with just the create() statement. The EnableDocking and DockControlBar aren't needed, at least with CMDIFrameWnd.

    So I'm not really sure how to get it working with CMDIFrameWndEx, but I think what I'll do is just go back and rework my app to have no docking windows. Then I can use CMDIFrameWnd.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  


Azure Activities Information Page

Windows Mobile Development Center


Click Here to Expand Forum to Full Width

This is a CodeGuru survey question.


Featured


HTML5 Development Center