15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Inserting & Deleting with CToolBar

Anthony Whitford -- whitford%mspo3@mprgate.mpr.ca
Wednesday, March 27, 1996


Environment:  NT 4.0 beta, MSVC++ 4.1

I have an application with a toolbar (CToolBar).  When a feature is   
activated, some buttons are added to the toolbar.  When the feature ends,   
the previously added buttons are removed.  I use CToolBar::GetToolBarCtrl   
to get the CToolBarCtrl instance, then call InsertButton and   
DeleteButton.

The buttons are added and removed fine.  My problem is that the toolbar   
is not being properly painted after deleting the buttons--you must touch   
the toolbar with the mouse or move the window around to get a proper   
repaint.  Also, the toolbar had the focus when I start deleting the   
buttons--this might be important.

You may be thinking, "Just call Invalidate or UpdateWindow."   
 Unfortunately, I have tried both and neither works.  In fact, the code   
is similar to the following:

    ...
    DeleteButton stuff
    ...
    GetFrameWnd()->GetToolBar().GetToolBarCtrl().AutoSize();
    GetFrameWnd()->RecalcLayout(FALSE);
    GetFrameWnd()->GetToolBar().Invalidate();
    ...

The invalidate seems to have no effect.  I question if the AutoSize call   
is really doing anything too.  I know the RecalcLayout is important   
because otherwise the toolbar size does not get updated.

What am I missing?  Or is this a problem with the common control?

Thanks,

Anthony
(whitford@mpr.ca)



Jeremy Smith -- jeremy_smith@ccmail-gw.mentec.ie
Monday, April 01, 1996

     I have had problems with the CToolBar.  You don't say exactly how it 
     doesn't get repainted.  I ended up doing several things:
     
     Calling AfxGetApp()->OnIdle(-1) is a good idea to make sure the 
     buttons are immediately updated.
     
     Invalidate() the parent window(s) of the CToolBar (especially on 
     dockable bars which are floating) being careful not to end up 
     re-painting the Frame.
     
     The window hierarchy of a CToolBar see,s remarkably complex to me
     
     Jeremy
     
     (jeremy.Smith@mentec.ie)


______________________________ Reply Separator _________________________________
Subject: Inserting & Deleting with CToolBar
Author:  mfc-l@netcom.com at internet-mail
Date:    31/03/96 01:40


     
Environment:  NT 4.0 beta, MSVC++ 4.1
     
I have an application with a toolbar (CToolBar).  When a feature is   
activated, some buttons are added to the toolbar.  When the feature ends,   
the previously added buttons are removed.  I use CToolBar::GetToolBarCtrl   
to get the CToolBarCtrl instance, then call InsertButton and   
DeleteButton.
     
The buttons are added and removed fine.  My problem is that the toolbar   
is not being properly painted after deleting the buttons--you must touch   
the toolbar with the mouse or move the window around to get a proper   
repaint.  Also, the toolbar had the focus when I start deleting the   
buttons--this might be important.
     
You may be thinking, "Just call Invalidate or UpdateWindow."   
 Unfortunately, I have tried both and neither works.  In fact, the code   
is similar to the following:
     
    ...
    DeleteButton stuff
    ...
    GetFrameWnd()->GetToolBar().GetToolBarCtrl().AutoSize(); 
    GetFrameWnd()->RecalcLayout(FALSE);
    GetFrameWnd()->GetToolBar().Invalidate(); 
    ...
     
The invalidate seems to have no effect.  I question if the AutoSize call   
is really doing anything too.  I know the RecalcLayout is important   
because otherwise the toolbar size does not get updated.
     
What am I missing?  Or is this a problem with the common control?
     
Thanks,
     
Anthony
(whitford@mpr.ca)





| Вернуться в корень Архива |