Text auf Desktop schreiben



  • Konnte es selber finden 😉

    Lösung:

    pWnd = CWnd::GetDesktopWindow();
    


  • soweit so gut, das ganze funktioniert ABER:

    1. Der Text bleibt nicht stehen! (wenn man ein Fenster darüber schiebt und dann wieder minimiert ist er wieder weg).

    2. Es dauert eine Zeitlang bis der Text am Desktop steht.

    3. Wie oben schon erwähnt, wird der Text auch über offene Fenster geschrieben (wenn eines offen ist)

    Jemand eine Idee wie man die 3 Probleme lösen könnte?

    Danke
    lg
    Mike



  • trequ schrieb:

    Danke! Das funktioniert schon mal wunderbar. Sogar die Farbe kann ich setzen.
    Irgend eine Idee, wie man die Textfarbe abhängig von der Hintergrundfarbe macht?
    Hintergrund = Weiß -> Text = Schwarz
    Hintergrund = Schwarz -> Text = Weiß
    usw...?

    Ich würde spontan sagen, du musst eine inverse Brush für die Textfüllung setzen. Schau mal in die MSDN.



  • SunB schrieb:

    1. Der Text bleibt nicht stehen! (wenn man ein Fenster darüber schiebt und dann wieder minimiert ist er wieder weg).

    Das liegt daran, dass du den Text immer wieder neu Zeichnen musst...
    Such mal im Board nach Hinweisen.

    SunB schrieb:

    2. Es dauert eine Zeitlang bis der Text am Desktop steht.

    Hmm, hab den Code getestet und bei mir geht es blitzschnell...

    Gruß
    :: NoName ::



  • ad 1. ich werd noch mal suchen ,) (irgendwelche hinweise nach was ich genau suche *ggg* ?)

    ad 2.
    Ich hab eine Konsolenanwendung mit MFC, es dauert ein wenig bis der Text erscheint, keine Ahnung an was das genau liegt.

    thx 4 answer 😉
    Mike



  • Zu 1: Hmm, da du ja eine Konsolenanwendung benutzt, wird es ein wenig
    schwieriger alles immer neu zu zeichnen. Mit neu zeichnen meine ich das
    du den Code, zum schreiben auf dem Desktop, zum Bsp.: jede Sekunde
    aufrufst, damit der Text immer wieder neu geschrieben wird...

    Gruß
    :: NoName ::



  • Hallo,

    ich will im Prinzip nur eine Nachricht auf den Desktop schreiben, wie es z.B. die Logitech Software macht, wenn man auf einen Sonder-Knopf der Tastatur drückt.

    Wie ich den Text transparent auf den Desktop kriege, habe ich bereits rausgefunden.
    Wie ich die Schriftfarbe setze auch.

    Aber wie kriege ich nach x Sekunden den Text wieder weg?
    Mit Leerzeichen überschreiben funktioniert nicht...

    Danke für die Info.

    mfg
    trequ



  • trequ schrieb:

    Aber wie kriege ich nach x Sekunden den Text wieder weg?

    Vielleicht könntest du einfach mit UpdateWindow() oder Invalidate() etc. Das window wo der Text ist aktualisieren. Dann verschwindet der Text, da er ja nicht neu gezeichnet wird...

    Gruß
    :: NoName ::



  • ok, das neu schreiben ist mir klar, kann man ja zum Test in einer Schleife machen. Leider steht der Text dann immer am aktuellen Fenster und nicht direkt auf dem Desktop (hintergrund).
    (jemand dafür noch eine IDee?)

    danke
    lg
    Mike



  • SunB schrieb:

    ok, das neu schreiben ist mir klar, kann man ja zum Test in einer Schleife machen

    In eine Schleife würde ich das nicht machen, es wäre möglich das der Text anfängt zu 'flimmern' ...

    Gruß
    :: NoName ::



  • wenn nicht in einer Schleife, wie dann? (sorry bin anfänger)



  • Hmm, evtl: so

    Du schreibst dir eine eigene Funktion

    int WriteText()
    {
    CWnd *pWnd;   // Zeiger auf ein CWnd Objekt 
    CRect rec;    // CRect objekt 
    pWnd = CWnd::GetDesktopWindow();   // ich hole mir das Dektopfenster 
    pWnd->GetWindowRect(rec);  // hole mir die Aktuelle Auflösung 
    CDC pDC;  // Gerätekontext 
    pDC.m_hDC = ::GetDC(NULL);  // API Aufruf mit dem ich mir das 
                                // Desktop Handle hole. 
    pDC.TextOut(rec.Height()/2,rec.Width()/2,"hallo Chris"); 
      // und schließlich schreibe ich den Text mit dem Dc  
    	return WriteText(); 
    }
    

    Und später natürlich aufrufen

    Gruß
    :: NoName ::



  • Verstehe ich das richtig, dass druch das return WriteText() sich die funktion immer wieder selbst aufruft? und somit im Prinzip durchgehend läuft?

    Mike



  • SunB schrieb:

    Verstehe ich das richtig, dass druch das return WriteText() sich die funktion immer wieder selbst aufruft? und somit im Prinzip durchgehend läuft?

    Ja ...

    Gruß
    :: NoName ::



  • :: NoName :: schrieb:

    SunB schrieb:

    Verstehe ich das richtig, dass druch das return WriteText() sich die funktion immer wieder selbst aufruft? und somit im Prinzip durchgehend läuft?

    Ja ...

    Gruß
    :: NoName ::

    Danke 😉
    lg
    Mike



  • sollte es nicht

    pDC.m_hDC = ::GetDC(pWnd->m_hWnd);

    anstatt pDC.m_hDC = ::GetDC(NULL); heißen?

    mit NULL kriegt man doch keinen Handle zurück oder versteh ich da was falsch?

    lg
    Mike



  • If this value is NULL, GetDC retrieves the DC for the entire screen.



  • achja ... da sollte man das brett vorm Kopf wegnehmen *ggg*

    DAnke 😉

    Was ich aber noch immer nicht hingekriegt habe, ist das der Text nur auf dem Desktop ist aber unter allen Fenstern.

    Jmd. ne Idee?

    DAnke

    lg
    Mike


Anmelden zum Antworten