Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > Произвольное срабатывания CommandStateChange


Автор: Vicul 8.8.2011, 11:52
Мне в IE нужно перехавтывать конпки Back/Forward.

Объявляю метод:

Код


BEGIN_SINK_MAP(CAddonHandler)
...
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_COMMANDSTATECHANGE, CommandStateChange)
.....
END_SINK_MAP()


void STDMETHODCALLTYPE CommandStateChange( long Command, VARIANT_BOOL Enable);



Описываю его так
Код

void STDMETHODCALLTYPE CAddonHandler::CommandStateChange( long Command, VARIANT_BOOL Enable)
{
if ((Command == CSC_NAVIGATEFORWARD) || (Command == CSC_NAVIGATEBACK))
m_numberTransition = 5;
}

Эта гадюка срабатывает на все операции в ИЕ и не только на нажатие этих кнопок. Причем выдается два вызова,
первый приходит с CSC_NAVIGATEBACK, второй с CSC_NAVIGATEFORWARD.

Что за хрень, где хомутнул?

Автор: nnemo 20.8.2011, 00:24
Это событие не отражает то, были ли нажаты кнопки Forward/Back. Оно сигнализирует, что обновилось состояние кнопок/menu items UI либо с Enabled на Disabled, либо - наоборот.
Например: если Вы открыли вкладку браузера (about:blank), то начальное состояние кнопок GoForward/GoBack - disabled.
Потом Вы делаете первую навигацию, и получаете, как минимум Command == CSC_NAVIGATEBACK, поскольку теперь кнопка/menu item GoBack cтала доступной.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)