tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
19
ZUGRIFFE
4658
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Quick_Mik
    Quick_Mik Quick_Mik ist offline Mitglied Silber
    Registriert seit
    Oct 2003
    Ort
    127.0.0.1
    Beiträge
    86
    Hallo Leute.

    Irgendwie bin ich zu blöd dafür...

    Ich möchte auf einem Button (CButton) ein Icon anzeigen lassen.

    Dazu möchte ich natürlich die Methode SetIcon nutzen.

    Allerdings funktioniert es weder so
    Code :
    1
    
    m_myButton.SetIcon(::LoadIcon(NULL,IDI_ICON)

    noch so
    Code :
    1
    2
    3
    
    HICON icon;
    icon = LoadIcon(NULL,IDI_ICON);
    m_myButton.SetIcon(icon);

    Es kommt zwar bei beidem kein Fehler beim Kompilieren, jedoch wird auch kein Icon auf dem Button angezeigt...

    Kann mir da vieleicht jemand weiterhelfen?

    Die Suche hat nur ein Ergebniss gebracht, und dort war es nach der zweiten Variante gelöst. In der MSDN steht ein Codebeispiel nach erster Variante...

    Ach ja, der Button ist als Symbol Button gekennzeichnet.

    Gruß

    M.
     

  2. #2
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Du musst bei LoadIcon als ersten Parameter die HINSTANCE deines Programmes einsetzen (kannst du über GetModuleHandle( NULL ) erhalten).
     

  3. #3
    Avatar von Quick_Mik
    Quick_Mik Quick_Mik ist offline Mitglied Silber
    Registriert seit
    Oct 2003
    Ort
    127.0.0.1
    Beiträge
    86
    Danke für die Antwort. Werde ich testen.

    Hab mir in der Zwischenzeit allerdings das Projekt CButtonST von www.codeproject.com geholt.

    Da sind solche Methoden wie SetIcon(), SetTooltipText() etc überschrieben und wesentlich einfacher zu handeln. Ausserdem sehen die Buttons noch dazu besser aus als der MFC Standard

    Gruß

    M.
     

  4. #4
    Registriert seit
    Apr 2004
    Ort
    Ettersburg (Thüringen)
    Beiträge
    176
    Für all jene die es doch noch interessiert, einfach Icons auf seinen Button zu pappen:

    Code :
    1
    
    m_button.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON_HAUMICHBLAU));

    das wars ...
     
    Dieses Schreiben wurde maschinell
    erstellt und bedarf keiner Unterschrift

  5. #5
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Nachtrag: Das HICON, das von LoadIcon von der CWinApp zurückkommt, muss übrigens genauso wie beim anderen LoadIcon mit DestroyIcon am Ende wieder gezappt werden.
     

  6. #6
    RuFFnEcK RuFFnEcK ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Beiträge
    203
    Hallo zusammen,

    kann es sein das man jeweils nur ein ICON einem Button zuordnen kann?
    Ich habe ein Ordner ICON eingefügt und will es für mehrere Buttons anzeigen...
    Das funktioniert aber nur für den ersten Button und der andere wird ohne ICON angezeigt...

    Dann hab ich noch eine Frage:

    Wo bekomme ich standard Windows ICONs her? Ich bräuchte ein Ordner-ICON.

    Danke und Gruss
    RuFF
     

  7. #7
    RuFFnEcK RuFFnEcK ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Beiträge
    203
    Hiiilfe

    Ich will dafür nicht einen neuen Thread aufmachen...


    Kann mir jemand sagen wo ich meine standard Windows ICONs finde?
    Oder ob man die überhaupt extrahieren kann

    Gruss
    RuFF
     

  8. #8
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Die Windows-Icons sind kreuz und quer verteilt, einige findest du in der Explorer.exe, viele andere in der iexplore.exe, wieder andere in diversen DLLs im System-Ordner.

    Mit einem Tool wie ResHacker kannst du die da rausziehen. Allerdings begibst du dich da in unsichere Gewässer, die Icons gehören Microsoft. Andererseits glaube ich nicht, dass die da gross nachprüfen
     

  9. #9
    RuFFnEcK RuFFnEcK ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Beiträge
    203
    Hallöchen,

    erstmal danke für die Antwort!
    Hat alles ge****t und hab die Icons extrahiert...
    Jetzt hab ich das Problem mit dem dartsellen...

    Es geht sowohl:
    Code :
    1
    
    m_button.SetIcon(AfxGetApp()->LoadIcon(IDI_ICON_HAUMICHBLAU));

    nicht, als auch:

    Code :
    1
    
    m_myButton.SetIcon(::LoadIcon(NULL,IDI_ICON)

    nicht, nur das hiebei der Compiler meckert, dass die int (ID) nicht in LPCSTR umgewandelt werden kann...

    Ich habe auch sonst alles mögliche ausprobiert und es wird zum verrecken kein ICON angezeigt...

    Da ich in den Button einstellungen nichts zu ICON gefunden habe mach ich das im Konstruktor des Dialogs manuell:

    Code :
    1
    
    m_VailooMonButton.SetButtonStyle(BS_ICON, TRUE);

    Aber ich bekomme das ICON einfach nicht angezeigt

    Danke & Gruss
    RuFF
     

  10. #10
    Avatar von jokey2
    jokey2 jokey2 ist offline Mitglied Smaragd
    Registriert seit
    Nov 2004
    Beiträge
    1.235
    Hast Du dem Button den Stil BS_BITMAP gegeben?
     

  11. #11
    Registriert seit
    Apr 2004
    Ort
    Ettersburg (Thüringen)
    Beiträge
    176
    Bei mir funktioniert das z.B.:
    m_button_add.SetIcon( ::LoadIcon( NULL, MAKEINTRESOURCE(IDI_WINLOGO) ) );

    Bzw die sichere Variante:
    HICON icon = ::LoadIcon( NULL, MAKEINTRESOURCE(IDI_QUESTION) );
    m_button_add.SetIcon( icon );
    :: DestroyIcon( icon );


    Ich konnte aber nicht in OnInitDialog() oder irgendwo anders den Stil auf diese Weise von Text zim Icon ändern:
    m_button_add.SetButtonStyle( BS_ICON, true );
    (Bei anderen Stilen hat es aber Funktioniert)


    Aber im Resourcen Editor (VS) ist unter Eigenschaften für den Button ein Punkt "Icon" - wenns da an war ging es.

    Nachtrag:
    Ahh - damit kann man zur Laufzeit den Stil ändern:
    m_button_add.ModifyStyle( 0, BS_ICON );

    ( Man sollte auch den Stil setzten bevor man das Icon lädt - sonst wird es auch nicht angezeigt )
    Geändert von EriFo (19.09.06 um 18:29 Uhr)
     
    Dieses Schreiben wurde maschinell
    erstellt und bedarf keiner Unterschrift

  12. #12
    RuFFnEcK RuFFnEcK ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Beiträge
    203
    Hallo und danke für die Antworten

    Davon bin ich schon ausgegangen, dass man dem Button den "BS_ICON" Style zuweisen muss, bevor man ihm ein ICON zuweist...
    Aber ich habe bisher versucht mit SetButtonStyle() einem im Editor hinzugefügten Button,
    einen neuen Style zu zuweisen...

    Naja wie dem auch sei es irgendwie alles nicht

    Erstmal das drumherum, nicht das ihr von etwas ausgeht was ich nicht gemacht habe oder
    erstellt habe...

    - Visual Studio 2003 Prof.
    - Dialogfeldbasiert
    - EInfacher Dialog ohne Menu und alles
    - Einfacher Button <- Da soll das ICON drauf
    - Ein 32 X 32 großes ICON mit 16 mio. Farben... (Aufgeführt unter Ress -> Icon)


    Unter den Eigenschaften des Button finde ich nur die Einstellung Bitmap und die habe ich mal ein und ausgeschaltet, nutzt nix...
    Habe dem Button eine Control Variable hinzugefügt...
    Im Konstruktor/OnCreate/ versuche ich folgendes:

    Code :
    1
    2
    
        m_myButton.ModifyStyle(0,BS_ICON);
        m_myButton.SetIcon( ::LoadIcon(NULL, MAKEINTRESOURCE(IDI_SEARCH_FOLDER)));

    Der Compiler meckert net und sonst ist auch alles in Ordnung, aber es wird nix angezeigt...
    Das ICON wird in der Taskleiste für das Programm angezeigt...
    Nicht das der das ICON nicht mehr als ein mal anzeigen kann?
    Weiß nicht so genau wie das dahin kommt... *g*
     

  13. #13
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Du musst bei LoadIcon die HINSTANCE deines Programmes angeben (oder bei MFC einfach AfxGetInstanceHandle).

    Wenn da NULL übergeben wird, kann man ein paar Standard-Windows-Icon laden.
     

  14. #14
    RuFFnEcK RuFFnEcK ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Beiträge
    203
    Das kann doch alles nicht sein *heul*

    Also folgender Code inzwischen:
    Code :
    1
    2
    
        m_VailooMonButton.ModifyStyle(0,BS_ICON);
        m_VailooMonButton.SetIcon( LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_SEARCH_FOLDER)));

    So es jetzt aber so dass das ICON in der Taskleiste angezeigt wird....
    Warum weiß ich nicht? Wo stellt man das nochmal ein, welches ICON das Prog in
    der Taskleiste hat, nicht das Windoof/MFC das Icon nur einmal darstellen kann....?

    Gruss und Danke
    RuFF
     

  15. #15
    RuFFnEcK RuFFnEcK ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Beiträge
    203
    Hallo zusammen ich immer noch
    Tut mir leid dass ich nerve, aber ich weiß einfach nicht mehr weiter...
    Es funktioniert nicht einmal das auslesen des Styles des Buttons:

    Code :
    1
    
    DWORD tmp = m_myButton.GetStyle();

    Und zwar schlägt folgende Assert Anweisung in der "winocc.cpp" fehl:

    Code :
    1
    2
    3
    4
    5
    
    DWORD CWnd::GetStyle() const
    {
        ASSERT(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));
    ...
    }

    Wenn ich das richtig verstanden habe ist CButton ja von CWnd abgeleitet,
    dann sollte das doch funktionieren?!


    Liegt es viell. daran dass es ein Dialogfeldbasiertes Projekt ist
    Und der Button via drag and drop, auf dem Dialog liegt

    Jungs bitte helft mir ich weiß nicht weiter (

    PS: Kann mir jemand sagen ab wann der Button existiert?
    Ich versuch das auslesen und setzen des Styles und des ICON innerhalb
    des Konstruktors des Dialogs?
    Und nicht dass der Button da noch nicht existiert...


    Danke und Gruss
    RuFF
     

Ähnliche Themen

  1. CButton ausgrauen
    Von chuqa im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 04.07.07, 11:19
  2. CButton m_hWnd
    Von kerian im Forum VisualStudio & MFC
    Antworten: 3
    Letzter Beitrag: 05.09.05, 15:40
  3. JLabel und setIcon Frage ?
    Von vrcat im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 25.06.05, 12:06
  4. Text auf CButton?!
    Von Ravebaby im Forum VisualStudio & MFC
    Antworten: 10
    Letzter Beitrag: 22.05.05, 18:18
  5. CButton Problem
    Von Constantine im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 19.05.05, 13:40