CStatic Text ändern



  • Hi Leute!
    Ich habe eine Dialogresource mit dem Dialogeditor entworfen. Dort habe ich auch schon Statische Textfelder platziert (CStatic).
    Ich will bevor der Dialog dargestellt wird die CStatics mit den Texten versorgen.
    Wie kann ich das machen?
    Und wie kann ich denn die Schriftgröße einstellen?



  • freakSkater schrieb:

    Wie kann ich das machen?

    Einfach mit :

    SetDlgItemText(ID_DEIBES_STATICS, "Hier der Text...!");
    

    freakSkater schrieb:

    Und wie kann ich denn die Schriftgröße einstellen?

    Das geht mit LOGFONT :

    LOGFONT lf; 
      memset(&lf, 0, sizeof(LOGFONT)); 
      strcpy(lf.lfFaceName, "Arial");   //Schriftart
      lf.lfWeight = FW_HEAVY; 
      lf.lfUnderline = TRUE; 
      lf.lfHeight = 40;    //SCHRIFTGRÖßE
    
      font.CreateFontIndirect(&lf); 
    
      GetDlgItem(IDC_STATIC_DEIN_STEURELEMENT)->SetFont(&font);
    

    Vorher musst du jedoch noch eine CFont-Variable in der Header Datei deklarieren !

    Gruß
    :: NoName ::



  • Danke für die schnelle Hilfe.

    Tschuldigung nochmal wegen dem Treifachpost!



  • ich hatte die gleiche frage wie freakSkater und habe es nun genau so gemacht wie es NoName beschrieben hat, der Code lässt sich auch problemlos compilieren, jedoch bekomme ich nun beim ausführen folgende fehlermeldung:

    ---------------------------
    Microsoft Visual C++ Debug Library
    ---------------------------
    Debug Assertion Failed!

    Program: D:\Database\WinDebug\Database.exe
    File: winocc.cpp
    Line: 76

    For information on how your program can cause an assertion
    failure, see the Visual C++ documentation on asserts.

    (Press Retry to debug the application)

    mein code:

    CFont font;
    	LOGFONT lf; 
    	memset(&lf, 0, sizeof(LOGFONT)); 
    	strcpy(lf.lfFaceName, "Arial");   
    	lf.lfWeight = FW_HEAVY; 
    	lf.lfUnderline = false; 
    	lf.lfHeight = 40;    
    
    	font.CreateFontIndirect(&lf); 
    
    	GetDlgItem(IDC_SUT4)->SetFont(&font);
    

    Kann mir einer sagen was ich falsch mache ?????? danke !



  • Die Fehlermeldung kommt, weil dein Fenster (das Static) ungültig ist. Also entweder ist IDC_SUT4 falsch/ungültig oder du hast den Code an einer Stelle stehen, wo das Fenster noch nicht erzeugt wurde.
    Der Code da oben funktioniert übrigens ohne Fehler.



  • yeah, danke isabeau 👍

    wie du vermutet hast, lag es daran, dass der code einer stelle stand wo das fenster noch nicht erzeugt wurde



  • Mmhh... bei mir funzt das auch nicht... aber es ist wesentlich einfacher:

    Dialog --> Static Text erstellt (IDC_MYSTATIC) --> Button daneben --> Ereignishandler erstellt:

    void CMyAppDlg::OnButtonClicked()
    {
        GetDlgItem(IDC_MYSTATIC)->SetDlgItemText(IDC_MYSTATIC, "Hallo");
    }
    

    Passiert aber nix, wenn ich den Knopf drücke... 😕



  • Lass mal das GetDlgItem(IDC_MYSTATIC)-> weg.



  • Hi,

    versuchs doch mal so:

    SetDlgItemText(IDC_MYSTATIC, "Hallo");
    

    Siehst Due den unterschied?!?!

    Gruss

    yeti



  • Ja, Du hast Recht, jetzt gehts...woran liegt das? Verbiegt der den Zeiger, wenn ich ihn mir mit GetDlgItem() hole?



  • Hi,

    also wenn ich die MSDN richtig verstehe, ist es folgendermassen: Mit

    GetDlgItem(IDC_MYSTATIC)
    

    holst Du dir ein handle auf das "child-window" - das ist in Deinem Fall bereits das Static-Control. Und wenn Du dann wie in Deinem Beispiel darin ein

    SetDlgItemText(IDC_MYSTATIC, "Hallo");
    

    machen willst, dann versuchst Du, auf ein Static-Control im Static-Control zuzugreifen, was in diesem Fall natürlich nicht klappt. - Hoffe ich habe es einigermassen verständlich erklärt...

    Gruss

    yeti



  • Ja, hast Du.... 🙂
    Ich sehe das immer nicht so genau. Weil mir ein "Pointerholen bevor rumwurschteln" immer sinnvoll erscheint. Ist aber nicht so. Asche auf mein Haupt.


Anmelden zum Antworten