Udostępnij za pośrednictwem


Kontrolki ActiveX MFC: używanie obrazów w kontrolce ActiveX

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

Omówienie właściwości niestandardowych obrazów

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 dostęp do właściwości obrazu. Użytkownicy kontrolera mogą uzyskać dostęp do niestandardowej właściwości Obraz, używając strony właściwości dla 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:

Dodatki do Twojego projektu sterowania

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

PROPPAGEID(CLSID_CPicturePropPage)

Należy również zwiększyć 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 nazywanie członka danych m_pic; wystarczy dowolna nazwa.

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

Aby dodać niestandardową właściwość obrazka za pomocą Kreatora dodawania właściwości

  1. Załaduj projekt kontrolki.

  2. W widoku klasy rozwiń gałąź biblioteki kontrolki.

  3. Kliknij prawym przyciskiem myszy węzeł interfejsu dla Twojej kontrolki (drugi węzeł węzła 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. Dla celów przykładowych, 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 Set 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 dwa szkielety funkcji w pliku implementacji kontroli:

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 / Notatka

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, OnDraw, oraz funkcje Get/Set niestandardowej właściwości Obraz, 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 niestandardowej właściwości obrazka kontrolki dodaj następujący wiersz:

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

W funkcji Set niestandardowej właściwości obrazu 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 funkcji COleControl pochodnej klasy DoPropExchange.

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

Uwaga / Notatka

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

Po zakończeniu modyfikacji przebuduj projekt, aby włączyć nową funkcjonalność niestandardowej właściwości Picture i użyj okna 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 także

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