Udostępnij przez


Formanty MFC ActiveX: używanie obrazów w formancie ActiveX

W tym artykule opisano typowy typ obrazu i sposób implementowania go w kontrolce ActiveX. Tematy obejmują:

Omówienie właściwości obrazu niestandardowego

Typ obrazu jest jedną z grup typów typowych dla niektórych kontrolek ActiveX. Typ obrazu obsługuje metapliki, mapy bitowe lub ikony i umożliwia użytkownikowi określenie obrazu, który ma być wyświetlany w kontrolce ActiveX. Właściwości obrazu niestandardowego są implementowane przy użyciu obiektu obrazu i funkcji Get/Set, które umożliwiają użytkownikowi kontrolowanie dostępu do właściwości Obraz. Kontroluj dostęp użytkowników do niestandardowej właściwości Obraz przy użyciu strony właściwości obrazów stockowych.

Oprócz standardowego typu obraz, dostępne są również typy czcionek i kolorów. Aby uzyskać więcej informacji na temat używania standardowego typu czcionki w kontrolce ActiveX, zobacz artykuł MFC ActiveX Controls: Using Fonts (Kontrolki ActiveX MFC: używanie czcionek).

Klasy kontrolek ActiveX udostępniają kilka składników, których można użyć do zaimplementowania właściwości Obraz w kontrolce. Te składniki obejmują:

Implementowanie niestandardowej właściwości obrazu w kontrolce ActiveX

Po wykonaniu kroków opisanych w tej sekcji kontrolka może wyświetlać obrazy wybrane przez użytkownika. Użytkownik może zmienić wyświetlany obraz przy użyciu strony właściwości, która pokazuje bieżący obraz i ma przycisk Przeglądaj, który umożliwia użytkownikowi wybranie różnych obrazów.

Niestandardowa właściwość Obraz jest implementowana przy użyciu procesu podobnego do tego, który jest używany do implementowania innych właściwości, główną różnicą jest to, że właściwość niestandardowa musi obsługiwać typ obrazu. Ponieważ element właściwości Obraz musi być rysowany przez kontrolkę ActiveX, należy wprowadzić wiele dodatków i modyfikacji do właściwości, zanim będzie można ją w pełni zaimplementować.

Aby zaimplementować niestandardową właściwość Obraz, należy wykonać następujące czynności:

  • Dodaj kod do projektu sterującego.

    Należy dodać standardowy identyfikator strony właściwości obrazów, element członkowski danych typu CPictureHolderi właściwość niestandardową typu LPPICTUREDISP z implementacją Get/Set.

  • Zmodyfikuj kilka funkcji w klasie sterującej.

    Te modyfikacje zostaną wprowadzone w kilku funkcjach odpowiedzialnych za rysunek kontrolki ActiveX.

Dodatki do projektu sterującego

Aby dodać identyfikator strony właściwości dla standardowej strony właściwości Obraz, wstaw następujący wiersz po makrze BEGIN_PROPPAGEIDS w pliku implementacji kontrolki (. CPP):

PROPPAGEID(CLSID_CPicturePropPage)

Należy również zwiększać parametr count makra BEGIN_PROPPAGEIDS o jeden. Poniższy wiersz ilustruje to:

BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)

Aby dodać CPictureHolder składową danych do klasy kontrolki, wstaw następujący wiersz w sekcji chronionej deklaracji klasy kontrolnej w pliku nagłówka kontrolki (. H):

CPictureHolder    m_pic;

Nie jest konieczne nadenie nazwy członkowi danych m_pic; wystarczy dowolna nazwa.

Następnie dodaj właściwość niestandardową, która obsługuje typ obrazu:

Aby dodać właściwość obrazu niestandardowego przy użyciu Kreatora dodawania właściwości

  1. Załaduj projekt kontrolki.

  2. W widoku klasy rozwiń węzeł biblioteki kontrolki.

  3. Kliknij prawym przyciskiem myszy węzeł interfejsu kontrolki (drugi węzeł biblioteki), aby otworzyć menu skrótów.

  4. Z menu skrótów wybierz pozycję Dodaj , a następnie pozycję Dodaj właściwość.

  5. W polu Nazwa właściwości wpisz nazwę właściwości. Na przykład ControlPicture jest używana w tej procedurze.

  6. W polu Typ właściwości wybierz pozycję IPictureDisp* dla typu właściwości.

  7. W polu Typ implementacji kliknij pozycję Pobierz/Ustaw metody.

  8. Wpisz unikatowe nazwy funkcji Get i Ustaw lub zaakceptuj nazwy domyślne. (W tym przykładzie nazwy domyślne GetControlPicture i SetControlPicture są używane).

  9. Kliknij przycisk Finish (Zakończ).

Kreator dodawania właściwości dodaje następujący kod między komentarzami mapy wysyłania w nagłówku kontrolki (. Plik H):

IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);

Ponadto następujący kod został wstawiony na mapie wysyłania implementacji kontrolki (. Plik CPP):

DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture,
   GetControlPicture, SetControlPicture, VT_PICTURE)

Kreator dodawania właściwości dodaje również następujące dwie funkcje wycinkowe w pliku implementacji formantu:

IPictureDisp* CWizardGenCtrl::GetControlPicture(void)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your dispatch handler code here

   return NULL;
}

void CWizardGenCtrl::SetControlPicture(IPictureDisp* /*pVal*/)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   // TODO: Add your property handler code here

   SetModifiedFlag();
}

Uwaga

Nazwy klas kontrolek i funkcji mogą różnić się od powyższego przykładu.

Modyfikacje projektu sterującego

Po dodaniu niezbędnych dodatków do projektu sterowania należy zmodyfikować kilka funkcji mających wpływ na renderowanie kontrolki ActiveX. Te funkcje, OnResetState, OnDrawi Get/Set właściwości obrazu niestandardowego znajdują się w pliku implementacji kontrolki. (Należy pamiętać, że w tym przykładzie klasa kontrolki nosi nazwę CSampleCtrl, CPictureHolder składowa danych jest nazywana m_pic, a niestandardowa nazwa właściwości obrazu to ControlPicture.)

W funkcji sterującej OnResetState dodaj następujący opcjonalny wiersz po wywołaniu metody COleControl::OnResetState:

m_pic.CreateEmpty();
m_pic.CreateEmpty();

Spowoduje to ustawienie obrazu kontrolki na pusty obraz.

Aby poprawnie narysować obraz, wywołaj metodę CPictureHolder::Render w funkcji sterującej OnDraw . Zmodyfikuj funkcję tak, aby przypominała następujący przykład:

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

   m_pic.Render(pdc, rcBounds, rcBounds);
}

W funkcji Get właściwości obrazu niestandardowego kontrolki dodaj następujący wiersz:

return m_pic.GetPictureDispatch();
return m_pic.GetPictureDispatch();

W funkcji Set właściwości obrazu niestandardowego kontrolki dodaj następujące wiersze:

m_pic.SetPictureDispatch(pVal);
InvalidateControl();

Właściwość obrazu musi być stała, aby informacje dodane w czasie projektowania pojawiały się w czasie wykonywania. Dodaj następujący wiersz do COleControlfunkcji -pochodnej DoPropExchange klasy:

PX_Picture(pPX, _T("ControlPicture"), m_pic);

Uwaga

Nazwy klas i funkcji mogą się różnić od powyższego przykładu.

Po zakończeniu modyfikacji ponownie skompiluj projekt, aby uwzględnić nowe funkcje właściwości obrazów niestandardowych i użyj kontenera testowego, aby przetestować nową właściwość. Aby uzyskać informacje na temat uzyskiwania dostępu do kontenera testowego, zobacz Testowanie właściwości i zdarzeń za pomocą kontenera testowego.

Zobacz też

Kontrolki ActiveX MFC
Kontrolki ActiveX MFC: używanie czcionek
Kontrolki ActiveX MFC: strony właściwości