Вобщем делаю обработчик бэкспейса, чтобы он работал как бекспейс в окне Edit Combobox.
На компьютере, где собирается длл тулбара, где собственно стоит визуал студия, все работает ок, т.е. при бекспейсе символы удаляются (удаляю я кстати в ручную :( )
Но при установке тулбара на другой комп, бекспейс не работает как нужно, т.е. не удаляет символы в окне edit :(
В чем трабл может быть?
Просто я пробовал обычным методом, прочитав пару тем про проблемы бекспейса в тулбаре, но никак не получается перехватывать фокусы и собственно обрабатывать нажатие клавиш :(, поэтому и с табом так же проблему не решил, т.е. при нажатии на таб нужно менять фокус с текущего окна тулбара на следующее, но в любом случае фокус падает на адресную строку IE.
Вот вырезки из кода:
кривовато и кустарно конечно, но подругом не смог :(
там где lParam==917505, я не знаю что это такое, скорее всего состояние клавиши, т.е. на нажатие, если его убрать удаляться будет не по одному, а по нескольку символов
Здравствуйте, xromax, Вы писали:
X>Вобщем делаю обработчик бэкспейса, чтобы он работал как бекспейс в окне Edit Combobox.
Речь об тулбаре для IE? Не надо никаких хуков и прочей самодеятельности, надо просто заимплементить IInputObject (UIActivateIO, HasFocusIO, TranslateAcceleratorIO) и сообщать эксплореру об изменении фокуса через m_pSite->OnFocusChangeIS().
Здравствуйте, algol, Вы писали:
A>Здравствуйте, xromax, Вы писали:
X>>Вобщем делаю обработчик бэкспейса, чтобы он работал как бекспейс в окне Edit Combobox.
A>Речь об тулбаре для IE? Не надо никаких хуков и прочей самодеятельности, надо просто заимплементить IInputObject (UIActivateIO, HasFocusIO, TranslateAcceleratorIO) и сообщать эксплореру об изменении фокуса через m_pSite->OnFocusChangeIS().
дак не работает никак :(
например тот же фокус
case WM_SETFOCUS:
return OnSetFocus();
не заходит сюда и во все перечисленные функции при смене/установке фокуса, например.
у меня m_pSite это объект CComPtr<IWebBrowser2>, из-за этого наверное?
Здравствуйте, algol, Вы писали:
A>Здравствуйте, xromax, Вы писали:
X>>Вобщем делаю обработчик бэкспейса, чтобы он работал как бекспейс в окне Edit Combobox.
A>Речь об тулбаре для IE? Не надо никаких хуков и прочей самодеятельности, надо просто заимплементить IInputObject (UIActivateIO, HasFocusIO, TranslateAcceleratorIO) и сообщать эксплореру об изменении фокуса через m_pSite->OnFocusChangeIS().
а почему хуки могут не работать на другом компьютере?
Здравствуйте, xromax, Вы писали:
X>например тот же фокус X>case WM_SETFOCUS: X> return OnSetFocus(); X>не заходит сюда и во все перечисленные функции при смене/установке фокуса, например.
У кого и как вы ловите WM_SETFOCUS?
X>у меня m_pSite это объект CComPtr<IWebBrowser2>, из-за этого наверное?
Здравствуйте, algol, Вы писали:
A>У кого и как вы ловите WM_SETFOCUS?
в WndProc
A>m_pSite это CComPtr<IInputObjectSite>.
у меня нет такого объекта, у меня есть CComPtr<IWebBrowser2>, с ним я и работаю, я пробовал с CComPtr<IInputObjectSite>, он не подходит, не помню уже из-за чего
Здравствуйте, xromax, Вы писали:
A>>У кого и как вы ловите WM_SETFOCUS? X>в WndProc
А конкретней — у тулбара, комбобокса, edit комбобокса, кого-то еще?
A>>m_pSite это CComPtr<IInputObjectSite>. X>у меня нет такого объекта, у меня есть CComPtr<IWebBrowser2>, с ним я и работаю, я пробовал с CComPtr<IInputObjectSite>, он не подходит, не помню уже из-за чего
У вас тулбар отнаследован от IObjectWithSiteImpl, а у него есть m_spUnkSite, который инициализируется в SetSite(). Можете либо переопределить SetSite,
if (pUnkSite)
{
if (FAILED(pUnkSite->QueryInterface(IID_IInputObjectSite, (void**)&m_pSite))) return E_FAIL;
}
return IObjectWithSiteImpl<CToolBand>::SetSite(pUnkSite);
Здравствуйте, algol, Вы писали:
A>А конкретней — у тулбара, комбобокса, edit комбобокса, кого-то еще?
у меня единственная главная функция WndProc (точнее не совсем главная), которую я задаю при регистрации окна тулбара в BOOL RegisterAndCreateWindow(), которую в свою очередь вызываю в SetSite:
A>У вас тулбар отнаследован от IObjectWithSiteImpl, а у него есть m_spUnkSite, который инициализируется в SetSite(). Можете либо переопределить SetSite, A>
A> if (pUnkSite)
A> {
A> if (FAILED(pUnkSite->QueryInterface(IID_IInputObjectSite, (void**)&m_pSite))) return E_FAIL;
A> }
A> return IObjectWithSiteImpl<CToolBand>::SetSite(pUnkSite);
A>
A>либо получить IInputObjectSite из m_spUnkSite.
вот у меня идет так:
hr = pUnkSite->QueryInterface(IID_IWebBrowser2, (void **)&m_spWebBrowser);
if (SUCCEEDED(hr))
{
// Register to sink events from DWebBrowserEvents2.
hr = DispEventAdvise(m_spWebBrowser);
}
}
return IObjectWithSiteImpl<CCallBoomBHO>::SetSite(pUnkSite);