Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

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!

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

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

}

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

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.