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

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


Runtime dynamic toolbars

Sandeep -- sandeep@cyber-wizard.com
Wednesday, February 19, 1997

Environment: NT 4.0, VC++ 4.0

Hi all,

I'm facing a big problem while developing my current application. What I
need to do is to take options from a dialog box which will have options
of adding,deleting and changing the toolbar.In the dialog box the user
will be asked to enter information such as name of the task,tool tip
text,status bar text and the icon file to be attached to this particular
task.Actually these bitmaps or icons represent some specific tasks.
Corresponding to each task the user will choose a icon  file which is to
be displayed in the toolbar. 
Initially all these files along with their full pathnames  will be in an
INI file. 

What I need to do is dynamically create the toolbars at run time and
cannot create the resource using the resource editor.

any suggestions?

Thanks for any help

Sandeep



Jeremiah Talkar -- jtalkar@optika.com
Wednesday, February 19, 1997

[Mini-digest: 2 responses]


This is easy and I have done a similar thing in my application.

(1) First of all you need to derive a CToolbar based class for your   
dynamic toolbar ( assuming that you want all the docking functionality   
etc. ).

(2) Create another class or define a typedef to hold all the information   
you need for each of the dynamically added buttons.

(3) In your CToolbar derived class, use a Clist<> template or an array or   
anything to hold pointers to the class or structure defined in (2) above.

(4) Define member functions to add, remove buttons ( and their relevant   
information ).

(5) Create a member variable for each dynamic toolbar in your   
application's main Frame window class.

(6) In the CMainFrm::OnCreate(), create each of these toolbars using the   
code AppWizard generates for the standard toolbar but do not make them   
visible if there are no buttons yet ( Use CFrameWnd::ShowControlBar() ).

(7) Whenever the user inputs information a new button, call the Addxxxxx   
function of your CToolbar derived class. Use the following code to   
actually display the button on the toolbar. If you need code to convert   
your icon to a bitmap, e-mail me directly.

 iImageIndex = ToolBarCtrl.AddBitmap( 1, &bmToolBarImage );

 // Ensure that the handle to the bitmap is detached before the CBitmap
 // object goes out of scope.
 bmToolBarImage.Detach();

 if( iImageIndex >= 0 )
 {
  TBButton.iBitmap = iImageIndex;
  TBButton.idCommand = uiEventTypeId;
  TBButton.fsState = TBSTATE_ENABLED;
  TBButton.fsStyle = TBSTYLE_BUTTON | TBSTYLE_CHECK;
  TBButton.dwData  = 0;
  TBButton.iString = NULL;

  fRetCode = ToolBarCtrl.AddButtons( 1, &TBButton );
 }

(8) Use ShowControlBar() to ensure that the toolbar is visible.

(9) For tooltips, override both TTN_NEEDTEXTA and TTN_NEEDTEXTW ( refer   
to CFrameWnd::OnToolTipText in the WinFrm.cpp file in the MFC source   
directory ).

(10) Finally, to get the status bar messages, override   
GetMessageStrings() to provide the apporpriate message.

E-Mail me directly if there are any doubts.

Jeremiah


 -----Original Message-----
From: Sandeep
Sent: Wednesday, February 19, 1997 12:54 PM
To: mfc-l@netcom.com
Subject: Runtime dynamic toolbars


Environment: NT 4.0, VC++ 4.0

Hi all,

I'm facing a big problem while developing my current application. What I
need to do is to take options from a dialog box which will have options
of adding,deleting and changing the toolbar.In the dialog box the user
will be asked to enter information such as name of the task,tool tip
text,status bar text and the icon file to be attached to this particular
task.Actually these bitmaps or icons represent some specific tasks.
Corresponding to each task the user will choose a icon  file which is to
be displayed in the toolbar.
Initially all these files along with their full pathnames  will be in an
INI file.

What I need to do is dynamically create the toolbars at run time and
cannot create the resource using the resource editor.

any suggestions?

Thanks for any help

Sandeep



-----From: Amir Shoval 

Hello,

Why create a resource for your dynamic toolbar. If you keep the data
about the toolbar's
buttons (tasks) in the INI file, you can create the toolbar in the
regular way, NOT load
a toolbar resource, and just add the buttons with all the information
(which you say that
you have). This task can be accomplished using CToolBar's &
CToolBarCtrl's methods.
If u encounter problems, I have a code example.

	Amir

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

>----------
>From: 	Sandeep[SMTP:sandeep@cyber-wizard.com]
>Sent: 	=E9=E5=ED =F8=E1=E9=F2=E9 19 =F4=E1=F8=E5=E0=F8 1997 06:54
>To: 	mfc-l@netcom.com
>Subject: 	Runtime dynamic toolbars
>
>Environment: NT 4.0, VC++ 4.0
>
>Hi all,
>
>I'm facing a big problem while developing my current application. What =
I
>need to do is to take options from a dialog box which will have options
>of adding,deleting and changing the toolbar.In the dialog box the user
>will be asked to enter information such as name of the task,tool tip
>text,status bar text and the icon file to be attached to this =
particular
>task.Actually these bitmaps or icons represent some specific tasks.
>Corresponding to each task the user will choose a icon  file which is =
to
>be displayed in the toolbar.=20
>Initially all these files along with their full pathnames  will be in =
an
>INI file.=20
>
>What I need to do is dynamically create the toolbars at run time and
>cannot create the resource using the resource editor.
>
>any suggestions?
>
>Thanks for any help
>
>Sandeep
>



Ho Pham -- hop@allensysgroup.com
Thursday, February 20, 1997

Sandeep wrote:
> 
> Environment: NT 4.0, VC++ 4.0

I see that this dynamic toolbars subject had come up alot in the past. Having
played with dynamic toolbars recently here is what I did:

  - Create 16x15 bitmaps for all of the toolbar buttons that you will
    need and store them into the resource file.
  - At run time, create an empty toolbar. Then for each button that
    you need do:
      toolbar->AddBitmaps (1, IDB_bitmapxxx);
      Create a TBBUTTON struct, set the button index, command ID, style etc...
      toolbar->AddButtons (1, &TBBUTTON);

===============
Ho Pham
hop@allensysgroup.com
===============
> 
> Hi all,
> 
> I'm facing a big problem while developing my current application. What I
> need to do is to take options from a dialog box which will have options
> of adding,deleting and changing the toolbar.In the dialog box the user
> will be asked to enter information such as name of the task,tool tip
> text,status bar text and the icon file to be attached to this particular
> task.Actually these bitmaps or icons represent some specific tasks.
> Corresponding to each task the user will choose a icon  file which is to
> be displayed in the toolbar.
> Initially all these files along with their full pathnames  will be in an
> INI file.
> 
> What I need to do is dynamically create the toolbars at run time and
> cannot create the resource using the resource editor.
> 
> any suggestions?
> 
> Thanks for any help
> 
> Sandeep



Dave Kolb -- sasdxk@wnt.sas.com
Thursday, February 20, 1997

[Mini-digest: 2 responses]


Also, you might want to investigate Stingray Software's Objective
Toolkit (see http://www.stingsoft.com) that has some prety neat toolbar
support (which is still beta though I believe even though OT itself is
production).

Dave Kolb
SAS Institute

>-----Original Message-----
>From:	hop@allensysgroup.com [SMTP:hop@allensysgroup.com]
>Sent:	Thursday, February 20, 1997 7:46 AM
>To:	mfc-l@netcom.com
>Subject:	Re: Runtime dynamic toolbars
>
>Sandeep wrote:
>> 
>> Environment: NT 4.0, VC++ 4.0
>
>I see that this dynamic toolbars subject had come up alot in the past. Having
>played with dynamic toolbars recently here is what I did:
>
>  - Create 16x15 bitmaps for all of the toolbar buttons that you will
>    need and store them into the resource file.
>  - At run time, create an empty toolbar. Then for each button that
>    you need do:
>      toolbar->AddBitmaps (1, IDB_bitmapxxx);
>      Create a TBBUTTON struct, set the button index, command ID, style
>etc...
>      toolbar->AddButtons (1, &TBBUTTON);
>
>===============
>Ho Pham
>hop@allensysgroup.com
>===============
>> 
>> Hi all,
>> 
>> I'm facing a big problem while developing my current application. What I
>> need to do is to take options from a dialog box which will have options
>> of adding,deleting and changing the toolbar.In the dialog box the user
>> will be asked to enter information such as name of the task,tool tip
>> text,status bar text and the icon file to be attached to this particular
>> task.Actually these bitmaps or icons represent some specific tasks.
>> Corresponding to each task the user will choose a icon  file which is to
>> be displayed in the toolbar.
>> Initially all these files along with their full pathnames  will be in an
>> INI file.
>> 
>> What I need to do is dynamically create the toolbars at run time and
>> cannot create the resource using the resource editor.
>> 
>> any suggestions?
>> 
>> Thanks for any help
>> 
>> Sandeep
-----From: hou@tfn.com (Bing Hou)


To do what you desire, you need to take care of the following things.

1. Dynamically change the number of buttons on the toolbar.
2. Assign IDs for each button.
3. Set bitmap for the toolbar.
4. Handling UI update.
5. Handling commands.

The following code illustrates the things to do:


// The first thing you do is to create a whole bunch of IDs, more than 
// what you could possible use
static NEAR UINT tbIDArray[MAX_NUM] = { FirstID, ..., LastID }; 

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
       ... 
       ON_COMMAND_RANGE(FirstID, LastID, OnToolbarCmd)                      
       ON_UPDATE_COMMAND_UI_RANGE(FirstID, LastID, OnUpdateToolBar)
       ...
END_MESSAGE_MAP()

 
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
        ...
       
      if (!m_wndToolBar.Create(this))
//              || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
        {
                TRACE0("Failed to create toolbar\n");
                return -1;      // fail to create
        }

        // create some initial buttons
        m_wndToolBar.SetButtons(tbIDArray, SomeNumber);

        // set buttons style for each button                
        UINT id, style;
        int image;
        m_wndToolBar.GetButtonInfo(0, id, style, image);
        m_wndToolBar.SetButtonInfo(0, id, style | TBBS_BUTTON, image);
                // this is a button, optional, they're buttons by birth
        m_wndToolBar.SetButtonInfo(1, 0, TBBS_SEPARATOR, 0);
                // this is a separator
        ...     // do for other buttons

        // create a bitmap for the whole toolbar. you may have some work of
        // your own here, 'couse you need to create a bitmap the right size
        // in memeory.
        HBITMAP bitmap;
        ...   // create the bitmap
        m_wndToolBar.SetBitmap(bitmap);
  
        // set button size, optional, depending on your implementation
        CSize buttonSize(32+7, 32+7), imageSize(32, 32);
        m_wndToolBar.SetSizes(buttonSize, imageSize);
        
        ... 

}

// Use this function to change toolbar's appearance dynamically
// 
void CMainFrame::OnChangeToolbar() 
{
        // I used static command IDs here, you could change them if you like
        // SetButtons will delete all buttons previously on the toolbar
        m_wndToolBar.SetButtons(tbIDArray, SomeNumberOtherThanTheOriginal);

        // repeat the steps in the OnCreate function(shown above)
        ...        
}

// Use this function to update command UI for toolbar
//
void CMainFrame::OnUpdateToolBar(CCmdUI* pUI)
{
       // TODO       
}


// Use this function to handle commands generated by the toolbar
//
void CMainFrame::OnToolbarCmd(UINT nID)
{
        // TODO
}





______________________________ Reply Separator _________________________________
Subject: Runtime dynamic toolbars
Author:  Sandeep  at Internet
Date:    2/19/97 12:54 PM


Environment: NT 4.0, VC++ 4.0
     
Hi all,
     
I'm facing a big problem while developing my current application. What I 
need to do is to take options from a dialog box which will have options 
of adding,deleting and changing the toolbar.In the dialog box the user 
will be asked to enter information such as name of the task,tool tip 
text,status bar text and the icon file to be attached to this particular 
task.Actually these bitmaps or icons represent some specific tasks. 
Corresponding to each task the user will choose a icon  file which is to 
be displayed in the toolbar. 
Initially all these files along with their full pathnames  will be in an 
INI file. 
     
What I need to do is dynamically create the toolbars at run time and 
cannot create the resource using the resource editor.
     
any suggestions?
     
Thanks for any help
     
Sandeep




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