Toolbar Button Status
Alun -- alun@des.co.uk Friday, October 11, 1996 Environment: VC++ 1.52, Win 3.1x Hi All I have a test application which has a toolbar to 'simplify' its use, if I disable a menu item as a result of some action the user takes, this doesn't seem to affect the toolbar buttons in any way. Can anyone tell me how I can change the status of the toolbar buttons. Thanks in advance The Loon
Michael Patterson -- patterso@sprynet.com Saturday, October 12, 1996 [Mini-digest: 2 responses] Hi, Forgive me if I haven't given enough. I think this should work. You can change the non-MFC stuff to MFC (if you wish). Take care, Mike ON_UPDATE_COMMAND_UI(IDM_MENUITEM, OnUpdateButton1) // put in message map afx_msg void OnUpdateButton1(CCmdUI* pCmdUI) // mainfrm.h file { UpdateToolbarBtn(IDM_MENUITEM, pCmdUI); } // if I am not mistaken, you will have to implement // the above for each button - there could be a better way??? void UpdateToolbarBtn(UINT nID, CCmdUI *pCmdUI); // mainfrm.h file void CMainFrame::UpdateToolbarBtn(UINT nID, CCmdUI *pCmdUI) // mainfrm.cpp file { UINT nFlags; HMENU hMainMenu = ::GetMenu(m_hWnd); /// nFlags = ::GetMenuState(hMainMenu, nID, MF_BYCOMMAND); // pCmdUI->Enable(nFlags == MF_ENABLED); // TRUE or FALSE } At 04:39 PM 10/11/96 +0100, you wrote: >Environment: VC++ 1.52, Win 3.1x > >Hi All > >I have a test application which has a toolbar to 'simplify' its use, if I >disable a menu item as a result of some action the user takes, this doesn't >seem to affect the toolbar buttons in any way. > >Can anyone tell me how I can change the status of the toolbar buttons. > >Thanks in advance >The Loon > ******************** Michael Patterson patterso@sprynet.com ******************** Phoenix, Arizona, USA -----From: ppbillc@srv2.sj.ablecom.net Each toolbar button should be asociated with a menu item via a Command ID. So if you "disable" a menu item the toolbar item should also be diabled. What I suspect is wrong is that you directly disabled the menu item and didnt use the **OnUpdateCmdUI** function that should be associated with each menu item. Follow these steps : Go to your resources and select the menu Hold down CTRL and double click the menu item you wish to work with This will bring you to class wizard You will see two functions COMMAND UPDATE_COMMAND_UI Double click these to create 2 functions in your source code that will handle this menu item. Hope this helps Bill / \ * * \ _,-._/
Mike Morel -- mmorel@mushroomsoft.com Sunday, October 13, 1996 >ON_UPDATE_COMMAND_UI(IDM_MENUITEM, OnUpdateButton1) // put in message = map > >afx_msg void OnUpdateButton1(CCmdUI* pCmdUI) // mainfrm.h file >{ > UpdateToolbarBtn(IDM_MENUITEM, pCmdUI); >} > >// if I am not mistaken, you will have to implement >// the above for each button - there could be a better way??? > >void UpdateToolbarBtn(UINT nID, CCmdUI *pCmdUI); // mainfrm.h file > >void CMainFrame::UpdateToolbarBtn(UINT nID, CCmdUI *pCmdUI) // = mainfrm.cpp file >{ > UINT nFlags; > HMENU hMainMenu =3D ::GetMenu(m_hWnd); > /// > nFlags =3D ::GetMenuState(hMainMenu, nID, MF_BYCOMMAND); > // > pCmdUI->Enable(nFlags =3D=3D MF_ENABLED); // TRUE or FALSE >} Yes, I think there is a better way. You can use = ON_UPDATE_COMMAND_UI_RANGE instead of ON_UPDATE_COMMAND_UI. I think it = would then look something like this: ON_UPDATE_COMMAND_UI_RANGE( IDM_MENUITEMFIRST, IDM_MENUITEMLAST, = UpdateToolbarBtn ) void UpdateToolbarBtn(UINT nID, CCmdUI *pCmdUI); // mainfrm.h file void CMainFrame::UpdateToolbarBtn(CCmdUI *pCmdUI, UINT nID) // = mainfrm.cpp file { UINT nFlags; HMENU hMainMenu =3D ::GetMenu(m_hWnd); /// nFlags =3D ::GetMenuState(hMainMenu, nID, MF_BYCOMMAND); // pCmdUI->Enable(nFlags =3D=3D MF_ENABLED); // TRUE or FALSE } Mike Morel Mushroom Software Home of MFC For Yourself http://www.mushroomsoft.com/mushroom ---------- From: Michael Patterson[SMTP:patterso@sprynet.com] Sent: Saturday, October 12, 1996 5:22 PM To: mfc-l@netcom.com Subject: Re: Toolbar Button Status [Mini-digest: 2 responses] Hi, Forgive me if I haven't given enough. I think this should work. You can change the non-MFC stuff to MFC (if you wish). Take care, Mike ON_UPDATE_COMMAND_UI(IDM_MENUITEM, OnUpdateButton1) // put in message = map afx_msg void OnUpdateButton1(CCmdUI* pCmdUI) // mainfrm.h file { UpdateToolbarBtn(IDM_MENUITEM, pCmdUI); } // if I am not mistaken, you will have to implement // the above for each button - there could be a better way??? void UpdateToolbarBtn(UINT nID, CCmdUI *pCmdUI); // mainfrm.h file void CMainFrame::UpdateToolbarBtn(UINT nID, CCmdUI *pCmdUI) // = mainfrm.cpp file { UINT nFlags; HMENU hMainMenu =3D ::GetMenu(m_hWnd); /// nFlags =3D ::GetMenuState(hMainMenu, nID, MF_BYCOMMAND); // pCmdUI->Enable(nFlags =3D=3D MF_ENABLED); // TRUE or FALSE } At 04:39 PM 10/11/96 +0100, you wrote: >Environment: VC++ 1.52, Win 3.1x > >Hi All > >I have a test application which has a toolbar to 'simplify' its use, if = I >disable a menu item as a result of some action the user takes, this = doesn't >seem to affect the toolbar buttons in any way. > >Can anyone tell me how I can change the status of the toolbar buttons. > >Thanks in advance >The Loon > ******************** Michael Patterson patterso@sprynet.com ******************** Phoenix, Arizona, USA -----From: ppbillc@srv2.sj.ablecom.net Each toolbar button should be asociated with a menu item via a Command ID. So if you "disable" a menu item the toolbar item should=20 also be diabled. =20 What I suspect is wrong is that you directly disabled the menu item=20 and didnt use the **OnUpdateCmdUI** function that should be associated with each menu item. Follow these steps : Go to your resources and select the menu Hold down CTRL and double click the menu=20 item you wish to work with This will bring you to class wizard You will see two functions COMMAND UPDATE_COMMAND_UI Double click these to create 2 functions in your source code that=20 will handle this menu item. Hope this helps Bill =20 =20 / \ * * \ _,-._/
DFPav@aol.com Monday, October 14, 1996 >>I have a test application which has a toolbar to 'simplify' its use, if I >>disable a menu item as a result of some action the user takes, this doesn't >>seem to affect the toolbar buttons in any way. >>Can anyone tell me how I can change the status of the toolbar buttons. Toolbars: 1. Make sure your button id matches your menu id 2. Handle the enable/disable in an OnUpdateUI handler. Use the Class Wizard to add this. This handler gets called for both the toolbar and menu item.
Alun -- alun@des.co.uk Tuesday, October 15, 1996 ======== Original Message ======== >ON_UPDATE_COMMAND_UI(IDM_MENUITEM, OnUpdateButton1) // put in message map > >afx_msg void OnUpdateButton1(CCmdUI* pCmdUI) // mainfrm.h file >{ > UpdateToolbarBtn(IDM_MENUITEM, pCmdUI); >} > >// if I am not mistaken, you will have to implement >// the above for each button - there could be a better way??? > >void UpdateToolbarBtn(UINT nID, CCmdUI *pCmdUI); // mainfrm.h file > >void CMainFrame::UpdateToolbarBtn(UINT nID, CCmdUI *pCmdUI) // mainfrm.cpp file >{ > UINT nFlags; > HMENU hMainMenu = ::GetMenu(m_hWnd); > /// > nFlags = ::GetMenuState(hMainMenu, nID, MF_BYCOMMAND); > // > pCmdUI->Enable(nFlags == MF_ENABLED); // TRUE or FALSE >} Yes, I think there is a better way. You can use ON_UPDATE_COMMAND_UI_RANGE instead of ON_UPDATE_COMMAND_UI. I think it would then look something like this: ON_UPDATE_COMMAND_UI_RANGE( IDM_MENUITEMFIRST, IDM_MENUITEMLAST, UpdateToolbarBtn ) void UpdateToolbarBtn(UINT nID, CCmdUI *pCmdUI); // mainfrm.h file void CMainFrame::UpdateToolbarBtn(CCmdUI *pCmdUI, UINT nID) // mainfrm.cpp file { UINT nFlags; HMENU hMainMenu = ::GetMenu(m_hWnd); /// nFlags = ::GetMenuState(hMainMenu, nID, MF_BYCOMMAND); // pCmdUI->Enable(nFlags == MF_ENABLED); // TRUE or FALSE } Mike Morel Mushroom Software Home of MFC For Yourself http://www.mushroomsoft.com/mushroom ---------- From: Michael Patterson[SMTP:patterso@sprynet.com] Sent: Saturday, October 12, 1996 5:22 PM To: mfc-l@netcom.com Subject: Re: Toolbar Button Status [Mini-digest: 2 responses] Hi, Forgive me if I haven't given enough. I think this should work. You can change the non-MFC stuff to MFC (if you wish). Take care, Mike ON_UPDATE_COMMAND_UI(IDM_MENUITEM, OnUpdateButton1) // put in message map afx_msg void OnUpdateButton1(CCmdUI* pCmdUI) // mainfrm.h file { UpdateToolbarBtn(IDM_MENUITEM, pCmdUI); } // if I am not mistaken, you will have to implement // the above for each button - there could be a better way??? void UpdateToolbarBtn(UINT nID, CCmdUI *pCmdUI); // mainfrm.h file void CMainFrame::UpdateToolbarBtn(UINT nID, CCmdUI *pCmdUI) // mainfrm.cpp file { UINT nFlags; HMENU hMainMenu = ::GetMenu(m_hWnd); /// nFlags = ::GetMenuState(hMainMenu, nID, MF_BYCOMMAND); // pCmdUI->Enable(nFlags == MF_ENABLED); // TRUE or FALSE } At 04:39 PM 10/11/96 +0100, you wrote: >Environment: VC++ 1.52, Win 3.1x > >Hi All > >I have a test application which has a toolbar to 'simplify' its use, if I >disable a menu item as a result of some action the user takes, this doesn't >seem to affect the toolbar buttons in any way. > >Can anyone tell me how I can change the status of the toolbar buttons. > >Thanks in advance >The Loon > ******************** Michael Patterson patterso@sprynet.com ******************** Phoenix, Arizona, USA -----From: ppbillc@srv2.sj.ablecom.net Each toolbar button should be asociated with a menu item via a Command ID. So if you "disable" a menu item the toolbar item should also be diabled. What I suspect is wrong is that you directly disabled the menu item and didnt use the **OnUpdateCmdUI** function that should be associated with each menu item. Follow these steps : Go to your resources and select the menu Hold down CTRL and double click the menu item you wish to work with This will bring you to class wizard You will see two functions COMMAND UPDATE_COMMAND_UI Double click these to create 2 functions in your source code that will handle this menu item. Hope this helps Bill / \ * * \ _,-._/ ======== Fwd by: Alun ======== Thanks all for your help, I now have toolbar buttons which enable and disable with their menu items. One thing I would suggest is that when submitting suggestions. help, etc. is that you check your suggestion is viable for the environment being used. If I didn't have MSDN available it would have taken a while to discover why ON_UPDATE_COMMAND_UI_RANGE is not available in VC++ 1.52, its a 32 bit MFC macro not 16 bit, if I ever convert from 16 to 32 bit the information will prove useful but when using 16 bit it proved an inconvenience. I have it implemented with a UI handler for each menu item that has an associated button that needs state changing. A similar line is used in each handler: void CMainWnd::OnUpdateTestsetup(CCmdUI* pCmdUI) { pCmdUI->Enable(GetMenu()->GetMenuState(IDC_TESTSETUP,MF_BYCOMMAND) == MF_ENABLED); } Once again thanks to you all.
| Вернуться в корень Архива |