TinTin Geschrieben 26. August 2005 Geschrieben 26. August 2005 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 Zitieren
Guybrush Threepwood Geschrieben 26. August 2005 Geschrieben 26. August 2005 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... Zitieren
TinTin Geschrieben 29. August 2005 Autor Geschrieben 29. August 2005 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 Zitieren
TinTin Geschrieben 15. September 2005 Autor Geschrieben 15. September 2005 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! Zitieren
TinTin Geschrieben 15. September 2005 Autor Geschrieben 15. September 2005 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 ... Zitieren
Klotzkopp Geschrieben 15. September 2005 Geschrieben 15. September 2005 Sind die einzelnen Buttons Kindfenster der Toolbar? Dann könntest du die einfach durchenumerieren. Zitieren
TinTin Geschrieben 15. September 2005 Autor Geschrieben 15. September 2005 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(); } Zitieren
TinTin Geschrieben 15. September 2005 Autor Geschrieben 15. September 2005 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); Zitieren
TinTin Geschrieben 16. September 2005 Autor Geschrieben 16. September 2005 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 Zitieren
Empfohlene Beiträge
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.