Bonjour à tous,

J'ai besoin de permettre à l'utilisateur de mon application, d'avoir un aperçu avant impression et d'imprimer un certain formulaire qui a une grande hauteur. C'est à dire que le formulaire "sort de l'écran par le bas" et qu'on a besoin d'utiliser ses barres de défilement pour pouvoir apercevoir le bas du form.

En cherchant sur les forums, je trouve des bouts de code permettant l'impression d'un formulaire mais par le biais d'une capture d'écran. Or, mon form n'étant pas visible entièrement, une partie manque à l'impression (et à l'aperçu).

Y a-t-il une façon d'imprimer un formulaire sans passer par une capture d'écran ?

Voici les deux fonctions que j'ai pu trouver mais qui permettent le même résultat (impression non totale).
Première fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
 
        public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest,  int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
 
        private Bitmap memoryImage;
 
        public void CaptureScreen()
        {
            Size s = this.Size;
            memoryImage = new Bitmap(s.Width, s.Height);
            this.DrawToBitmap(memoryImage, new Rectangle(0, 0, s.Width, s.Height));
        }
Deuxième code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
 
        public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
 
        private Bitmap memoryImage;
 
        public void CaptureScreen()
        {
            Graphics mygraphics = this.CreateGraphics();
            Size s = this.Size;
            memoryImage = new Bitmap(s.Width, s.Height, mygraphics);
            Graphics memoryGraphics = Graphics.FromImage(memoryImage);
            IntPtr dc1 = mygraphics.GetHdc();
            IntPtr dc2 = memoryGraphics.GetHdc();
            BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376);
            mygraphics.ReleaseHdc(dc1);
            memoryGraphics.ReleaseHdc(dc2);
        }
Quelqu'un a-t-il une idée ?

Si l'impression passe forcément par la capture d'écran, y a-t-il un moyen de confondre les barres de défilement de mon form (qui est une fenêtre MDI) aux barres de défilement de sa fenêtre mère, pour permettre de cette manière de visualiser la totalité de mon form à partir des barres de défilement de la fenêtre mère ? Je pense que de cette façon la capture d'écran le verrait entièrement.

Merci pour toute aide !