Hiding a Docked/Floating CDialogBar
Simon Judge -- SJudge@rce.ricardo.com Friday, January 17, 1997 Environment: VC++ 4.2b, NT 4.0 I have a CDialogBar derived class that I can dock, float and resize. How can I easily hide/re-show the CDialogBar window? I have tried CWnd::ShowWindow(SW_HIDE) but this just hides the contained dialog (created from a resource) rather than the docked or floating window. I have also tried a CWnd::MoveWindow() to a position outside the viewing area, but again this only affects the contained dialog window. I have also tried forcing the parent to RecalcLayout() which causes a CalcDynamicLayout() which I have coded to set the SIZE(0,0) whenever there is a hide in progress. This works but only when the CDialogBar is docked. When the CDialogBar floats, it seems to become disassociated with the parent window and can even be displayed outside the main application frame. Simon Judge Email: SJudge@rce.ricardo.com Ricardo Consulting Engineers, Bridge Works, Shoreham-By-Sea, West Sussex, BN43 5FG, United Kingdom. Tel. +44 (0) 1273 455611 x 2774 Fax. +44 (0) 1273 794565
Marc Temanson -- met@indy.net Saturday, January 18, 1997 [Mini-digest: 6 responses] Why not try the ShowControlBar function within the CFrameWnd class. That is what MFC uses to hide and display CDialogBars inserted from component gallery. You can verify this by looking at the command handler for the inserted component. For example: ON_COMMAND_EX(CG_ID_VIEW_DIALOGBAR, OnBarCheck) The function OnBarCheck is a member of CFrameWnd which merely toggles the current show/hidden status of the control bar based on the selection of the item in the menu. ---------- > From: Simon Judge> To: 'mfc-l@netcom.com' > Subject: Hiding a Docked/Floating CDialogBar > Date: Friday, January 17, 1997 9:00 AM > > Environment: VC++ 4.2b, NT 4.0 > > I have a CDialogBar derived class that I can dock, float and resize. > How can I easily hide/re-show the CDialogBar window? > > I have tried CWnd::ShowWindow(SW_HIDE) but this just hides the contained > dialog (created from a resource) rather than the docked or floating > window. I have also tried a CWnd::MoveWindow() to a position outside the > viewing area, but again this only affects the contained dialog window. > > I have also tried forcing the parent to RecalcLayout() which causes a > CalcDynamicLayout() which I have coded to set the SIZE(0,0) whenever > there is a hide in progress. This works but only when the CDialogBar is > docked. When the CDialogBar floats, it seems to become disassociated > with the parent window and can even be displayed outside the main > application frame. > > Simon Judge Email: SJudge@rce.ricardo.com > Ricardo Consulting Engineers, Bridge Works, Shoreham-By-Sea, > West Sussex, BN43 5FG, United Kingdom. > Tel. +44 (0) 1273 455611 x 2774 Fax. +44 (0) 1273 794565 -----From: Menny Hamburger >---------- >From: Simon Judge[SMTP:SJudge@rce.ricardo.com] >Sent: Friday, January 17, 1997 4:00 PM >To: 'mfc-l@netcom.com' >Subject: Hiding a Docked/Floating CDialogBar > >Environment: VC++ 4.2b, NT 4.0 > >I have a CDialogBar derived class that I can dock, float and resize. >How can I easily hide/re-show the CDialogBar window? > >I have tried CWnd::ShowWindow(SW_HIDE) but this just hides the >contained >dialog (created from a resource) rather than the docked or floating >window. I have also tried a CWnd::MoveWindow() to a position outside >the >viewing area, but again this only affects the contained dialog window. > >I have also tried forcing the parent to RecalcLayout() which causes a >CalcDynamicLayout() which I have coded to set the SIZE(0,0) whenever >there is a hide in progress. This works but only when the CDialogBar is >docked. When the CDialogBar floats, it seems to become disassociated >with the parent window and can even be displayed outside the main >application frame. > >Simon Judge Email: SJudge@rce.ricardo.com >Ricardo Consulting Engineers, Bridge Works, Shoreham-By-Sea, >West Sussex, BN43 5FG, United Kingdom. >Tel. +44 (0) 1273 455611 x 2774 Fax. +44 (0) 1273 794565 Hello Simon, I can see two ways to do this: 1) Use CWnd::ShowControlBar(...). 2) Send the parent frame window of the control bar WM_COMMAND message with the ID of the control bar. if the parent has the following lines in the message map, it should respond in showing/hiding the control bar, and checking/unchecking the menu item that has ID_VIEW_MYCONTROLBAR assigned to it: ON_UPDATE_COMMAND_UI(D_VIEW_MYCONTROLBAR, OnUpdateControlBarMenu) ON_COMMAND_EX(ID_VIEW_MYCONTROLBAR, OnBarCheck) > -----From: Alex Simon Judge wrote: > > Environment: VC++ 4.2b, NT 4.0 > > I have a CDialogBar derived class that I can dock, float and resize. > How can I easily hide/re-show the CDialogBar window? > > I have tried CWnd::ShowWindow(SW_HIDE) but this just hides the contained > dialog (created from a resource) rather than the docked or floating > window. I have also tried a CWnd::MoveWindow() to a position outside the > viewing area, but again this only affects the contained dialog window. > > I have also tried forcing the parent to RecalcLayout() which causes a > CalcDynamicLayout() which I have coded to set the SIZE(0,0) whenever > there is a hide in progress. This works but only when the CDialogBar is > docked. When the CDialogBar floats, it seems to become disassociated > with the parent window and can even be displayed outside the main > application frame. > > Simon Judge Email: SJudge@rce.ricardo.com > Ricardo Consulting Engineers, Bridge Works, Shoreham-By-Sea, > West Sussex, BN43 5FG, United Kingdom. > Tel. +44 (0) 1273 455611 x 2774 Fax. +44 (0) 1273 794565 Hi, Simon! You are right, You have to do some more stuff with floating controlbar. You have to hide/show its mini frame window too. But there is the easy way to do it - just use the MFCs code. Try to use the following functions of CFrameWnd to hide/show the control bars: CYourMainFrame::ShowHideContolBar() { ShowControlBar(&ContraolBar, !ControlBar.IsWindowVisible(), FALSE); RecalcLayout(); } It switches between visible/unvisible state of the ControlBar. Hope it will help. -- ____________________________________________________________ | | | | Alexander Fok | E-mail: alexp@sharnoa.co.il | | Software Engineer | Office: +972-7-6285058 | | | Fax: +972-7-6277859 | | Xtrol (Sharnoa) | Home: +972-7-6271886 | | Corporation Israel | WWW : http://www.cs.bgu.ac.il/~alexf | |_____________________|______________________________________| -----From: Jim Lawson Williams At 02:00 PM 17/01/97 -0000, Simon Judge wrote: > >I have a CDialogBar derived class that I can dock, float and resize. >How can I easily hide/re-show the CDialogBar window? > G'day! This might be what you want (where CMainframe owns it in this case): void CMainFrame::OnShowBar() { //"Show" pressed: SetVisibilityForBar(SW_SHOW); } void CMainFrame::SetVisibilityForBar(int SW_XXX) { //Handles the button-press above, plus restoring it CWnd* pWnd = m_pBar->GetParentOwner(); if (pWnd == this) pWnd=m_pBar; pWnd->ShowWindow(SW_XXX); } Regards, Jim LW >From the BBC's "Barchester Chronicles": "I know that ultimately we are not supposed to understand. But I also know that we must try." -- the Reverend Septimus Harding, crypt-analyst, clog-dancer, C++ programmer -----From: Jack Poorte Simon: I believe the ShowControlBar is the function you are after, as in: ShowControlBar( &m_wndDialogBar, m_bDialog, FALSE ); HTH Jack Poorte Austin, Texas Simon Judge wrote: > > Environment: VC++ 4.2b, NT 4.0 > > I have a CDialogBar derived class that I can dock, float and resize. > How can I easily hide/re-show the CDialogBar window? > > I have tried CWnd::ShowWindow(SW_HIDE) but this just hides the contained > dialog (created from a resource) rather than the docked or floating > window. I have also tried a CWnd::MoveWindow() to a position outside the > viewing area, but again this only affects the contained dialog window. > > I have also tried forcing the parent to RecalcLayout() which causes a > CalcDynamicLayout() which I have coded to set the SIZE(0,0) whenever > there is a hide in progress. This works but only when the CDialogBar is > docked. When the CDialogBar floats, it seems to become disassociated > with the parent window and can even be displayed outside the main > application frame. > > Simon Judge Email: SJudge@rce.ricardo.com > Ricardo Consulting Engineers, Bridge Works, Shoreham-By-Sea, > West Sussex, BN43 5FG, United Kingdom. > Tel. +44 (0) 1273 455611 x 2774 Fax. +44 (0) 1273 794565 -----From: Ewen Roberts Simon Judge wrote: > Environment: VC++ 4.2b, NT 4.0 > Have you tried CFrameWnd::ShowControlBar ? Syntax (from the help): void ShowControlBar( CControlBar* pBar, BOOL bShow, BOOL bDelay ); pBar Pointer to the control bar to be shown or hidden. bShow If TRUE, specifies that the control bar is to be shown. If FALSE, specifies that the control bar is to be hidden. bDelay If TRUE, delay showing the control bar. If FALSE, show the control bar immediately. This works for all CControlBar derived classes, docked or floating. Ewen (ewen_r@london.altris.com) "No skeletons in my closet, they're all in the living room drinking martinis" > I have a CDialogBar derived class that I can dock, float and resize. > How can I easily hide/re-show the CDialogBar window? > > I have tried CWnd::ShowWindow(SW_HIDE) but this just hides the contained > dialog (created from a resource) rather than the docked or floating > window. I have also tried a CWnd::MoveWindow() to a position outside the > viewing area, but again this only affects the contained dialog window. > > I have also tried forcing the parent to RecalcLayout() which causes a > CalcDynamicLayout() which I have coded to set the SIZE(0,0) whenever > there is a hide in progress. This works but only when the CDialogBar is > docked. When the CDialogBar floats, it seems to become disassociated > with the parent window and can even be displayed outside the main > application frame. > > Simon Judge Email: SJudge@rce.ricardo.com > Ricardo Consulting Engineers, Bridge Works, Shoreham-By-Sea, > West Sussex, BN43 5FG, United Kingdom. > Tel. +44 (0) 1273 455611 x 2774 Fax. +44 (0) 1273 794565 >
Mark Kurt -- mark@toolsfordesign.com Monday, January 20, 1997 [Mini-digest: 2 responses] Try using CFrameWnd::ShowControlBar(). ---------- > From: Simon Judge> To: 'mfc-l@netcom.com' > Subject: Hiding a Docked/Floating CDialogBar > Date: Friday, January 17, 1997 6:00 AM > > Environment: VC++ 4.2b, NT 4.0 > > I have a CDialogBar derived class that I can dock, float and resize. > How can I easily hide/re-show the CDialogBar window? > > I have tried CWnd::ShowWindow(SW_HIDE) but this just hides the contained > dialog (created from a resource) rather than the docked or floating > window. I have also tried a CWnd::MoveWindow() to a position outside the > viewing area, but again this only affects the contained dialog window. > > I have also tried forcing the parent to RecalcLayout() which causes a > CalcDynamicLayout() which I have coded to set the SIZE(0,0) whenever > there is a hide in progress. This works but only when the CDialogBar is > docked. When the CDialogBar floats, it seems to become disassociated > with the parent window and can even be displayed outside the main > application frame. > > Simon Judge Email: SJudge@rce.ricardo.com > Ricardo Consulting Engineers, Bridge Works, Shoreham-By-Sea, > West Sussex, BN43 5FG, United Kingdom. > Tel. +44 (0) 1273 455611 x 2774 Fax. +44 (0) 1273 794565 -----From: Shaju Mathew Hi Simon, Here's what I did to hide and show a CDialogBar : //my CMainFrame interface: #include "CustomStatusBar.h" #define ID_DLGBAR 9999 class CMainFrame : public CMDIFrameWnd//not from CFrameWnd { DECLARE_DYNAMIC(CMainFrame) public: CMainFrame(void); void CloseAllChildren(void); // Attributes public: // Operations public: // Implementation public: virtual ~CMainFrame(void); //inline CStatusBar GetStatusBar(void) { return(m_wndStatusBar); } #ifdef _DEBUG virtual void AssertValid(void) const; virtual void Dump(CDumpContext& dc) const; #endif protected: // control bar embedded members //CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; public: CStatusBar/*CCustomStatusBar*/ m_wndStatusBar; protected: CDialogBar m_wndDialogBar;//new dialog bar member // Generated message map functions protected: //{{AFX_MSG(CMainFrame) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnCloseall(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //end CMainFrame header Here're the routines that I use to hide this mainframe dialogbar from one of my views: void CMyView::OnWindowHidedialogbar(void) { CDialogBar *theDlgBar = (CDialogBar*) AfxGetMainWnd()->GetDescendantWindow(ID_DLGBAR); theDlgBar->ShowWindow(SW_HIDE); ((CFrameWnd*)AfxGetMainWnd())->RecalcLayout(); CFrameWnd *theFrameWindow = (CFrameWnd*)AfxGetApp()->m_pMainWnd; CMenu *theMenu = theFrameWindow->GetMenu(); ASSERT(theMenu->IsKindOf(RUNTIME_CLASS(CMenu))); theMenu->CheckMenuItem(ID_WINDOW_HIDEDIALOGBAR, MF_BYCOMMAND | MF_CHECKED); theMenu->CheckMenuItem(ID_WINDOW_SHOWDIALOGBAR, MF_BYCOMMAND | MF_UNCHECKED); CMyApp *theApp = (CMyApp*)AfxGetApp(); CMainFrame *theMainFrame = (CMainFrame*)theApp->m_pMainWnd; theMainFrame->m_wndStatusBar.SetPaneText(0, "Hides the dialog bar..."); } void CMyVw::OnWindowShowdialogbar(void) { CDialogBar *theDlgBar = (CDialogBar*) AfxGetMainWnd()->GetDescendantWindow(ID_DLGBAR); theDlgBar->ShowWindow(SW_SHOW); ((CFrameWnd*)AfxGetMainWnd())->RecalcLayout(); CFrameWnd *theFrameWindow = (CFrameWnd*)AfxGetApp()->m_pMainWnd; CMenu *theMenu = theFrameWindow->GetMenu(); ASSERT(theMenu->IsKindOf(RUNTIME_CLASS(CMenu))); theMenu->CheckMenuItem(ID_WINDOW_SHOWDIALOGBAR, MF_BYCOMMAND | MF_CHECKED); theMenu->CheckMenuItem(ID_WINDOW_HIDEDIALOGBAR, MF_BYCOMMAND | MF_UNCHECKED); CMyApp *theApp = (CMyApp*)AfxGetApp(); CMainFrame *theMainFrame = (CMainFrame*)theApp->m_pMainWnd; theMainFrame->m_wndStatusBar.SetPaneText(0, "Displays the dialog bar..."); } This should work - if not, let me know, since it works for me!! > Environment: VC++ 4.2b, NT 4.0 > > I have a CDialogBar derived class that I can dock, float and resize. > How can I easily hide/re-show the CDialogBar window? > > I have tried CWnd::ShowWindow(SW_HIDE) but this just hides the contained > dialog (created from a resource) rather than the docked or floating > window. I have also tried a CWnd::MoveWindow() to a position outside the > viewing area, but again this only affects the contained dialog window. > > I have also tried forcing the parent to RecalcLayout() which causes a > CalcDynamicLayout() which I have coded to set the SIZE(0,0) whenever > there is a hide in progress. This works but only when the CDialogBar is > docked. When the CDialogBar floats, it seems to become disassociated > with the parent window and can even be displayed outside the main > application frame. > > Simon Judge Email: SJudge@rce.ricardo.com > Ricardo Consulting Engineers, Bridge Works, Shoreham-By-Sea, > West Sussex, BN43 5FG, United Kingdom. > Tel. +44 (0) 1273 455611 x 2774 Fax. +44 (0) 1273 794565 > -- *********************************************************************** .---. .---. Shaju Mathew /" " \ WWW / " "\ Off:(916)785-9018 Performance Technology Lab / / "" \(*|*)/ "" \ \ WCSO Group R & D ////// '. V .` \\\\\\ Home:(916)722-4576 Hewlett-Packard Company //// / // : """ : \\ \ \\\\ 8000, Foothills Blvd // / / /`.""" '\ \ \ \\Fax:(916)785-1264 MS 5723, Roseville // //.".\\ \\ CA 95747-5723 -------UU---UU------- '//|||\\` Shaju_Mathew@hp.com ***********************************************************************
| Вернуться в корень Архива |