Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1734 connectés 

  FORUM HardWare.fr
  Programmation

  [VC++] Comment faire pour simuler un OnScreenDisplay ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VC++] Comment faire pour simuler un OnScreenDisplay ?

n°189748
Graffin
Demo or Die !
Posté le 05-08-2002 à 09:36:46  profilanswer
 

Salut
 
Sur les TVs actuelles (ou meme les scopes), ya un OSD, càd un affichage de l'action en cours (Volume, numéro de chaine, etc...).
 
Comment faire pour simuler ca sur le un ecran windows ?
En creant une fenetre transparente ? (ca a pas l'air top)
En captant le DC du Bureau et en utilisant un TextOut ? (oui dakor mais comment faire ?)
 
Merci pour vos idées et conseils :)
 
NB : je débute ;)

mood
Publicité
Posté le 05-08-2002 à 09:36:46  profilanswer
 

n°189782
Graffin
Demo or Die !
Posté le 05-08-2002 à 10:51:53  profilanswer
 

Personne ne sait ? :(

n°189899
oliv5
Pourquoi ? Parce que !
Posté le 05-08-2002 à 12:35:47  profilanswer
 

Un exemple vaut mieux qu'un long discours.
Voila donc un exemple en win32 :
 
HDC hdcScr, hdcMem;
    int cx, cy, x1, y1, x2, y2;
    HWND hwndScreen;
       
    if (LockWindowUpdate(hwndScreen = GetDesktopWindow()))
    {
     hdcScr  = GetDCEx (hwndScreen, NULL, DCX_CACHE | DCX_LOCKWINDOWUPDATE);
     hdcMem  = CreateCompatibleDC (hdcScr);
     cx      = GetSystemMetrics(SM_CXSCREEN) / 10;
     cy      = GetSystemMetrics(SM_CYSCREEN) / 10;
     srand ((int)GetCurrentTime());    
     for (int i=0;i<300;i++)
     {
      x1 = cx * (rand () % 10) ;
      y1 = cy * (rand () % 10) ;
      x2 = cx * (rand () % 10) ;
      y2 = cy * (rand () % 10) ;
      BitBlt(hdcMem,  0,  0, cx, cy, hdcScr, x1, y1, SRCCOPY) ;
      BitBlt(hdcScr, x1, y1, cx, cy, hdcScr, x2, y2, SRCCOPY) ;
      BitBlt(hdcScr, x2, y2, cx, cy, hdcMem,  0,  0, SRCCOPY) ;
     }
     DeleteDC(hdcMem);
     ReleaseDC(hwndScreen, hdcScr);
     //LockWindowUpdate(NULL);
    }
 
c'est un truc marrant : il découpe ton écran en carrés et les échange de place. ca te fait un damier a l'écran.
voila.

n°189946
Graffin
Demo or Die !
Posté le 05-08-2002 à 13:19:23  profilanswer
 

ok merci c bien sympa comme effet ....  
 
mais c pas tout à fait ca que je voulais :)
 
non en fait, si on prend l'exemple des claviers multimedia (Logitech par exemple) et des softs qui les accompagnent, ben si on augmente ou baisse le volume, une barre verte préfixée par "Volume", et representant ce fameux volume, apparait en "surimpression" sur l'écran.. comme sur une télé quoi ;)
 
c'est cet effet que je voudrais ..
 
des idées ?

n°190030
TotalRecal​l
Posté le 05-08-2002 à 15:11:58  profilanswer
 

Et comme sur tous les écrans vendus depuis qques années d'ailleurs. Désolé moi je peux pas t'aider. Mais à mon avis c'est autant une histoire de design que de prog.


---------------
Topic .Net - C# @ Prog
n°190037
Graffin
Demo or Die !
Posté le 05-08-2002 à 15:20:07  profilanswer
 

oui c vrai aussi :)
 
en supposant que je capte le DC du bureau (GetDeskTopWindow()), un TextOut sur ce fameux DC ferait-il l'affaire ? (mais ca me parait bien "simple" :/ )
 
myDC = GetDC(GetDeskTopWindow()));
SetBkMode(myDC, TRANSPARENT);  
 
BeginPath(myDC);  
 
TCHAR truc[] = "- OSD -";  
TextOut(myDC, 0, 0, texte, ARRAYSIZE(truc));
 
EndPath(myDC);  
 
 
un truc comme ca :??:

n°190495
Graffin
Demo or Die !
Posté le 06-08-2002 à 09:22:36  profilanswer
 

UP :)

n°190808
Carbon_14
Posté le 06-08-2002 à 16:09:50  profilanswer
 

Etant plutôt expérimentateur, je dis : pourquoi ne pas essayer ? Si le simple fonctionne.
 
A savoir si le texte restera affiché et effacé qu'au prochain REDRAW du fond d'écran, ou restera "collé".
 
Dans mes maladresses des débuts (elles durent encore :pt1cable:) j'ai réussi une fois à faire déborder le texte de ma feuille volante et écrire sur le fond (je sais plus comment).
 
Y a peut-être moyen aussi de fixer la couleur du texte, avant ?
 
Si le texte reste "collé", ca va être plus compliqué (j'ai vu un exemple qq part (pr Win 3.11) pour afficher en "volant" la position du curseur pas loin de lui-même, faudrait que je le retrouve sur un des mes HD, on fait une combinaison logique avec PatBlt() entre le fond et ce qu'on veut écrire. Ca fait pro)

n°191200
oliv5
Pourquoi ? Parce que !
Posté le 07-08-2002 à 01:07:01  profilanswer
 

Bon, je crois que je t'ai pas tout expliqué.
Dans le petit effet marrant dont je t'ai filé le code, il y a tout ce dont tu as besoin.
 
Si tu l'as testé il a dû répondre a ta question sur le rafraichissement .......
 
En gros, je t'ai filé la solution pour écrire a l'écran pardessus tout le reste, c'est pas ce que tu veux non ?
 
Si tu lance le prog, tu t'apercevra qu'il ne tient pas au rafraichissement, cad que si tu déplace une fenetre apres ca, l'effet disparaitra.  
 
Je crois que c'est ce que tu veux. Enfin, peut etre que je me trompe :)

n°191290
Graffin
Demo or Die !
Posté le 07-08-2002 à 09:38:55  profilanswer
 

voila voila
 
c fait .. et ca marche :)
 
en prenant un parti du code d'Oliv5 ( :jap: ), divers tests et experimentations, qq heures de travail sur les timers et autre InvalidateRect() bien placés ( :D), ca marche pas trop mal...  
 
et ca donne un plugin Winamp qui affiche à l'écran le morceau en cours dans la playlist pdt 5 secondes [:fifiz]
 
reste plus que des pb esthétiques genre choix de la fonts, couleurs, positions, durée, effets (parceque Arial en 145 c'est pas top :D )
 
en tout cas merci à tous ...

mood
Publicité
Posté le 07-08-2002 à 09:38:55  profilanswer
 

n°191291
Graffin
Demo or Die !
Posté le 07-08-2002 à 09:39:52  profilanswer
 

oliv5 a écrit a écrit :

Bon, je crois que je t'ai pas tout expliqué.
Dans le petit effet marrant dont je t'ai filé le code, il y a tout ce dont tu as besoin.
 
Si tu l'as testé il a dû répondre a ta question sur le rafraichissement .......
 
En gros, je t'ai filé la solution pour écrire a l'écran pardessus tout le reste, c'est pas ce que tu veux non ?
 
Si tu lance le prog, tu t'apercevra qu'il ne tient pas au rafraichissement, cad que si tu déplace une fenetre apres ca, l'effet disparaitra.
 
Je crois que c'est ce que tu veux. Enfin, peut etre que je me trompe :)




 
c vrai... :)
 
mais en feintant l'ennemi, ca marche pas trop mal :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [VC++] Comment faire pour simuler un OnScreenDisplay ?

 

Sujets relatifs
Comment simuler une charge ?Comment simuler des rebond sous JAVA ???
[C++] Simuler un clic de souris...[Java] Simuler l'interaction
[DELPHI] simuler un click sur un menu d'une appli[WEB] Comment simuler une connexion <56k sur un reseau local ?
[HTML-Jscript-ASP] - Simuler le SUBMIT d'un Formulairelancer un .exe existant depuis C++ et simuler une frappe dans celui ci
Comment simuler ds un fichier .bat la pression des touches du clavier[C++]Simuler un click?
Plus de sujets relatifs à : [VC++] Comment faire pour simuler un OnScreenDisplay ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)