[ sspasic @ 17.10.2003. 22:24 ] @
Ovo me muci vec par dana i pocinjem da ocajavam... Imam ATL ActiveX kontrolu, (CComCompositeControl) koja u nekom trenutku prikaze dijalog (CAxDialog) na kome se nalazi druga ActiveX kontrola (hostovana pomocu CAxWindow), a ona je takodje kompozitna - ima par tastera i par input polja. Problem je sto na dijalogu ne radi TAB taster za setanje izmedju windows kontrola na hostovanoj ActiveX kontroli. Nasao sam par resenja, ali sva zahtevaju izmenu u osnovnoj petlji aplikacije (GetMessage, ProcessMessage, repeat) tako sto se doda kod koji TranslateAccelerator funkcijom radi magiju. E ovde je problem sto toga nema, jer osnovni kontejner aplikacije je Internet Explorer, tako da nemam pristupa toj petlji (bar mislim). Nasao sam i par polovicnih resenja na Microsoftovoj ATL listi ali sva su za poneki specijalan slucaj i po pravilu za varijante kada se moze izmeniti ona petlja za poruke, tj. kada je osnovni kontejner aplikacija ciji source mozemo da menjamo. Nasao sam i Microsoftov primer koji sa CAxWindow::SetExternalUIHandler podmetne objekat koji implementira IDocHostUIHandlerDispatch i sam primer radi, ali kada je CAxWindow na CAxDialog, funkcije IDocHostUIHandlerDispatch jednostavno ne bivaju pozvane... Zna li neko resenje? Moze li se nekako u ATL kontrolu ukomponovati WTL::CMessageFilter pa da se u PreTranslateMessage handluje TAB taster? To bi resilo problem, ali ne znam gde da 'uglavim' filter. |