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

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


Adding / removing buttons from a toolbar

Amir Shoval -- amirs@ncc.co.il
Thursday, February 20, 1997

Environment: VC4.2b, Win95

Hello,

In my application, I create a dynamic toolbar (based on data stored in
the registry).
The initial display of the toolbar is 100% OK.

I also have a dialog for adding / removing buttons from that toolbar
(I'm not using the
Customize() method).

After adding or removing buttons, the toolbar is changed correctly - it
DOES contain
all the buttons its supposed to. But it's frame's size does not change
(I can't see the new
buttons, for example). Only after I click once inside the toolbar's
frame, it's size is
adjusted to the correct size. This behavior is the same when the toolbar
is floating or
docking.

Here is the sequence of actions done when adding/removing buttons from
the toolbar
(this is kind of pseudocode):

	//---------------------------------------------------------------------
----
	// Delete buttons from toolbar. 
	//---------------------------------------------------------------------
----
	nButtons = GetToolBarCtrl().GetButtonCount();
	for (nIndex = 0; nIndex < nButtons; nIndex++)
		GetToolBarCtrl().DeleteButton(nIndex);
	GetToolBarCtrl().AutoSize();

	//---------------------------------------------------------------------
----
	// Delete old buttons' bitmaps. 
	//---------------------------------------------------------------------
----
	DeleteToolBitmaps();

	//---------------------------------------------------------------------
----
	// Insert buttons into toolbar (m_pTools is a pointer to an array)
	//---------------------------------------------------------------------
----
	nButtons = m_pTools->GetSize();
	SetButtons(NULL, nButtons);
	for (nIndex = 0; nIndex < nButtons; nIndex++)
	{
		pTool = (*m_pTools)[nIndex];
		hToolIcon = pTool->GetIcon();

		//--------------------------------------------------------------------
-----
		// Create a bitmap from the icon
		//--------------------------------------------------------------------
-----
	   	CBitmap *pToolBitmap = new CBitmap();
		<...>
		
		//--------------------------------------------------------------------
-----
		// Init the button: Image, style & text.
		//--------------------------------------------------------------------
-----
		nImageNum = GetToolBarCtrl().AddBitmap(1, pToolBitmap);
		ASSERT(nImageNum != -1);
		SetButtonInfo(nIndex, ID_TOOLS_TOOL + nIndex, 
				GetButtonStyle(nIndex) | TBBS_BUTTON, nImageNum);
		_splitpath(pTool->GetPath(), szDrive, szDir, szFName, szExt);
		SetButtonText(nIndex, szFName);
	}

	GetToolBarCtrl().AutoSize();

Am I doing something wrong or do I have to do anything more (besides
AutoSize) so
the toolbar will be displayed correctly?

10x,
	Amir

--------------------------------------------------
Amir Shoval          N.C.C. ISRAEL
                amirs@ncc.co.il
--------------------------------------------------



Mario Contestabile -- Mario_Contestabile.UOS__MTL@UOSMTL2.universal.com
Thursday, February 20, 1997

>After adding or removing buttons, the toolbar is changed correctly - it
>DOES contain
>all the buttons its supposed to. But it's frame's size does not change
>(I can't see the new
>buttons, for example).

Do a GetParentFrame()->RecalcLayout(); afterwards.

mcontest@universal.com





Become an MFC-L member | Вернуться в корень Архива |