CButton::SetIcon

EriFo

Erfahrenes Mitglied
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 )
 
Zuletzt bearbeitet:

RuFFnEcK

Erfahrenes Mitglied
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:
	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*
 

Endurion

Erfahrenes Mitglied
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.
 

RuFFnEcK

Erfahrenes Mitglied
Das kann doch alles nicht sein *heul*

Also folgender Code inzwischen:
Code:
	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
 

RuFFnEcK

Erfahrenes Mitglied
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:
DWORD tmp = m_myButton.GetStyle();

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

Code:
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
 

RuFFnEcK

Erfahrenes Mitglied
Hat sich erledigt, genau das war es!
Im Konstruktor des Dialogs wurde der Button noch nicht erzeugt und somit hab ich natürlih auch noch keinen Zugriff auf selbigen

Habs geschafft, es wird alles schön angezeigt ;))

Gruss RuFF
 
S

sella

Hallo,

das Thema ist zwar schon alt, aber ich habe genau hierzu eine Frage.
Ich möchte nämlich auch ein Icon auf einem Button darstellen, das klappt auch super, Problem ist nur dass ja dann der Text weg ist. Ich möchte also einen Button auf dem ein Icon zu sehen ist und daneben steht dann noch die Beschriftung des Buttons, also zum Beispiel "Speichern". Ist das irgendwie möglich? Dadurch das der Style des Buttons auf BS_ICON gesetzt wird, bekomme ich einfach nicht das gewünschte Ergebnis. Kann mir da wer helfen?

Grüße sella
 

RuFFnEcK

Erfahrenes Mitglied
Ich denke das wird schwierig^^
Dann soltlest du überlegen die Texte in deine Icons zu integrieren....
Aber lasse mich immer gerne belehren ;-)

Grüße
RuFF