Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

Das das beim Menu machbar ist hab ich schon gesehen, die frage ist aber, wie

komme ich an die Texte, die den Toolbar-Button zugeordnet sind.

ciao TinTin

  • 3 Wochen später...
Geschrieben

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!

Geschrieben

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

Geschrieben

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();

}

Geschrieben

Wiso bekomme ich eigentlich eine Assertion an dieser Stelle?

-> ASSERT(::IsWindow(m_hWnd));

Ist OnCreate etwa der Falsche Ort?

EDIT:

Für heute ist es mir

egal->BisMorgen(Wink);

Geschrieben
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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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