Zum Inhalt springen

ToolTip/Statuszeilentext für Toolbar ändern MFC/6.0


TinTin

Empfohlene Beiträge

Folgendes Problem:

Ich möchte den Text der in Statuszeile und als Tooltip angezeigt wir, wenn die Maus über

die Toolbar-Buttons geht, ändern und dies zur Laufzeit. Ich weiss, dass die Texte mit

dazugehörigen IDs in der String Table abgelegt sind und diese möchte ändern. Oder einem

Toolbarbutton zur Laufzeit einen Text zuweisen.

Das ganze soll in einem MFC/MDI VS6.0 Projekt passieren.

Kann mir jemand einen Hinweis geben, wie und wo ich das anpacken muss.

ciao TinTin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm also in einer nicht MFC Anwendung muss ich das Ganze manuell machen und den entsprechenden Hilfetext bei Menüauswahl in der Statusbar anzeigen.

Das sieht dann z.B. so aus:


case WM_MENUSELECT:
{
char szString[255];

if(LoadString(NULL,LOWORD(wParam),szString,255))
SendMessage(g_.hStatusbar,SB_SETTEXT,0,(LPARAM)szString);
return 0;
}
[/PHP]

LoadString lädt den Text aus der Stringtable wobei LOWORD(wParam) das ausgewählte Menüitem ist und SB_SETTEXT schickt ihn an die Statusbar.

So in der Art müsste das bei dir auch gehen. Wenn ich mich nicht irre hast du ja eine Instanz von CStatusBarCtrl und diese hat auch eine SetText Funktion...

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Wochen später...

so, nach einigen probieren und wenigen ergebnissen bin ich wieder da und meine frage hat sich etwas verändert.

so steht es in meiner 'mainfrm.cpp'


if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

		| CBRS_GRIPPER | [B][COLOR=DarkRed]CBRS_TOOLTIPS[/COLOR][/B] | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{

	TRACE0("Symbolleiste konnte nicht erstellt werden\n");

	return -1;      // Fehler bei Erstellung

}

zu CBRS_TOOLTIP heisst es in der MSDN:

CBRS_TOOLTIPS Control bar displays tool tips.

wenn ich CBRS_TOOLTIP aus dem Code entferne

werden keine ToolTips eingeblendet.

Frage, was muss ich machen um eine eigen ToolTipCtrl für den o.g Toobar

zu erstellen?

Wie kann ich beim CToolTipCtrl::Create() auf mein m_wndToolBar bezugnehmen?

Ciao TinTin

PS:

Falls ich mich unklar ausdrücken sollte, einfach nochmal nachfragen. BITTE!

Link zu diesem Kommentar
Auf anderen Seiten teilen

	CToolInfo ToolInfo;

	m_wndToolBar.GetToolBarCtrl().GetToolTips()->GetToolInfo(ToolInfo,[COLOR=DarkRed][B]XXX[/B][/COLOR]);
so komme ich wohl von der Nase ans Gehirn. Bleibt nur die Frage was gebe ich der Methode zu fressen (XXX)? Und jetzt bitte keine himweise wie z.B.
  BOOL GetToolInfo(

   CToolInfo& ToolInfo,

   CWnd* pWnd,

   UINT_PTR nIDTool = 0

) const;

Wie komme ich an den sch**ß Fensterzeiger.

Nichts für Ungut, nur fehlen mir schon fast alle Haare ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du fragst ja Sachen. Kann ich Dir gar nicht genau sagen. Das Project ist ein

standard MFC/MDI Projekt. Und derToolBar ist 'IDR_MAINFRAME' mit Neu, Öffnen, usw.



int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)

		return -1;


	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

	{

		TRACE0("Symbolleiste konnte nicht erstellt werden\n");

		return -1;      // Fehler bei Erstellung

	}

	CString csText;

	CToolInfo ToolInfo;

	m_wndToolBar.GetToolBarCtrl().GetToolTips()->GetText(csText,XXX);


	return 0;

}


So Schaut das bei mir in der 'mainfrm.cpp' aus. Egal ob GetText() oder GetToolTips(), immer wenn ich sachen wie NULL, this usw, als Pointer bekomme ich eine Access Violation mit einem Hinweis auf diese Stelle.
  void CToolTipCtrl::GetText(CString& str, CWnd* pWnd, UINT nIDTool) const

{

[COLOR=DarkOrange][B]->[/B][/COLOR]	ASSERT(::IsWindow(m_hWnd));

	ASSERT(pWnd != NULL);


	TOOLINFO ti;

	FillInToolInfo(ti, pWnd, nIDTool);

	ti.lpszText = str.GetBuffer(256);

	::SendMessage(m_hWnd, TTM_GETTEXT, 0, (LPARAM)&ti);

	str.ReleaseBuffer();

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sind die einzelnen Buttons Kindfenster der Toolbar? Dann könntest du die einfach durchenumerieren.


if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, [B][COLOR=DarkRed]WS_CHILD[/COLOR][/B] | WS_VISIBLE | CBRS_TOP

		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

	{

		TRACE0("Symbolleiste konnte nicht erstellt werden\n");

		return -1;      // Fehler bei Erstellung

	}

Nach dem hier:

WS_CHILD Creates a child window. Cannot be used with the WS_POPUP style.

ist die ToolBar ein Kindfenster vom MainFrm, was jetzt aber mit den Button ist

kann ich nicht genau sagen. Was müsste ich denn machen um die durchzunummerieren?

Kann mir jemand was zu dem Assertion fehler Sagen, was stimmt nicht mit

meinem h_hWnd???

Es muss doch möglich sein den Blöden ToolTipText zur laufzeit zu ändern.

TinTin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...