icon ändern im Mainframe!

Specialguest@home

Erfahrenes Mitglied
Hallo allerseits,

Ich habe eine SDI Anwendung in der ich im Mainframe ein Icon eingebunden habe, welches mir auch angezeigt wird!
Code:
static TBBUTTON tbButtons[] = {
	{0, 0,	       TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0,  0},  
	{0, ID_NEU,       TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
	{1, ID_QUEST,  TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
	{0, 0,	        TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0,  0}
};
..
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
		// Add the buttons and adornments to the CommandBar.
	if (!InsertButtons(tbButtons, nNumButtons, IDR_MAINFRAME, nNumImages) ||
	    !AddAdornments(dwAdornmentFlags))
	{
		TRACE0("Failed to add toolbar buttons\n");
		return -1;
	}
	return 0;
}
Soweit so gut! Ich habe dadurch in meinem Mainframe zwei neue Icon! Aber wie bekomme ich es hin das wenn ein bestimmter Fall eintrifft ,sich eines der Icon ändert! Wie kann ich dies realisieren!
Ich hoffe jemand kann mir einen guten Tip dazu geben!
thx a lot sven
 
Äh, meinst du den Toolbar?

An der Stelle, wo besagter Fall eintritt, kannst du mit SetButtonInfo die Werte einzelner Buttons beliebig ändern. Evtl. musst du danach ein Invalidate aufrufen, da sich Toolbars manchmal nicht korrekt neu darstellen.
 
danke dir
aber ich glaub ich hab mich falsch ausgedrückt!

in meiner Toolbar habe ich zwei icons. ich möchte jetzt z.b. wenn ich auf das rechte icon drücke,das sich dass das linke ein anderes Symbol erhält!
Ich werd aus der Methode SetButtonInfo nicht ganz schlau! Ich muss doch dann eine neue resource (icon) einfügen! Kann ich einfach ein neues icon in den resoucen erstellen und es der SetButtonInfo methode geben?

void SetButtonInfo(
int nIndex,
UINT nID,
UINT nStyle,
int iImage );
ist das der wert "int iImage" ?
oder hab ich da was falsch verstanden?

hab das mal so gemacht aber leider ohne erfolg!

Code:
void CMainFrame::OnQuest() 
{
	m_wndToolBar.SetButtonInfo(0, ID_NEU, TBBS_BUTTON   , IDI_TEST);
	Invalidate();
	
}
thx sven
 
Zuletzt bearbeitet:
Beim Erstellen bzw. InsertButtons-Aufruf hast du ja die Resource-ID einer Bitmap übergeben. nImage ist jetzt einfach ein Index auf das nImage-te Icon in dieser Bitmap. D.h. alle Icons, die du je auf dem Toolbar sehen willst, müssen auf dieser Bitmap sein. Soweit ich weiss, können Toolbars nicht direkt mit Icons arbeiten (Ein Witz, sind Icons doch optimal für sowas).

Das Invalidate sollte dann auch auf dem Toolbar erfolgen, also

Code:
m_wndToolBar.SetButtonInfo(0, ID_NEU, TBBS_BUTTON, 1 );  // das zweite Icon in der Bitmap
m_wndToolBar.Invalidate();

Ich gehe mal davon aus, dass m_wndToolBar der Toolbar ist, der mit InsertButtons bestückt wird.
 
Also das mit der BMP ist ja echt dumm!
Ich habe mir jetzt eine BMP resource eingefügt in der mehrere "icons" hintereinander sind!
Beim Erstellen bzw. InsertButtons-Aufruf hast du ja die Resource-ID einer Bitmap übergeben.
Ich glaub das ich das nicht habe! Ich finde nirgens den Eintrag dazu!
meine neue ressource heißt IDB_ICONS und wo muss ich die erzeugen ?
ich vermute in der..
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
wenn ja dann wie, ich hoffe das du mir nochmal helfen kannst, binn wohl schon sehr nach dran! Aber irgendwie weiß ich noch nicht wie das genau gehen soll!

thx sven
 
Original geschrieben von Specialguest@home
Also das mit der BMP ist ja echt dumm!
Ich habe mir jetzt eine BMP resource eingefügt in der mehrere "icons" hintereinander sind!
Ich glaub das ich das nicht habe! Ich finde nirgens den Eintrag dazu!
Das InsertButtons hat als dritten Parameter die Bitmap-ID, der Assistent benutzt dazu immer IDR_MAINFRAME.

meine neue ressource heißt IDB_ICONS und wo muss ich die erzeugen ?
ich vermute in der..
Wenn die IDB_ICONS alle Images enthält, kannst du bei dem Aufruf von InsertButtons einfach dein IDB_ICONS statt IDR_MAINFRAME einsetzen. Evtl. musst du dann die Indices (Indexe?) der Button-Images im tbButtons-Array anpassen (Müsste jeweils der erste Eintrag sein).
 
hmm!
zuerst 1000 dank das du mir so unter die Arme greifst!
Ist aber immer noch nicht richtig!
ich habe meine Toolbar!
darin habe ich bereits zwei Icon "gemalt" und auch ID´s zugewiesen! Übern Klassenassi habe ich auch einen der Icon eine Methode erstellt wo ich besagte Änderung machen will! Wenn ich jetzt in InsertButton die IDB_ICONS angebe werden andere Icon geladen!
Wie kann ich dies verknüpfen! oder so stellen das die Icon aus der BMP genommen weden und ich denen eine ID geben kann?
mein code bis dato:
Code:
static TBBUTTON tbButtons[] = {
	{0, 0,				TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0,  0},  
	{0, ID_NEU,			TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
	{1, ID_QUEST,		TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},	
	{0, 0,				TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0,  0}
};
const int nNumButtons = sizeof(tbButtons)/sizeof(TBBUTTON);
const int nNumImages = 2;
const DWORD dwAdornmentFlags = 0; // exit button
..

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
		// Add the buttons and adornments to the CommandBar.
	if (!InsertButtons(tbButtons, nNumButtons, IDB_ICONS, nNumImages) ||
	    !AddAdornments(dwAdornmentFlags))
	{
		TRACE0("Failed to add toolbar buttons\n");
		return -1;
	}
	return 0;
}
..
void CMainFrame::OnQuest() 
{
	m_wndToolBar.SetButtonInfo(0, ID_NEU, TBBS_BUTTON , 2);
	m_wndToolBar.Invalidate();
	
}
thx sven
 
Wenn ich in TBBUTTON [] die ersten Parameter änder in!
Code:
static TBBUTTON tbButtons[] = {
	{IDB_ICONS, 0,TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0,  0},  
              ... ... ...
ändert sich auch nichts! Leider weiß ich nicht wie ich die TBBUTTON dahingehend ändern muss damit er weiß das das die BMP icons sind?
Die müssen doch irgendeine eindeutige ID haben so wie in der toolbar! ID_NEU / ID_QUEST oder so!

HILFE!

sven
 
Neineinein, IDB_ICONS ist KEIN Index in die Bitmap. Das ist eine ID bzw. ein Index auf die Resourcen bzw. auf die komplette Bitmap.

In dem ersten Ausschnitt, den du gezeigt hast, sieht das so aus:

Code:
static TBBUTTON tbButtons[] = {
	{0, 0,				TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0,  0},  
	{0, ID_NEU,			TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
	{1, ID_QUEST,		TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},	
	{0, 0,				TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0,  0}
};

Beachte die 0 vor ID_NEU und die 1 vor ID_QUEST. 0 ist das erste Icon in der Bitmap, 1 das zweite. Der jeweils zweite Eintrag (ID_NEU bzw. ID_QUEST) gibt dann den Code an, der an dein Fenster gesendet wird, sobald du auf den entsprechenden Button drückst.

Statt IDB_ICONS setze da einen Wert von 0 bis Anzahl-Icons-in-der-Bitmap-minus-1 ein.

Es ist NICHT möglich, dem Toolbar Icons aus zwei verschiedenen Bitmaps zu verpassen. Du kannst immer nur eine Bitmap zuweisen. Und dieser Image-Index ist keine Konstante wie ID_xxx, sondern einfach eine Zahl von 0 bis...


Was ich grade noch sehe, der Wert numImages muss dann evtl. auch höhergesetzt werden. Du hast ja in der Bitmap auch mehrere Icons, nicht nur die 2.


Wenn du jetzt komplett am Verzweifeln bist, dann pack einfach das Projekt und häng es kurz hier rein, dann änder ich die Stellen und schreibe einen Kommentar dazu.
 
Hallo
ich verzweifele!
Code:
static TBBUTTON tbButtons[] = {
{0, 0,	       TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0,  0},  
{4, ID_NEU,       TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
{1, ID_QUEST,  TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},	
{0, 0,	       TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0,  0}
};
Wenn ich nu beim ersten Button die 4 als iBitmap nehme bekomme ich auch das 5 Icon geliefert! Aslo greift er richtiger Weise auf das BMP zu und holt die Icon da raus!
Nur wenn ich mit der Methode SetButtonInfo arbeite passiert garnix!

:) Okay bischen spät aber das was ich hier mache soll für PocketPC laufen, jedoch habe ich in der MSDN oder im Netz keinerlei hinweise dazu gefunden das das nicht klappen soll!
Leider kann ich das ganze Projekt nicht mit anhängen (zu größ / Firmeneigentum)
aber die MainFrame.cpp habe ich mit angehängt!
Mir würde aber auch reichen wenn du einfach schreibst wo ich was ändern muss, wenn das nicht zu viel ist!
1000 dank erstmal und nochmal!

Was ich grade noch sehe, der Wert numImages muss dann evtl. auch höhergesetzt werden. Du hast ja in der Bitmap auch mehrere Icons, nicht nur die 2.
hab ich wiedr auf 7 geändert, war nur zu testzwecken! :)

sven
 

Anhänge

  • mainframehundcpp.rar
    1,9 KB · Aufrufe: 19
Zuletzt bearbeitet:
Zurück