Autor Beitrag
Net_Hans
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Mo 01.03.10 23:11 
Hallo,

wie kann ich Informationen auf dem Desktop einblenden lassen, so das es aussieht, als wenn es auf dem Hintergrundbild geschrieben ist?
Ein Beispiel könnte man in diesem Beitrag sehen:
www.c-sharp-forum.de/viewtopic.php?t=98120

Meine erste Idee war es eine From zu nehmen, diese Transparent zu machen und dann dort die Infos ein zu blenden ... aber ich bin daran gescheitet den Rahmen etc von der Form auszublenden.

Um die Form auf dem Desktop anzudocken hatte ich versucht diesen Code zu verwenden ... das hatte auch so im ansatz geklappt

dotnet-snippets.de/d...andocken-SID673.aspx
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Tools{
    class Docking {
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr
        FindWindow([MarshalAs(UnmanagedType.LPTStr)] string lpClassName,
        [MarshalAs(UnmanagedType.LPTStr)] string lpWindowName);

        [DllImport("user32.dll")]
        public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

        /// <summary>
        /// Einzelnes Form auf den Desktop Festkleben
        /// </summary>
        /// <param name="formToDock">Formular, dass an den Desktop gedockt werden soll</param>
        public void StartDocking(Form formToDock) {
            IntPtr hwndParent = FindWindow("progman"null);
            SetParent(formToDock.Handle, hwndParent);
        }
        /// <summary>
        /// Einzelnes Formular vom Desktop wieder lösen und normal anzeigen lassen
        /// </summary>
        /// <param name="formToUndock">Formular das wieder normal angezeigt werden soll</param>
        public void StopDocking(Form formToUndock) {
            IntPtr hwndParent = FindWindow("screenclass"null);
            SetParent(formToUndock.Handle, hwndParent);
        }
    }
}


Mir ist wichtig, das die Infos wirklich hinter den Icons auf dem Desktop liegen, so das kein Fenster davon beeinträchtigt werden. Solche Geschichten wie [Windows]-[D] oder [Tab]-[Alt] sollten bei dem Tool auch nicht ansprechen.

Kann mir eventuell jemand einen Tipp geben, wie man eine solche Anwendung richtig programmiert?

mfG Hans
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Di 02.03.10 01:35 
Du kannst auch auf dem Desktopp rummalen. Dafür brauchst du das:
ausblenden C#-Quelltext
1:
2:
[DllImport("user32.dll")]
public static extern IntPtr GetDC(long hwnd);


und dann sowas hier im Construktor:
ausblenden C#-Quelltext
1:
2:
3:
4:
using(Graphics g = Graphics.FromHdc(GetDC(0)))
{
    g.DrawString("Hallo Welt"new Font("Times"40), Brushes.AliceBlue, new Point(200200));
}


Weiß aber nicht, ob das dahinter ist.
Du kannst auch das Desktopbild auslesen (Tip: Pfad ist in der Registry) und dann das bearbeiten und wieder zuweisen:

ausblenden C#-Quelltext
1:
2:
3:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int SystemParametersInfo(
        int Action, int pP, string lpv, int WinIni);


und dann

ausblenden C#-Quelltext
1:
SystemParametersInfo(200, <Pfad>, 1 | 2)					


Jop, hoffe, das hilft...
Net_Hans Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Di 02.03.10 09:30 
Danke für den Tip,

aber leider ist das noch nicht ganz das was ich haben möchte. Bei der Variante wo ich auf den Desktop malen kann, würde ich auch die Icons auf dem Desktop übermalen. Das soll ja nicht sein.

In der zweiten Idee, mit dem Hintergrundbild bekomm ich immer wenn ich das Bild aktuallisiere ein Flackern auf dem Monitor und eine Sanduhr am Mauszeiger mit und das kann auf Dauer sicher doch nerven ...

Wie bringe ich die Schrift oder ähnliches, wenn ich direkt auf den Desktop zeiche hinter die Icons?

mfG Hans
Ccenter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 154

Win7
C#
BeitragVerfasst: Sa 20.03.10 22:05 
Ich hätte das jetzt so gemacht:
Hintergrund der Form weiß machen. Dann den Transperancykey ebenfalls auf weiß stellen.
Vorher natürlich noch den Formborderstye auf none setzten. Das hat den positiven nebeneffekt, dass die Form dadurch auch nicht mehr verschoben werden kann und dann immer an der Position bleibt, wo sie hingehört. Du solltest aber noch einen Code mit reinbringen, der festlegt, dass die Form immer an der selben Position startet. Dann am besten irgendwo auf die Form ein kleines label raufsetzten, welches durchs Clickevent ausgelöst wird und dem Benutzer dann erlaubt, die Startposition selbst zu bestimmen.