none
CMFCRibbonStatusBar und WM_SETMESSAGESTRING RRS feed

  • Frage

  • Hallo NG,

    wir haben in unseren MFC Apps die Statusbar auf CMFCRibbonStatusBar umgestellt.
    Wir gerne weiterhin den "ungenutzen" Bereich der Statusbar für Texte wir AFX_IDS_IDLEMESSAGE  ("Bereit") oder ähnliches nutzen.
    Jetzt habe ich mir mal die Funktionen CFrameWnd::SetMessageText angesehen. Über einen Messagehandler landen wir in CFrameWnd::OnSetMessageString.

    Hier wird über CFrameWnd::GetMessageBar() die StatusBar geholt, welche auch unsere CMFCRibbonStatusBar ist.
    Durch pMessageBar->SetWindowText() wird nun der Text zu gewiesen.

    Da weder SetMessageText noch SetWindowText() virtuell sind, weiss ich nicht, wie ich gegenwärtig über Standardmechanismen
    den Text eines Label innerhalb meiner CMFCRibbonStatusBar setzen kann.

    Ich habe auch schon einen MessageHandler für WM_SETMESSAGESTRING in meiner CFrameWnd Ableitung eingebaut.
    Ich lande aber oftmals doch wieder in der Basisimplementierung von CFrameWnd.

    Kann mir da jemand weiterhelfen ?

    Gruß

    Markus

    Montag, 30. Januar 2012 14:11

Antworten

Alle Antworten

  • Hast Du auch einen Eintrag in der Message Map gemacht.
    Das sollte eigentlich gehen.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Montag, 30. Januar 2012 14:32
    Moderator
  • Hatte ich.

    Habe jetzt allerdings nochmal einen kompletten Rebuild gemacht und dann gings.

    Gruß
    Markus

    Dienstag, 31. Januar 2012 06:10
  • Nochmal eine kurze Rückfrage.

    Gibt es eine MFC Funktion die automatisch die Ampersands aus dem String entfernt ?

    Das passiert jetzt bei dem CMFCRibbonLabel::SetText nicht automatisch.

    Mittwoch, 8. Februar 2012 11:42
  • Gibt es eine MFC Funktion die automatisch die Ampersands aus dem String entfernt ?
    Das passiert jetzt bei dem CMFCRibbonLabel::SetText nicht automatisch.

    strText.Replace(_T("&"),_T(""));

    Wenn Du doppelte Ampersands zu in einfachen tauschen willst musst Du IMHO mehr Aufwand treiben.

    strText.Replace(_T("&"),_T("&&"));
    strText.Replace(_T("&&&&"),_T("&"));
    strText.Replace(_T("&&"),_T(""));

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Donnerstag, 9. Februar 2012 07:09
    Moderator
  • OK Danke.

    Ich hatte vermutet ist gibt da einen Style oder eine "built-in" Funktion.

    Eine ähnliche Lösung hatte ich mir auch eingebaut.

    Danke.

    Donnerstag, 9. Februar 2012 07:45
  • Die MFC filtert die Ampersands eigentlich nur bei Bedarf aus. Siehe afxribbonbutton.cpp


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Donnerstag, 9. Februar 2012 07:57
    Moderator