Icons in beliebiger Größe

Außer den bisher verwendeten Icons in den Standardgrößen 16x16 bzw. 32x32, können Icons auch in anderen Größen spezifiziert werden. Die maximale Größe hierbei liegt, durch 'Eigenversuche' ermittelt, bei 126x126 bei 256 Farben. Um ein Icon mit einer 'beliebigen' Größe zu erstellen, öffnen Sie wie gewohnt den Icon-Editor in der Ressource-Ansicht. Klicken Sie danach den Button Neues Geräteabbild oberhalb des Editorfensters an und es wird folgender Dialog eingeblendet:

Benutzerdefiniertes Icon erstellen

Im Dialog ist dann der Button Benutzerdefiniert... anzuklicken um die Parameter des neue Icons einzugeben.

Die Parameter eines Icons

Beachten Sie dabei bitte, dass Sie die maximale Größe von 126x126 nicht überschreiten dürfen sonst kann das Icon später nicht dargestellt werden. Der Icon-Editor lässt die Erstellung von beliebig großen Icons zu.

Um das Icon zu laden, wird die bereits früher erwähnte API-Funktion LoadImage(...) verwendet. Enthält die Icon-Ressource Icons mit unterschiedlichen Auflösungen, so müssen Sie unbedingt die Auflösung des zu ladenden Icons angegeben.

CIconsView::CIconsView()
{
    // ZU ERLEDIGEN: Hier Code zur Konstruktion einfügen,
    // Wizard-Icon laden
    // Nicht CWinApp::LoadIcon() verwenden da nur Standard-Groesse geladen wird
    m_hIWizard = (HICON)::LoadImage(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_WIZARD),
                                    IMAGE_ICON,0,0,0);
    ASSERT(m_hIWizard);
    // Hut-Icon laden, auch mal 2. Moeglichkeit ausprobieren
    m_hIHat = (HICON)::LoadImage(0,"res\\hat.ico",IMAGE_ICON,50,51,LR_LOADFROMFILE);
//    m_hIHat = (HICON)::LoadImage(0,"res\\hat.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE|LR_DEFAULTSIZE);
    ASSERT(m_hIHat);
}

Die Darstellung des Icons kann dann innerhalb der OnDraw(...) Methode mit der ebenfalls bekannten Methode DrawIconEx(...) erfolgen.

void CIconsView::OnDraw(CDC* pDC)
{
    CIconsDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    // ZU ERLEDIGEN: Hier Code zum Zeichnen der ursprünglichen Daten hinzufügen
    // Zum Zeichnen nicht DrawIcon() verwenden da Icon sonst
    // nur in der Groesse 32x32 dargestellt wird
//    pDC->DrawIcon(m_nIconPos+160,nMOVELINE+110,m_hIHat);
//    pDC->DrawIcon(m_nIconPos,nMOVELINE,m_hIWizard);
    ::DrawIconEx(*pDC,m_nIconPos,nMOVELINE,m_hIWizard,0,0,0,0,DI_NORMAL);
    ::DrawIconEx(*pDC,m_nIconPos+160,nMOVELINE+90,m_hIHat,0,0,0,0,DI_NORMAL);
}

Beachten Sie auch die Kommentare in den obigen Listings!

Zum Laden eines Icons mit einer anwenderdefinierten Größe sollten Sie nicht die CWinApp-Methode LoadIcon(...) verwenden, da diese nur Icons mit der Standard-Größe lädt.
Außerdem sollte zum Zeichnen eines Icon nicht die CDC-Methode DrawIcon(...) verwendet werden, da die Icons hierbei immer in der Größe 32x32 dargestellt werden.

Das fertige Programm zu diesem Thema finden Sie unter 07Ressourcen\GreatIcons.



Copyright © 2004

Senden Sie Emails mit Fragen oder Kommentaren zu dieser Website an: mailto:info@cpp-tutor.de
 Wolfgang Schröder, Lerchenweg 23, D-72805 Lichtenstein. Tel: +49 7129 6470