Poskytování Windowless aktivace
Okno kód pro vytvoření (vše je, co se stane při volání funkce CreateWindow) je provést nákladné.Ovládací prvek, který udržuje na obrazovce má okno Spravovat zprávy okna.Bez oken ovládací prvky jsou proto rychlejší než ovládací prvky systému windows.
Další výhodou windowless ovládacích prvků je, že na rozdíl od zobrazení v okně Ovládací prvky bez oken ovládací prvky podporují průhledné Malování a obrazovky neobdélníkové oblasti.Je běžným příkladem průhledný ovládací prvek text s průhledným pozadím.Ovládací prvky maluje text, ale nikoli na pozadí, tak ať je pod textem vidět.Novější formuláře často provést pomocí neobdélníkové ovládacích prvků, například šipky a kulaté tlačítka.
Často ovládací prvek není nutné okno Vlastní a místo toho můžete použít okno služby jeho kontejneru, za předpokladu, že byla zapsána kontejner pro podporu windowless objekty.Bez oken ovládací prvky jsou zpětně kompatibilní se starší kontejnery.V starší kontejnery nebyly zapsány na podporu windowless ovládací prvky ovládací prvky bez okna vytvořit okno při aktivní.
Protože windowless prvky nemají vlastní systém windows, je odpovědný za poskytování služeb, které by jinak byly poskytnuty v okně ovládacího prvku kontejneru (které mají okna).Například pokud dotaz fokusu klávesnice, myši zachycení nebo získat kontext zařízení potřebuje ovládacího prvku, tyto operace jsou spravovány kontejneru.Kontejner směruje uživatele vstupní zprávy odeslané do okna pro příslušný ovládací prvek bez oken, použití IOleInPlaceObjectWindowless rozhraní.(Viz ActiveX SDK popis rozhraní.) COleControl vyvolání funkce členů těchto služeb z kontejneru.
Chcete-li ovládací prvek bez oken aktivaci, patří windowlessActivate příznak v sadě vrácené příznaky COleControl::GetControlFlags.Příklad:
DWORD CMyAxOptCtrl::GetControlFlags()
{
DWORD dwFlags = COleControl::GetControlFlags();
...
// The control can activate without creating a window.
dwFlags |= windowlessActivate;
...
return dwFlags;
}
Pokud vyberete automaticky generování kódu zahrnout tento příznak Windowless aktivace na možnost Nastavení řízení stránky průvodce ovládací prvek MFC ActiveX.
Po povolení aktivace windowless kontejneru bude delegovat na ovládací prvek vstupní zprávy IOleInPlaceObjectWindowless rozhraní.COleControlna provádění tohoto rozhraní odešle zprávy prostřednictvím ovládacího prvku zprávy mapy, po nastavení myši vhodně souřadnic.Přidáním odpovídající položky do zprávy mapa dokáže zpracovat zprávy jako běžná okna zprávy.Vaše obslužné rutiny pro tyto zprávy, vyhněte se použití m_hWnd členské proměnné (nebo jakékoli členské funkce, která jej používá) bez první kontroly, že jeho hodnota je NULL.
COleControlposkytuje funkce člena, které vyvolat zachycení myši, fokusu klávesnice, rolování a jiné okno služby z kontejneru, případně včetně:
Windowless ovládacích prvků je třeba použít COleControl funkce členů namísto odpovídající CWnd funkce členů nebo jejich souvisejících funkcí rozhraní API systému Win32.
Můžete být cíl operace a přetažení OLE prvek bez oken.Obvykle bude vyžadovat zaregistrovat okno ovládacího prvku jako cíl přetažení.Protože ovládací prvek nemá žádné okno Vlastní, používá kontejner vlastním okně jako cíl přetažení.Ovládací prvek obsahuje implementaci IDropTarget rozhraní, které delegování kontejneru v přiměřené době volání.Chcete-li vystavit rozhraní do kontejneru přepíší COleControl::GetWindowlessDropTarget.Příklad:
IDropTarget* CMyAxOptCtrl::GetWindowlessDropTarget()
{
m_DropTarget.m_xDropTarget.AddRef();
return &m_DropTarget.m_xDropTarget;
}