OVH Cloud OVH Cloud

DrawFrameControl

20 réponses
Avatar
Bonjour,

Auriez vous un exemple d'utilisation de cette fonction ? (j'utilise delphi)

msdn :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/pantdra
w_18ds.asp

mon essai :

var
tagPAINTSTRUCT : Record
hdc : THandle;
fErase : Boolean;
rcPaint : TRect;
fRestore : Boolean;
fIncUpdate : Boolean;
rgbReserved[32] : Byte;
End;
begin { Essai }

BeginPaint(Cnv.Handle, tagPAINTSTRUCT);
DrawFrameControl(Cnv.Handle, SaisieTrait1.ReadRect, DFC_BUTTON,
DFCS_BUTTON3STATE);
// HDC hdc, // handle to device context
// LPRECT lprc, // pointer to bounding rectangle
// UINT uType, // frame-control type
// UINT uState // frame-control state
EndPaint(Cnv.Handle, tagPAINTSTRUCT);

end;

10 réponses

1 2
Avatar
Aurélien REGAT-BARREL
> > Tiens, j'y pense. J'ai jamais essayé de subclasser le fenêtre du


bureau...

Vous n'auriez pas un cas d'utilisation ?



Non. c'était juste une idée comme ça. Un coup de SetWindowLong(
GetDesktopWindow() ) et on devrait vitre être fixé.

--
Aurélien REGAT-BARREL
Avatar
En fait, je veux dessiner sur le bureau, voir redessiner une partie du
bureau.


"Aurélien REGAT-BARREL" a écrit dans le
message de news: 41b43297$0$10044$
> Ben si je dessine sur la fenêtre, je dessine pas sur le bureau.

Quelque part, en dessinant sur une fenêtre (au fond transparent etc...)


qui
est sur le bureau, on dessine sur le bureau.

> Ce qui pose pas mal de problème pour la mise en premier plan.

Le bureau est en dernier plan non ? Le style TOPMOST sur la fenêtre


devrait
corriger le problème.

> Je vais voir du coté des hooks si je peux pas raffraichir ma fenêtre.
> Mais je pensais qu'il existait un évènement de bureau type WM_Paint
> que l'on pouvait utiliser pour redessiner.

Oui, évènement destiné au bureau. Tu ne le reçois pas au même titre que tu
ne reçois pas le WM_PAINT des autres fenêtres.

Que veux-tu faire ? Dessiner directement sur l'écran ou sur le bureau ?

--
Aurélien REGAT-BARREL




Avatar
J'ai déjà le handle du desktop actif.
Mais je sais pas comment m'abonner à wm_paint de celui ci


"Aurélien REGAT-BARREL" a écrit dans le
message de news: 41b43371$0$10010$
> > Tiens, j'y pense. J'ai jamais essayé de subclasser le fenêtre du
bureau...

> Vous n'auriez pas un cas d'utilisation ?

Non. c'était juste une idée comme ça. Un coup de SetWindowLong(
GetDesktopWindow() ) et on devrait vitre être fixé.

--
Aurélien REGAT-BARREL




Avatar
J'ai fait un test de ce type :

var
uMSG : tagMSG;
tlog : string;
begin

While getmessage(uMSG, Cnv.Handle, WM_PAINT, WM_PAINT) Do
Begin
tlog:= tlog+ '0';
If Length(tlog) > 100 Then
Begin
Showmessage(tlog);
Exit;
End;
End;


ça me permet de tester périodiquement, ici le plus vite possible jusqu'à 100
itérations
si le message wm_paint est passé au handle sélectionné.
Je suis sûr, qu'il y a moyen de faire plus popre.

Merci de vos suggestions.


"Aurélien REGAT-BARREL" a écrit dans le
message de news: 41b43297$0$10044$
> Ben si je dessine sur la fenêtre, je dessine pas sur le bureau.

Quelque part, en dessinant sur une fenêtre (au fond transparent etc...)


qui
est sur le bureau, on dessine sur le bureau.

> Ce qui pose pas mal de problème pour la mise en premier plan.

Le bureau est en dernier plan non ? Le style TOPMOST sur la fenêtre


devrait
corriger le problème.

> Je vais voir du coté des hooks si je peux pas raffraichir ma fenêtre.
> Mais je pensais qu'il existait un évènement de bureau type WM_Paint
> que l'on pouvait utiliser pour redessiner.

Oui, évènement destiné au bureau. Tu ne le reçois pas au même titre que tu
ne reçois pas le WM_PAINT des autres fenêtres.

Que veux-tu faire ? Dessiner directement sur l'écran ou sur le bureau ?

--
Aurélien REGAT-BARREL




Avatar
J'ai fait un test de ce type :

var
uMSG : tagMSG;
tlog : string;
begin

While getmessage(uMSG, Cnv.Handle, WM_PAINT, WM_PAINT) Do
Begin
tlog:= tlog+ '0';
If Length(tlog) > 100 Then
Begin
Showmessage(tlog);
Exit;
End;
End;


ça me permet de tester périodiquement, ici le plus vite possible jusqu'à 100
itérations
si le message wm_paint est passé au handle sélectionné.
Je suis sûr, qu'il y a moyen de faire plus popre.

Merci de vos suggestions.


"Aurélien REGAT-BARREL" a écrit dans le
message de news: 41b43371$0$10010$
> > Tiens, j'y pense. J'ai jamais essayé de subclasser le fenêtre du
bureau...

> Vous n'auriez pas un cas d'utilisation ?

Non. c'était juste une idée comme ça. Un coup de SetWindowLong(
GetDesktopWindow() ) et on devrait vitre être fixé.

--
Aurélien REGAT-BARREL




Avatar
Aurélien REGAT-BARREL
> En fait, je veux dessiner sur le bureau, voir redessiner une partie du
bureau.



Il serait peut être bon alors de regarder du côté de Active Desktop
(IActiveDesktop).

--
Aurélien REGAT-BARREL
Avatar
Je vais chercher des docs sur ce sujet sur le net


"Aurélien REGAT-BARREL" a écrit dans le
message de news: 41b45fe0$0$10045$
> En fait, je veux dessiner sur le bureau, voir redessiner une partie du
> bureau.

Il serait peut être bon alors de regarder du côté de Active Desktop
(IActiveDesktop).

--
Aurélien REGAT-BARREL




Avatar
Rien trouvé. T'as une url ?


"Aurélien REGAT-BARREL" a écrit dans le
message de news: 41b45fe0$0$10045$
> En fait, je veux dessiner sur le bureau, voir redessiner une partie du
> bureau.

Il serait peut être bon alors de regarder du côté de Active Desktop
(IActiveDesktop).

--
Aurélien REGAT-BARREL




Avatar
Aurelien REGAT-BARREL
> Rien trouvé. T'as une url ?



Ben c'est de la programmation COM.
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/ifaces/iactivedesktop/iactivedesktop.asp
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_adv/activedesktop.asp

Mais j'ai jamais testé, ActiveDesktop faut l'activer et y'en a que ça gêne.
Tu pourrais aussi regarder du côté des softs qui affichent des infos sur le
bureau genre température du CPU, etc...
Tiens, je viens de trouver ça:
http://vapaa.dc.inet.fi/~rainy/index.php?pn=projects&project=rainlendar
Ca a l'air d'être ce que tu cherches, et y'a le source...

--
Aurélien REGAT-BARREL
Avatar
Merci pour ces liens


"Aurelien REGAT-BARREL" a écrit dans le
message de news: 41ba22ab$0$21373$
> Rien trouvé. T'as une url ?

Ben c'est de la programmation COM.



http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/ifa
ces/iactivedesktop/iactivedesktop.asp



http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersgu
ide/shell_adv/activedesktop.asp

Mais j'ai jamais testé, ActiveDesktop faut l'activer et y'en a que ça


gêne.
Tu pourrais aussi regarder du côté des softs qui affichent des infos sur


le
bureau genre température du CPU, etc...
Tiens, je viens de trouver ça:
http://vapaa.dc.inet.fi/~rainy/index.php?pn=projects&project=rainlendar
Ca a l'air d'être ce que tu cherches, et y'a le source...

--
Aurélien REGAT-BARREL




1 2