Sdílet prostřednictvím


Ovládací prvky MFC ActiveX: Pokročilá témata

Tento článek se zabývá Pokročilá témata vztahující se k vývoji ovládací prvky ActiveX.Patří sem:

  • Použití databáze tříd v ovládacích prvcích ActiveX

  • Provádění parametrizované vlastnost

  • Zpracování chyb v ovládacím prvku ActiveX

  • Zpracování speciálních kláves v ovládacím prvku

  • Přístup k dialogu Ovládací prvky, které jsou neviditelné v době spuštění

Použití databáze tříd v ovládacích prvcích ActiveX

Protože třídy ovládací prvek ActiveX jsou součástí knihovny třídy, můžete použít stejné postupy a pravidla pro použití databáze tříd v standardní aplikace MFC rozvojovým ovládací prvky ActiveX, které používají s třídami databází MFC.

Obecný přehled třídami databází MFC naleznete v Třídami databází MFC (DAO a ODBC).Článek přináší tříd MFC ODBC a tříd MFC DAO a vás přesměruje na další podrobnosti o buď.

[!POZNÁMKA]

Tak jako jazyk Visual C++ .NET, tak taky prostředí a průvodci jazyka Visual C++ nepodporují rozhraní DAO (přestože třídy rozhraní DAO jsou zahrnuty a lze je stále použít).Společnost Microsoft doporučuje použít OLE DB šablony nebo ODBC a MFC pro nové projekty.Měli by jste používat pouze rozhraní DAO pro údržbu existujících aplikací.

Provádění parametrizované vlastnost

Parametry vlastností (někdy nazývané vlastnosti pole) je metoda vystavuje homogenní kolekce hodnot jako jedinou vlastnost ovládacího prvku.Například můžete použít parametrické vlastnosti matice nebo slovníku jako vlastnost zpřístupnit.V jazyce Visual Basic tato vlastnost je možné získat pomocí pole zápis:

x = o.Array(2, 3) ' gets element of 2D array
o.Array(2, 3) = 7 ' sets element of 2D array

Pomocí Průvodce přidáním vlastností implementovat parametrizované vlastnost.Průvodce přidáním vlastností implementuje vlastnosti přidáním pár Get a Set funkcí, které umožňují řízení přístupu uživatele k vlastnosti pomocí výše uvedeného zápisu nebo standardním způsobem.

Podobné metody a vlastnosti, parametry mají také omezen počet parametrů povoleny.V případě parametrické vlastnosti je limit 15 parametry (jeden parametr vyhrazeno pro ukládání hodnota vlastnosti).

Následující postup přidá parametrické vlastnosti pole, která je přístupná jako dvojrozměrné pole celých čísel.

Přidání parametrické vlastnosti pomocí Průvodce přidáním vlastností

  1. Načtení ovládacího prvku projektu.

  2. V zobrazení třídy rozbalte knihovnu ovládacího prvku.

  3. Uzel rozhraní pro ovládání (druhý uzel uzel knihovny) tlačítkem otevřete místní nabídku.

  4. V místní nabídce klepněte na příkaz Přidat a klepněte na tlačítko Přidat vlastnost.

  5. V Název vlastnosti zadejte Array.

  6. V Vlastnost typu vyberte položku krátké.

  7. Pro provedení typu, klepněte na tlačítko Metody Get a Set.

  8. V Funkce získat a Nastavit funkci polí zadejte jedinečné názvy pro získání a nastavení funkcí nebo přijměte výchozí názvy.

  9. Přidat parametr nazvaný row (typ short), použití Název parametru a Typ parametru ovládací prvky.

  10. Přidat druhý parametr nazvaný column (typ short).

  11. Klepněte na tlačítko Dokončit.

2dffbw6e.collapse_all(cs-cz,VS.110).gifZměny provedené vlastnost Průvodce

Při přidání vlastních vlastností průvodce Přidat vlastnost změní záhlaví třídy control (.H) a provádění (.CPP) soubory.

Následující řádky jsou přidány do třídy řízení.H soubor:

SHORT GetArray(SHORT row, SHORT column);
void SetArray(SHORT row, SHORT column, SHORT newVal);

Tento kód deklaruje dvě funkce nazývá GetArray a SetArray , umožnit uživateli při přístupu k vlastnosti požadavku určitý řádek a sloupec.

Kromě toho průvodce Přidat vlastnost přidá následující řádky na mapě odeslání ovládací prvek umístěn v implementaci třídy ovládacího prvku (.Soubor CPP):

DISP_PROPERTY_PARAM_ID(CMyAxUICtrl, "Array", dispidArray, GetArray, SetArray, VT_I2, VTS_I2 VTS_I2)

Nakonec implementace GetArray a SetArray funkce jsou přidány na konec.Soubor CPP.Ve většině případů budete upravovat funkce Get vrátit hodnotu vlastnosti.Nastavení funkce zpravidla obsahují kód, který má být spuštěn před nebo po změně vlastností.

Tato vlastnost je užitečná pro nelze deklarovat dvojrozměrné členské proměnné třídy ovládacího prvku typu krátké, k uložení hodnoty vlastnosti parametry.Pak nelze upravit funkce Get vrátit hodnotu uloženou na odpovídající řádek a sloupec, podle parametrů a změnit nastavení funkce aktualizovat hodnotu odkazuje parametry řádku a sloupce.

Zpracování chyb v ovládacím prvku ActiveX

Chyba podmínek v ovládacím prvku, můžete zprávy o chybě ovládací prvek kontejner.Existují dvě metody pro zasílání zpráv o chybách v závislosti na situaci dojde k chybě.Pokud dojde k chybě v rámci této vlastnosti získat nebo nastavit funkci, nebo v rámci provádění metodu automatizace OLE, by měl zavolat ovládací prvek COleControl::ThrowError, které signály, řízení uživatele došlo k chybě.Pokud dojde k chybě v jiné době, by měla zavolat ovládací prvek COleControl::FireError, což je zásobní událost chyby.

Typ chyby, ke kterým došlo, označte ovládací prvek musí projít kód chyby ThrowError nebo FireError.Chybový kód je kód stavu OLE, které má hodnotu 32-bit.Pokud možno zvolte ze standardní sady kódů, které jsou definovány v OLECTL kód chyby.H hlavičky souboru.Následující tabulka shrnuje tyto kódy.

Kódy chyb ovládací prvek ActiveX

Chyba

Description

CTL_E_ILLEGALFUNCTIONCALL

Neplatné volání funkce

CTL_E_OVERFLOW

Přetečení

CTL_E_OUTOFMEMORY

Nedostatek paměti

CTL_E_DIVISIONBYZERO

Dělení nulou

CTL_E_OUTOFSTRINGSPACE

Mimo rozsah řetězce

CTL_E_OUTOFSTACKSPACE

Nedostatek místa v zásobníku

CTL_E_BADFILENAMEORNUMBER

Chybný název souboru nebo číslo

CTL_E_FILENOTFOUND

Soubor nebyl nalezen.

CTL_E_BADFILEMODE

Chybný režim souboru

CTL_E_FILEALREADYOPEN

Soubor je již otevřen

CTL_E_DEVICEIOERROR

Chyby zařízení I/O

CTL_E_FILEALREADYEXISTS

Soubor již existuje.

CTL_E_BADRECORDLENGTH

Chybná délka záznamu

CTL_E_DISKFULL

Disk je plný

CTL_E_BADRECORDNUMBER

Chybné číslo záznamu

CTL_E_BADFILENAME

Chybný název souboru

CTL_E_TOOMANYFILES

Příliš mnoho souborů

CTL_E_DEVICEUNAVAILABLE

Zařízení není k dispozici

CTL_E_PERMISSIONDENIED

Oprávnění byla odepřena

CTL_E_DISKNOTREADY

Disk není připraven

CTL_E_PATHFILEACCESSERROR

Chyba přístupu v cestě/souboru

CTL_E_PATHNOTFOUND

Cesta nebyla nalezena

CTL_E_INVALIDPATTERNSTRING

Neplatný řetězec vzorku

CTL_E_INVALIDUSEOFNULL

Neplatné použití výrazu NULL.

CTL_E_INVALIDFILEFORMAT

Neplatný formát souboru

CTL_E_INVALIDPROPERTYVALUE

Neplatná hodnota vlastnosti

CTL_E_INVALIDPROPERTYARRAYINDEX

Chybný index pole vlastností

CTL_E_SETNOTSUPPORTEDATRUNTIME

Sada není podporována v době spuštění

CTL_E_SETNOTSUPPORTED

Sada není podporována (vlastnost jen pro čtení)

CTL_E_NEEDPROPERTYARRAYINDEX

Je třeba index pole vlastností

CTL_E_SETNOTPERMITTED

Nastavení není povoleno

CTL_E_GETNOTSUPPORTEDATRUNTIME

Metoda Get není podporována v době spuštění

CTL_E_GETNOTSUPPORTED

Získání není podporován (pouze pro zápis vlastnosti)

CTL_E_PROPERTYNOTFOUND

Vlastnost nebyla nalezena.

CTL_E_INVALIDCLIPBOARDFORMAT

Neplatný formát schránky

CTL_E_INVALIDPICTURE

Neplatný obrázek

CTL_E_PRINTERERROR

Chyba tiskárny

CTL_E_CANTSAVEFILETOTEMP

Soubor nelze uložit TEMP

CTL_E_SEARCHTEXTNOTFOUND

Hledaný text nebyl nalezen.

CTL_E_REPLACEMENTSTOOLONG

Příliš dlouhá nahrazení

V případě potřeby použít CUSTOM_CTL_SCODE makro definovat kód vlastní chybovou podmínku, která nejsou zahrnuty jeden standardní kódy.Parametr makro musí být celé číslo mezi 1000 a 32767 včetně.Příklad:

#define MYCTL_E_SPECIALERROR CUSTOM_CTL_SCODE(1000)

Chcete-li vytvořit ovládací prvek ActiveX nahraďte existující ovládací prvek VBX definujte kódy ActiveX řízení chyb s stejné číselné hodnoty, které používá ovládací prvek VBX zajistit kompatibilní kódy chyb.

Zpracování speciálních kláves v ovládacím prvku

V některých případech můžete chtít zpracovat určité kombinace kláves zvláštním způsobem; například vložit nový řádek při stisknutí klávesy ENTER v víceřádkové textové pole ovládacího prvku nebo přesunutí mezi skupiny úpravy řídí při směru ID stisknutí klávesy.

Pokud je základní třída ovládacího prvku ActiveX COleControl, můžete přepsat CWnd::PreTranslateMessage před zpracovává kontejneru je zpracování zpráv.Při použití této techniky vždy vrátit TRUE Pokud zpracovávat zprávy ve vašem přepsání PreTranslateMessage.

Následující příklad kódu ukazuje možným způsobem zpracování všech zpráv souvisejících s směrové klávesy.

BOOL CMyAxUICtrl::PreTranslateMessage(MSG* pMsg)
{
   BOOL bHandleNow = FALSE;

   switch (pMsg->message)
   {
      case WM_KEYDOWN:
         switch (pMsg->wParam)
         {
         case VK_UP:
         case VK_DOWN:
         case VK_LEFT:
         case VK_RIGHT:
            bHandleNow = TRUE;
            break;
         }
         if (bHandleNow)
         {
            OnKeyDown((UINT)pMsg->wParam, LOWORD(pMsg->lParam), HIWORD(pMsg->lParam));
         }
         break;
   }
   return bHandleNow;
}

Další informace o zpracování rozhraní klávesnice pro ovládací prvek ActiveX naleznete v dokumentaci ActiveX SDK.

Přístup k dialogu Ovládací prvky, které jsou neviditelné v době spuštění

Můžete vytvořit ovládací prvky dialogu, které žádné uživatelské rozhraní a v době běhu jsou neviditelné.Pokud přidáte neviditelné v době spuštění ovládacího prvku ActiveX dialogové okno a použití CWnd::GetDlgItem Chcete-li ovládací prvek, ovládací prvek nebude správně fungovat.Místo toho používejte jeden z následujících postupů získat objekt reprezentující prvek:

  • Průvodce přidat členské proměnné, vyberte Řízení proměnné a potom vyberte ID ovládacího prvku.Zadejte název proměnné členů a vyberte ovládacího prvku wrapper třídu jako Typ ovládacího prvku.

    -nebo-

  • Místní proměnné a podtřídu Deklarujte jako položka dialogového okna.Vložit kód podobný následujícímu (CMyCtrl je třída obálky IDC_MYCTRL1 je ID ovládacího prvku):

    CCirc myCirc;
    myCirc.SubclassDlgItem(IDC_CIRCCTRL2, this);
    // ... use myCirc ...
    myCirc.UnsubclassWindow();
    

Viz také

Koncepty

Ovládací prvky MFC ActiveX