cs_yoannd
Messages postés305Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 août 2011
-
31 janv. 2006 à 14:37
cs_yoannd
Messages postés305Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 août 2011
-
1 févr. 2006 à 11:21
Salut,
Je souhaite enregistrer le rendu produit par un composant ergonomique (dans mon cas un WebBrowser) dans un fichier bmp... Quelqu'un saurait comment effectuer ce type d'opération ?
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 31 janv. 2006 à 19:53
Salut,
En fait je ne suis pas trop d'accord pour la méthode BitBlt pour remplacer PrintWindow : cette méthode va "dumper" tout ce qui est visible dans le rectangle.
Placez donc une fenêtre en "Always On Top" (la plus facile à trouver : le gestionnaire des tâches de win) au dessus du form avant de cliquer sur le bouton et vous comprendrez ce que je veux dire :-)
Pour remplacer PrintWindow, je pense qu'il vaut mieux utiliser la notification WM_PRINT. (il faut naturellement que les contrôles qui vont être ciblés gèrent ce message, en général c'est le cas).
Ca donne quelquechose de ce genre (à adapter et améliorer) :
private const int WM_PRINT = 0x0317;
private const int PRF_CHECKVISIBLE = 0x00000001;
private const int PRF_NONCLIENT = 0x00000002;
private const int PRF_CLIENT = 0x00000004;
private const int PRF_ERASEBKGND = 0x00000008;
private const int PRF_CHILDREN = 0x00000010;
private const int PRF_OWNED = 0x00000020;
public Bitmap PrintWindowEx()
{
Bitmap bmp = null;
Graphics gr = null;
IntPtr hdc = IntPtr.Zero;
try
{
bmp = new Bitmap(
this.ClientRectangle.Width,
this.ClientRectangle.Height,
this.CreateGraphics()
);
gr = Graphics.FromImage(bmp);
hdc = gr.GetHdc();