Sdílet prostřednictvím


Ovládací prvky MFC ActiveX: Subclassing ovládací prvek systému Windows

Tento článek popisuje proces subclassing společné řízení systému Windows vytvořit ovládací prvek ActiveX.Stávající Windows subclassing řízení je rychle vyvinout ovládací prvek ActiveX.Nový ovládací prvek bude mít schopnosti subclassed ovládací prvek systému Windows, například Malování a reagovat na klepnutí myší.Vzorek ovládací prvky MFC ActiveX tlačítko je příkladem subclassing řízení systému Windows.

Na podtřídu řízení systému Windows proveďte následující úkoly:

  • Přepsat funkce členů IsSubclassedControl a PreCreateWindow COleControl

  • Změnit členské funkce OnDraw

  • Zpracování zprávy ovládacího prvku ActiveX (OCM) projeví na ovládací prvek

    [!POZNÁMKA]

    Většinu této práce se děje pomocí průvodce ovládací prvek ActiveX zvolíte-li být rozčlenění pomocí ovládacího prvku Vyberte nadřazenou třídu okna v rozevíracím seznamu Nastavení řízení stránku.

Článek Q243454 znalostní báze Knowledge Base další informace naleznete na subclassing ovládacího prvku.

Přepsání IsSubclassedControl a PreCreateWindow

Potlačit PreCreateWindow a IsSubclassedControl, přidejte následující řádky kódu protected části deklarace třídy ovládacího prvku:

    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    BOOL IsSubclassedControl();

Řízení provádění souboru (.CPP) přidejte následující řádky kódu implementovat dva změněné funkce:

// CMyAxSubCtrl::PreCreateWindow - Modify parameters for CreateWindowEx

BOOL CMyAxSubCtrl::PreCreateWindow(CREATESTRUCT& cs)
{
    cs.lpszClass = _T("BUTTON");
    return COleControl::PreCreateWindow(cs);
}

// CMyAxSubCtrl::IsSubclassedControl - This is a subclassed control

BOOL CMyAxSubCtrl::IsSubclassedControl()
{
    return TRUE;
}

Oznámení, například tlačítko Windows ovládací prvek je určen v PreCreateWindow.Však může být rozčlenění standardní ovládací prvky systému Windows.Další informace o standardní ovládací prvky systému Windows naleznete v prvky.

Při subclassing řízení systému Windows můžete určit styl zejména okna (WS_) nebo rozšířený styl okna (WS_EX_) příznaky, které má být použit při vytváření okna ovládacího prvku.Můžete nastavit hodnoty těchto parametrů v PreCreateWindow změnou členské funkce cs.style a cs.dwExStyle strukturu polí.Změny těchto polí je třeba pomocí OR operace zachovat výchozí příznaky, které jsou nastaveny pomocí třídy COleControl.Například, pokud je ovládací prvek subclassing ovládací TLAČÍTKA a chcete ovládací prvek zobrazí jako zaškrtávací políčko, vložte následující řádek kódu provádění CSampleCtrl::PreCreateWindow, před příkaz return:

cs.style |= BS_CHECKBOX;

Přidá tuto operaci BS_CHECKBOX styl příznak, nechejte výchozí příznak stylu (WS_CHILD) třídy COleControl beze změny.

Změna funkce člena OnDraw

Pokud chcete zachovat stejný vzhled jako odpovídající ovládací prvek systému Windows subclassed ovládacího prvku OnDraw členské funkce pro kontrolu by mělo obsahovat pouze volání DoSuperclassPaint členské funkce jako v následujícím příkladu:

void CMyAxSubCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
    if (!pdc)
        return;

    DoSuperclassPaint(pdc, rcBounds);
}

DoSuperclassPaint Funkci členu provádějí COleControl, nakreslete ovládací prvek v kontextu zařízení uvnitř ohraničovacího rámečku používá okno postup kontroly systému Windows.Díky ovládací prvek viditelný i v případě, že není aktivní.

[!POZNÁMKA]

DoSuperclassPaint Členské funkce bude pracovat pouze s těmito typy řízení, které umožňují kontext zařízení předán jako wParam z WM_PAINT zprávy.Zahrnuje některé standardní ovládací prvky systému Windows, jako například POSUVNÍK a tlačítkoa běžné ovládací prvky.Ovládací prvky, které nepodporují toto chování budete muset zadat vlastní kód neaktivní ovládací prvek zobrazit správně.

Zpracování projeví okna zpráv

Ovládací prvky systému Windows obvykle určité okno zprávy odesílat své nadřazené okno.Některé z těchto zpráv, například WM_COMMAND, poskytne oznámení akce uživatelem.Jiné, jako například WM_CTLCOLOR, se používají k získání informací z nadřazené okno.Ovládací prvek ActiveX obvykle komunikuje s nadřazené okno jinými prostředky.Oznámení předává aktivaci události (odesílání oznámení událostí) a informace o ovládací prvek kontejner byl získán přístup k vlastnostem okolního kontejneru.Protože existují tyto techniky komunikace, kontejnery pro ovládací prvek ActiveX neočekávají zpracovat všechny okna zprávy odeslané pomocí ovládacího prvku.

Kontejner zabránit přijímání okno zprávy subclassed řízení systému Windows COleControl vytvoří zvláštní okno sloužit jako nadřazeného ovládacího prvku.Navíc zde nazývá "odrazka", je vytvořena pouze že podtříd Windows řízení a má stejnou velikost a umístění jako okno Ovládací prvek ActiveX.Okno odrážeč zachycuje určité okno zprávy a odešle je zpět do ovládacího prvku.Ovládací prvek v jeho okně postupu pak můžete zpracovat tyto zprávy zrcadlený pomocí akcí pro ovládací prvek ActiveX (například při aktivaci události).Viz Projeví okno zprávy ID seznam windows zachycené zprávy a jejich odpovídající zprávy projeví.

Mohou být navrženy kontejneru ActiveX control zprávu odraz, sám, což eliminuje potřebu provádět COleControl vytvořit okno odrážeče a zkrácení doby spuštění režie pro ovládací prvek subclassed systému Windows.COleControlzjistí, zda daný kontejner podporuje tuto funkci kontrolou MessageReflect okolí vlastnosti s hodnotou TRUE.

Zpracování zprávy zrcadlený okno Přidat položku do mapy řídicí zpráva a implementovat funkci zpracování.Protože zrcadlený zprávy není součástí standardní sadu zpráv definovaných v systému Windows, zobrazení třídy nepodporuje přidání obslužné rutiny takové zprávy.Však není obtížné obsluhu přidat ručně.

Přidání procesu zpracování zpráv pro zrcadlený okno zprávy ručně postupujte takto:

  • Ovládací prvek třídy.H souboru deklarovat funkci zpracování.Funkce by měla mít typ vrácené LRESULT a dva parametry typů WPARAM a LPARAM, resp..Příklad:

    class CMyAxSubCtrl : public COleControl
    {
    
    
    ...
    
    
    protected:
        LRESULT OnOcmCommand(WPARAM wParam, LPARAM lParam);
    };
    
  • Ovládací prvek třídy.CPP soubor, přidejte ON_MESSAGE položku mapy zprávy.Parametry této položky by měly být identifikátor zprávy a název funkce zpracování.Příklad:

    BEGIN_MESSAGE_MAP(CMyAxSubCtrl, COleControl)
        ON_MESSAGE(OCM_COMMAND, &CMyAxSubCtrl::OnOcmCommand)
    END_MESSAGE_MAP()
    
  • Také v.Soubor CPP implementovat OnOcmCommand členské funkce zrcadlený zprávu zpracovat.WParam a lParam parametry jsou stejné jako pro původní okno zprávy.

Pro příklad projeví zpracování zpráv, odkazují na vzorku ovládací prvky MFC ActiveX tlačítko.Ukazuje OnOcmCommand rutinu, která zjistí BN_CLICKED kód oznámení a odpoví vypálením událost Click (odesílání).

Viz také

Koncepty

Ovládací prvky MFC ActiveX