zugriff auf StatusBar



  • // alles wegedit wegen doofheit

    zwei mal der selbe fehler #gggg



  • 😕



  • ich hatte das problem das meine tooltips gar nicht funktionierten bis ich vergessen hatte das ich schon wieder {wie beim letzten projekt} das pretranslatemessage vergessen hatte #gg

    versuch nu deinen vorschlag umzusetzen {=



  • Aso 😃

    Falls du unsere letzten beiden Diskussionen suchst, die sind jetzt in der FAQ.
    Über Tooltips gibts so wenig, da hab ich das mal archiviert. 🙂



  • jo hab ich schon gesehen {o;

    ich frag mich gerade:

    AfxGetMainWnd()->SendMessage(WM_UPDATE_TEXTE, (WPARAM)this);
    

    bisher hab ich alles verstanden - was ich mich aber frag is, wie kann ich normalen cstring text senden ?

    (WPARAM)csText ?



  • Tja, wie du oben schon lesen kannst: Das habe ich noch nicht hinbekommen. 😞
    Das einzige, wie ich es bisher hinbekommen habe ist das: http://www.codeproject.com/threads/ipc_wmcopy.asp

    Aber vielleicht geht es ja auch mit den Usermessages.



  • ich hab das jetzt ohne send message geloest und zwar indem ich den pointer auf die statusbar einfach geholt hab

    void COwnToolTips::OnTtnTooltipShow(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	MoveWindow(60000, 60000, 60000, 60000);
    	CMainFrame* pFrame = dynamic_cast<CMainFrame*>(AfxGetMainWnd());
    	if(pFrame != NULL && m_wnd != NULL)
    	{
    		CString csTip = _T("");
    		GetText(csTip, m_wnd, pNMHDR->idFrom);
    		pFrame->m_wndStatusBar.SetWindowText(csTip);
    	}
    }
    

    was ich mich aber noch frag, ich muss den pointer auf die View klasse mitgeben

    m_tooltip.SendPointerWnd(this);
    

    auch bloed aber anders weiss ich nicht, da ich das Wnd der view brauch, und diese kann ich irgendwie nicht holen /=

    auf jeden fall hab ich nu das ganze "alte" programm fertig auf das neue mit Doc/View portiert und kann es nun leben einhauchen {=


  • Mod

    Diese Methode mit der Casterei und dem bekanntmachen der CMainFrame Klasse ist unnötig. Die MFC implementirt die Nachricht WM_SETMESSAGESTRING. Diese ist in der TN024 ausgiebig beschrieben.

    AfxGeMainWnd()->SendMessage(WM_SETMESSAGESTRING,NULL,static_cast<LPCSTR>(csTip));
    

    Sollte es sofort tun!



  • WM_SETMESSAGESTRING kennt mein compiler gar nicht - casten tu ich doch auch nichts


  • Mod

    WM_SETMESSAGESTRING ist Bestandteil der MFC seit der Version 1.0!

    Der cast ist notwendig weil ein LPCSTR Zeiger übergeben werden muss. IMHO fehlt sogar ein reinterpret_cast<LPARAM>.



  • Es ist in der MSDN aber echt schwer, rauszufinden, welchen Include man braucht.
    Ich hab es jetzt über Suchen in Dateien gefunden:

    #include "afxpriv.h"
    

    Leider bekomme ich jetzt

    error C2664: 'SendMessageA' : Konvertierung des Parameters 3 von 'const char *' in 'long' nicht moeglich
            Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    

    ...ich glaube so weit war ich nach deinem ersten Hinweis auf WM_SETMESSAGESTRING schon mal und hatte die Versuche dann eingestellt. 😞



  • Okay, jetzt habe ich den zweiten Post mal eingebunden:

    AfxGetMainWnd()->SendMessage(WM_SETMESSAGESTRING,NULL,reinterpret_cast<LPARAM>(static_cast<LPCSTR>(strTip)));
    

    Das compiliert, aber jetzt steht kein Text mehr in der Statuszeile. 😞


  • Mod

    Funktioniert bei mir perfekt.
    Aber Achtung: Die MFC erneuert die Statuszeile selbst oft genug mit dem Idle Text "Bereit".
    Breakpoint setzen auf CFrameWnd::OnSetMessageString und kontrollieren wer der böse andere SendMessage Sender ist.



  • hei funzt bei mir tadellos {= nachdem ich diese uminoese header includiert hab - danke estartu

    void COwnToolTips::OnTtnTooltipShow(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	MoveWindow(60000, 60000, 60000, 60000);
    	if(m_wnd != NULL)
    	{
    		CString csTip = _T("");
    		GetText(csTip, m_wnd, pNMHDR->idFrom);
    		AfxGetMainWnd()->SendMessage(WM_SETMESSAGESTRING,NULL,reinterpret_cast<LPARAM>(static_cast<LPCSTR>(csTip)));
    	}
    }
    void COwnToolTips::OnTtnTooltipPop(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	AfxGetMainWnd()->SendMessage(WM_SETMESSAGESTRING,NULL,reinterpret_cast<LPARAM>(static_cast<LPCSTR>("")));
    }
    void COwnToolTips::SendPointerWnd(CWnd *wnd)
    {
    	m_wnd = wnd;
    }
    


  • Ich habe im Prinzip den gleichen Code aber bei mir geht es nicht.
    Ich müsste wohl noch das machen, was Martin zuletzt geschrieben hat, aber
    1.) Weiß ich nicht, woher eine Nachricht kommt, wenn ich im Handler bin (das Problem habe ich beim Debuggen allgemein noch nicht gelöst)
    2.) Funktioniert die andere Lösung mit der Zeigerübergabe und daher werde ich es wohl so lassen. Über eine Woche rumpuzzlen reicht mir langsam... 🙄


  • Mod

    Der Callstack gibt Aufschluss woher die Nachricht gesendet wird. Die nachricht wird per SendMessage gesendet, Der Callstack müsste also den Aufrufer zeigen. Evtl. solltest Du die neuesten Debug Dateien für Dein OS herunterladen oder einen Symbolserver installieren, wenn der Callstack unvollständig ist.


Anmelden zum Antworten