From: Nick Schultz on
Fixed the problem, I placed the button handlers within my class that extends
the toolbar, it should have been in the class that uses it (in my case a
class that extends CDockablePane)

Thanks,

Nick
"Nick Schultz" <nick.schultz(a)flir.com> wrote in message
news:eYId4uItIHA.1240(a)TK2MSFTNGP02.phx.gbl...
> Hi there,
>
> I am trying to capture the message that is sent when one of my toolbar
> buttons are pressed.
> I extended the CMFCToolBar class to :
>
> class CGraphToolBar : public CMFCToolBar
>
> I have message map set accordingly:
>
> BEGIN_MESSAGE_MAP(CGraphToolBar, CMFCToolBar)
> ON_WM_CREATE()
> ON_WM_DESTROY()
> ON_COMMAND(IDD_TOOLBAR_NEW, OnNewElementBtn)
> END_MESSAGE_MAP()
>
> in the constructor, i create all my buttons (using one as an example):
>
> m_saveBtn = new CMFCToolBarButton(IDD_TOOLBAR_SAVE,3);
>
> I add the button in the OnCreate function:
>
> InsertButton(*m_saveBtn);
>
> And i have a simple handler function:
>
> void CGraphToolBar::OnNewElementBtn(){
> TRACE0("CLICKED\n");
> }
>
>
> When I run the program and click the button (the button is greyed out by
> the way), I get this message instead:
>
> Warning: no message line prompt for ID 0x0032.
>
>
> I'm not sure what I am doing wrong, where should I be capturing this
> message?
>
> Thanks,
>
> Nick
>


From: Joseph M. Newcomer on
You have created a handler. Unfortunately, you have created a handler that no one,
including the MFC framework, will ever call. This is because the MFC framework routes
command messages via its internal routing algorithms, which do not take CToolBar windows
into account, anywhere. I already answered the question: you put the handler in a member
of the MFC routing hierarchy, such as a view or document (as the simplest answer)
joe

On Tue, 13 May 2008 10:23:05 -0700, "Nick Schultz" <nick.schultz(a)flir.com> wrote:

>
>"Joseph M. Newcomer" <newcomer(a)flounder.com> wrote in message
>news:50sh24tt83obvhiscf3jkog0vctst44qp8(a)4ax.com...
>> See below...
>> On Mon, 12 May 2008 16:55:54 -0700, "Nick Schultz" <nick.schultz(a)flir.com>
>> wrote:
>>
>>>Hi there,
>>>
>>>I am trying to capture the message that is sent when one of my toolbar
>>>buttons are pressed.
>>>I extended the CMFCToolBar class to :
>>>
>>> class CGraphToolBar : public CMFCToolBar
>>>
>>>I have message map set accordingly:
>>>
>>> BEGIN_MESSAGE_MAP(CGraphToolBar, CMFCToolBar)
>>> ON_WM_CREATE()
>>> ON_WM_DESTROY()
>>> ON_COMMAND(IDD_TOOLBAR_NEW, OnNewElementBtn)
>>> END_MESSAGE_MAP()
>>>
>>>in the constructor, i create all my buttons (using one as an example):
>>>
>>> m_saveBtn = new CMFCToolBarButton(IDD_TOOLBAR_SAVE,3);
>>>
>>>I add the button in the OnCreate function:
>>>
>>> InsertButton(*m_saveBtn);
>>>
>>>And i have a simple handler function:
>>>
>>> void CGraphToolBar::OnNewElementBtn(){
>>> TRACE0("CLICKED\n");
>>> }
>>>
>>>
>>>When I run the program and click the button (the button is greyed out by
>>>the
>>>way), I get this message instead:
>>>
>>> Warning: no message line prompt for ID 0x0032.
>> ****
>> Actually, you are creating a correlation where none exists; the two
>> phenomena are
>> completely unrelated.
>>
>> The failure to enable would be typically be caused by your message map in
>> your message
>> routing hiearchy (and your toolbar is not part of that hiearchy) not
>> having an entry for
>> the button, so by default it is disabled if there is no handler.
>>
>> The warning is caused by exactly what it says: there is no string IDS_xxxx
>> of numeric
>> value 32(the control value you have assigned the button). But this has
>> nothing to do with
>> the failure to enable.
>> ****
>>>
>>>
>>>I'm not sure what I am doing wrong, where should I be capturing this
>>>message?
>> ****
>> In the message routing hierarchy. such as in your document, view,
>> mainframe, app, child
>> MDI frame, document template, etc. you need a handler. Since the toobar
>> is not part of
>> the MFC message routing scheme, a handler in it is not seen and the button
>> is disabled.
>> joe
>> ****
>>>
>>>Thanks,
>>>
>>>Nick
>>>
>> Joseph M. Newcomer [MVP]
>> email: newcomer(a)flounder.com
>> Web: http://www.flounder.com
>> MVP Tips: http://www.flounder.com/mvp_tips.htm
>
>
>I thought giving the button an ID and declaring the ID in the message map
>creates the handler for the event? How do I create the handler so that my
>function will be called?
>
>Thanks,
>
>
>Nick
>
Joseph M. Newcomer [MVP]
email: newcomer(a)flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm