2009-04-07 5 views
0

Je veux placer une vignette en C#, mais il semble que le framework .Net ne la supporte pas. J'ai donc utilisé la fonction Win32 TileWindows. Voici le code:Impossible d'utiliser la fonction TileWindows correctement

  GCHandle gcHandle = GCHandle.Alloc(handles, GCHandleType.Pinned); 
      IntPtr arrayHandle = gcHandle.AddrOfPinnedObject(); 
      TileWindows(IntPtr.Zero, 
         (uint)(Tile.Vertical | Tile.SkipDisabled), 
         IntPtr.Zero, 
         (uint)handles.Length, ref arrayHandle); 
      gcHandle.Free(); 

poignées est le tableau des poignées winforms et Tile est juste une énumération de uints. Le problème est qu'après avoir appelé cette fonction toutes les fenêtres ouvertes sur mon dekstop sont affectées au lieu des poignées de tableau passées. Aucune suggestion?

Répondre

0

Qu'est-ce que handles? Je suppose que c'est un tableau de poignées de fenêtre

Comment est défini TileWindows (signature)?

J'ai essayé votre code, et cela a fonctionné après avoir enlevé le mot-clé ref du dernier paramètre.

 GCHandle gcHandle = GCHandle.Alloc(handles, GCHandleType.Pinned); 
     IntPtr arrayHandle = gcHandle.AddrOfPinnedObject(); 
     TileWindows(IntPtr.Zero, 
        (uint)(Tile.Vertical | Tile.SkipDisabled), 
        IntPtr.Zero, 
        (uint)handles.Length, arrayHandle); 
     gcHandle.Free(); 

avec la signature de la fonction:

 [DllImport("user32.dll")] 
    static extern ushort TileWindows(IntPtr hwndParent, uint wHow, IntPtr lpRect, 
     uint cKids, IntPtr lpKids); 
+0

mmm .. Je ne l'ai pas essayé. – jfs

Questions connexes