OVH Cloud OVH Cloud

Transmettre un évènement souris à la fenêtre suivante...

6 réponses
Avatar
Sébastien FERRAND
Une question surement toute bête mais je sèche dessus depuis trop longtemps :(

Ma fenêtre étant toujours au premier plan et pseudo-transparente, j'aimerais
que lorsque je clique dessus, que l'évènement soit directement traiter par la
fenêtre du dessous.

Je recupère bien la bonne fenêtre avec l'API GetWindow, mais je n'arrive pas
à lui passer le message.

Merci de votre aide.
Séb

6 réponses

Avatar
LEBRUN Thomas
Dans l'evenement Click de ta form au premier plan, met:

taForm2.Click += new EventHandler(Click_Form2);

Ensuite, tu créé une méthode Click_Form2 et tu met dedans le code que tu
veux executer lorsque l'on "clicquera" sur la 2ème form :)

A+

-------------------
LEBRUN Thomas
http://morpheus.developpez.com
http://blog.developpez.com/index.php?blog=9

"Sébastien FERRAND" a écrit :

Une question surement toute bête mais je sèche dessus depuis trop longtemps :(

Ma fenêtre étant toujours au premier plan et pseudo-transparente, j'aimerais
que lorsque je clique dessus, que l'évènement soit directement traiter par la
fenêtre du dessous.

Je recupère bien la bonne fenêtre avec l'API GetWindow, mais je n'arrive pas
à lui passer le message.

Merci de votre aide.
Séb





Avatar
Lloyd Dupont
tu vas sur MSND (ou la doc de VS.NET, plus rapide si tu l'as et tu regarde
les methodes win32 suivantes pour gerer les messages)

PeekMessage
GetMessage
SendMessage
PostMessage



"Sébastien FERRAND" <Sébastien wrote in
message news:
Une question surement toute bête mais je sèche dessus depuis trop
longtemps :(

Ma fenêtre étant toujours au premier plan et pseudo-transparente,
j'aimerais
que lorsque je clique dessus, que l'évènement soit directement traiter par
la
fenêtre du dessous.

Je recupère bien la bonne fenêtre avec l'API GetWindow, mais je n'arrive
pas
à lui passer le message.

Merci de votre aide.
Séb





Avatar
LEBRUN Thomas
Voici un exemple de ce que je voulais dire, dans le cas où cela ne serait
pas clair:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace WindowsApplication3
{
/// <summary>
/// Description résumée de Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// Variable nécessaire au concepteur.
/// </summary>
private System.ComponentModel.Container components = null;

private Form2 frm2 = new Form2();

public Form1()
{
//
// Requis pour la prise en charge du Concepteur Windows Forms
//
InitializeComponent();

//
// TODO : ajoutez le code du constructeur après l'appel à
InitializeComponent
//
}

/// <summary>
/// Nettoyage des ressources utilisées.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Code généré par le Concepteur Windows Form
/// <summary>
/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
/// le contenu de cette méthode avec l'éditeur de code.
/// </summary>
private void InitializeComponent()
{
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Name = "Form1";
this.Text = "Form1";
this.TopMost = true;
this.Click += new System.EventHandler(this.Click_Frm1);
this.Load += new System.EventHandler(this.Form1_Load);

}
#endregion

/// <summary>
/// Point d'entrée principal de l'application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void Click_Frm1(object sender, System.EventArgs e)
{
this.Click +=new EventHandler(frm2_Click);
}

private void frm2_Click(object sender, EventArgs e)
{
frm2.textBox1.Text = "toto";
}

private void Form1_Load(object sender, System.EventArgs e)
{
frm2.Show();
}
}
}

Je viens de le tester avec succès.

Seul "inconvénient" : les controles de ta form2 doivent être en public....

A+

-------------------
LEBRUN Thomas
http://morpheus.developpez.com
http://blog.developpez.com/index.php?blog=9

"LEBRUN Thomas" a écrit :

Dans l'evenement Click de ta form au premier plan, met:

taForm2.Click += new EventHandler(Click_Form2);

Ensuite, tu créé une méthode Click_Form2 et tu met dedans le code que tu
veux executer lorsque l'on "clicquera" sur la 2ème form :)

A+

-------------------
LEBRUN Thomas
http://morpheus.developpez.com
http://blog.developpez.com/index.php?blog=9

"Sébastien FERRAND" a écrit :

> Une question surement toute bête mais je sèche dessus depuis trop longtemps :(
>
> Ma fenêtre étant toujours au premier plan et pseudo-transparente, j'aimerais
> que lorsque je clique dessus, que l'évènement soit directement traiter par la
> fenêtre du dessous.
>
> Je recupère bien la bonne fenêtre avec l'API GetWindow, mais je n'arrive pas
> à lui passer le message.
>
> Merci de votre aide.
> Séb
>
>
>


Avatar
Sébastien FERRAND
je crois que je me suis mal exprimé...

je ne maitrise pas la fenêtre du dessous. Ca peut être n'importe quelle
fenêtre de l'os.

Le but est de créer une applet qui sera tout le temps au premier et
affichera des informations sur le système.

Je veux pouvoir cliquer au travers sans avoir à la déplacer...

Vous me suivez ?

Merci
Séb





"Sébastien FERRAND" wrote:

Une question surement toute bête mais je sèche dessus depuis trop longtemps :(

Ma fenêtre étant toujours au premier plan et pseudo-transparente, j'aimerais
que lorsque je clique dessus, que l'évènement soit directement traiter par la
fenêtre du dessous.

Je recupère bien la bonne fenêtre avec l'API GetWindow, mais je n'arrive pas
à lui passer le message.

Merci de votre aide.
Séb





Avatar
Lloyd Dupont
bon, je repete:

tu vas sur MSND (ou la doc de VS.NET, plus rapide si tu l'as et tu regarde
les methodes win32 suivantes pour gerer les messages)

PeekMessage
GetMessage
SendMessage
PostMessage


comme c'est des fonction win32 il va falloir faire un peu d'interop...

"Sébastien FERRAND" wrote in message
news:
je crois que je me suis mal exprimé...

je ne maitrise pas la fenêtre du dessous. Ca peut être n'importe quelle
fenêtre de l'os.

Le but est de créer une applet qui sera tout le temps au premier et
affichera des informations sur le système.

Je veux pouvoir cliquer au travers sans avoir à la déplacer...

Vous me suivez ?

Merci
Séb





"Sébastien FERRAND" wrote:

Une question surement toute bête mais je sèche dessus depuis trop
longtemps :(

Ma fenêtre étant toujours au premier plan et pseudo-transparente,
j'aimerais
que lorsque je clique dessus, que l'évènement soit directement traiter
par la
fenêtre du dessous.

Je recupère bien la bonne fenêtre avec l'API GetWindow, mais je n'arrive
pas
à lui passer le message.

Merci de votre aide.
Séb







Avatar
Sébastien FERRAND
nan c'est bon j'ai trouvé.
Il suffit tout simplement de rendre la fenêtre transparente.

Pour cela, il faut faire une surcharge de la propriété CreateParams :
Protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
//WS_EX_TOOLWINDOW 0x00000080
//WS_EX_TRANSPARENT = 0x0000020
//WS_EX_LAYERED = 0x00080000
cp.ExStyle |= 0x00080020;
return cp;
}
}

Séb

"Lloyd Dupont" a écrit :

bon, je repete:

tu vas sur MSND (ou la doc de VS.NET, plus rapide si tu l'as et tu regarde
les methodes win32 suivantes pour gerer les messages)

PeekMessage
GetMessage
SendMessage
PostMessage


comme c'est des fonction win32 il va falloir faire un peu d'interop...

"Sébastien FERRAND" wrote in message
news:
> je crois que je me suis mal exprimé...
>
> je ne maitrise pas la fenêtre du dessous. Ca peut être n'importe quelle
> fenêtre de l'os.
>
> Le but est de créer une applet qui sera tout le temps au premier et
> affichera des informations sur le système.
>
> Je veux pouvoir cliquer au travers sans avoir à la déplacer...
>
> Vous me suivez ?
>
> Merci
> Séb
>
>
>
>
>
> "Sébastien FERRAND" wrote:
>
>> Une question surement toute bête mais je sèche dessus depuis trop
>> longtemps :(
>>
>> Ma fenêtre étant toujours au premier plan et pseudo-transparente,
>> j'aimerais
>> que lorsque je clique dessus, que l'évènement soit directement traiter
>> par la
>> fenêtre du dessous.
>>
>> Je recupère bien la bonne fenêtre avec l'API GetWindow, mais je n'arrive
>> pas
>> à lui passer le message.
>>
>> Merci de votre aide.
>> Séb
>>
>>
>>