Click here to Skip to main content
15,889,877 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I'm not certain what this method is used for and in what circumstances.

MSDN : "Determines whether the most recently executed command was sent from the specified toolbar button."

The only reference I have is from the VisualStudio MSDN sample :

The method is called when the user select a value in a combobox in a toolbar.
C++
  ON_COMMAND(ID_DUMMY_SELECT_ACTIVE_CONFIGURATION, OnDummySelectActiveConfiguration)
  ON_CBN_SELENDOK(ID_DUMMY_SELECT_ACTIVE_CONFIGURATION, OnDummySelectActiveConfiguration)

//...
void CVisualStudioDemoDoc::OnDummySelectActiveConfiguration()
{
  CMFCToolBarComboBoxButton* pSrcCombo = NULL;

  CObList listButtons;
  if (CMFCToolBar::GetCommandButtons(ID_DUMMY_SELECT_ACTIVE_CONFIGURATION, listButtons) > 0)
  {
    for (POSITION posCombo = listButtons.GetHeadPosition(); pSrcCombo == NULL && posCombo != NULL;)
    {
      CMFCToolBarComboBoxButton* pCombo = DYNAMIC_DOWNCAST(CMFCToolBarComboBoxButton, listButtons.GetNext(posCombo));

      if (pCombo != NULL && CMFCToolBar::IsLastCommandFromButton(pCombo))
      {
        pSrcCombo = pCombo;
      }
    }
  }

  if (pSrcCombo != NULL)
  {
    ASSERT_VALID(pSrcCombo);
    LPCTSTR lpszSelItem = pSrcCombo->GetItem();
    CString strSelItem = (lpszSelItem == NULL) ? _T("") : lpszSelItem;

    AfxMessageBox(strSelItem);
  } 
  else
  {
    AfxMessageBox(_T("Show \"Set Active Configuration\" dialog...."));
  }
}


Any clue/hints ?

Thanks.

Max.
Posted
Comments
CPallini 7-Dec-12 16:55pm    
"Determines whether the most recently executed command was sent from the specified toolbar button." looks clear enough to me. What is your doubt?
Maximilien 7-Dec-12 18:09pm    
I can read the description, but I was looking for a test case to demonstrate why it should be used.

1 solution

The function calls CWnd::GetCurrentMessage()[^]

to retrieve a MSG structure that describes the "current message" (which is only valid "when in an OnMessage handler").

It then compares the hwnd of the button against the hwnd and lParam of the current message to see if the current message orignated from the button.


I can think of a couple of different scenarios where one might use this:

a) You have the same message handler invoked for several different buttons. In which case you might enumerate the buttons and test them to find out the specific one that was invoked.

If you dynamically create new buttons and add them to the toolbar then you can't have a separate handler for all possible buttons, instead you'd have a single handler that did different things based on data associated with the button itself.

b) The same message might be coming from the toolbar, or a menu item or a keyboard shortcut. You want to do the same thing no matter where it came from, but maybe there is some visual cue you want to play depending on if it was the button that was pressed or not.
 
Share this answer
 
Comments
Maximilien 7-Dec-12 18:10pm    
Thanks, I will look at those scenarios next week, I think I understand better (scenario A).

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900