See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: [C++] GDI et panel  (Read 15238 times)

0 Members and 1 Guest are viewing this topic.

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #25 - 12 September 2007, 19:16:33
Je tourne en rond depuis quelques jours sur les releases des surfaces GDI.
Je n'obtiens pas de refresh sur le panel du bas. En fait, il ne se fait qu'après
un refocussage, c'est à dire que je passe du panel 1 au panel 0 puis retour
sur le panel 1 ...

Pourtant sur la doc quand je lis ce qui concerne un windows device context
je vois que  HDC hDC = oapiGetDC (surf); et  oapiReleaseDC (surf, hDC)
utilisés dans une fonction suffisent pour obtenir la surface, la bricoler
puis la détruire quand on en a plus besoin.

Les fonctions de dessin que je travaille pour le panel du bas ont la même
allure générale que celles du panel du haut. Ai je loupé un truc sur InitPanel ?
Y'a t'il une précision à donner à Orbiter pour l'id d'un panel en ce qui concerne le GDI ?

C'est d'autant plus étrange que les surfaces construites à partir
d'une bitmap sont parfaitement raffraichies sur les mêmes fonctions !

Bref, je ne vois pas d'ou viens le problème.... :wonder:
Peut être parce que hDC est pointé ?



Message modifié ( 12-09-2007 19:23 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 265
  • Hein, quoi !?
    • FsPassengers
Reply #26 - 12 September 2007, 19:32:29
Quote
picto a écrit:
En fait, il ne se fait qu'après
un refocussage, c'est à dire que je passe du panel 1 au panel 0 puis retour
sur le panel 1 ...
?

Il est en redraw_USER ? dans ce cas oapiRefresh...
si il est en REDRAW_MOUSE c'est normal alors...

Controle ca...

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #27 - 12 September 2007, 20:22:10

C'était pas tout à fait ça, mais il y avait de l'idée ;)

Je suis tellement habitué au redraw automatique que j'oublie qu'il n'est
affecté que par la variable état des structures de boutons ... Ce qui fait
que je suis tout surpris quand il n'y a pas de redraw si c'est une autre
variable de la structure qui est tripotée :siffle:

Pourtant, avec les filles ça marche comme ça !
Peu importe la variable qu'on leur tripote, ça réagit !


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 265
  • Hein, quoi !?
    • FsPassengers
Reply #28 - 12 September 2007, 20:24:45
Quote
picto a écrit:
Pourtant, avec les filles ça marche comme ça !
Peu importe la variable qu'on leur tripote, ça réagit !

Le coude c'est moyen quand même... quoique si tu pince..!?

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #29 - 12 September 2007, 20:31:26

A tenter :" Chérie, viens par ici que j'te tripote les variables ! " :badsmile:


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 265
  • Hein, quoi !?
    • FsPassengers
Reply #30 - 12 September 2007, 21:28:40
Après une journée difficile un peut de détente c'est toujours bienvenu :badsmile:

"Tiens tu la sens ma grosse syntaxe error!"

Dan



Message modifié ( 12-09-2007 21:29 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #31 - 12 September 2007, 21:58:03
Ca c'est que j'appelle une "perche tendue" pour se faire battre !  :badsmile:

===== Régénération globale :  0 a échoué, 0 a été ignoré ======
Syntaxe error on "Syntaxe error", "Syntaxe error" was not found ...


Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #32 - 13 September 2007, 01:38:52
J'avance plus .... c'est la cata ... :sad:
Le moindre truc me prend des heures et des heures.
Je bloque sur les build de surfaces et je ne vois pas ce qui cloche à force d'être le nez dessus.

Dans le mouse event, je fais passer la valeur Allume+SelectedUmmuMember+1
juste après avoir incrémenté celle ci ...

Code: [Select]
SelectedUmmuMember++;
SetEtatDisplay(GRAND_DISPLAY,Allume+SelectedUmmuMember+1);

Dans ma fonction, j'assigne bien cette valeur à l'état du display.
Tout en faisant le trigger sur l'AID concerné ...

Code: [Select]
void Irridium::SetEtatDisplay(int NoBouton,int Etat)
{
Display[NoBouton].Etat=Etat;
oapiTriggerRedrawArea(Display[NoBouton].Panel, 0,AID_DISPLAY+NoBouton);
}

Et dans la fonction de builtsurfaces je fais les tests pour redessiner la surface en fonction de cette valeur ...

Code: [Select]
void Irridium::RedrawPanel_GrandDisplay (SURFHANDLE surf,int id)
{
if(Display[id].Etat==Eteint)
{
oapiBlt (surf, srf[1], 0, 0,Display[id].iBmpPosX,Display[id].iBmpPosY, Display[id].TailleXRegister, Display[id].TailleYRegister);
}
if(Display[id].Etat==Allume)
{
oapiBlt (surf, srf[1], 0, 0,Display[id].iBmpPosX+10,Display[id].iBmpPosY, Display[id].TailleXRegister, Display[id].TailleYRegister);
}
if(Display[id].Etat>=[b]Allume+SelectedUmmuMember+1[/b] && Display[id].Etat<=[b]
Allume+SelectedUmmuMember+1[/b]+Crew.GetCrewTotalNumber()  )
{
char cbuf[20];
    char * Name=Crew.GetCrewNameBySlotNumber(SelectedUmmuMember);
HDC hDC = oapiGetDC (surf);
SelectObject (hDC, g_Param.font[0]);
SetTextColor (hDC, MEDIUMGREEN);
SetTextAlign (hDC, TA_LEFT);
SetBkMode (hDC, TRANSPARENT);
sprintf (cbuf, "Astro \"%s\"",Name);
TextOut (hDC, 0, 5, cbuf, strlen(cbuf));
oapiReleaseDC (surf, hDC);
}
}

Et quoi que je fasse, malgré la présence de 12 UMMUs à bord, je ne parviens
pas à afficher au delà du slot 2 et surtout, je ne vois pas ou je cafouille encore ...



Message modifié ( 13-09-2007 03:24 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #33 - 13 September 2007, 03:22:27
J'ai trouvé ...c'était sur un test de sécurité de la fonction SetEtatDisplay ...
Quatre heures pour trouver ça :wall:

Et je n'ai toujours pas un bon refresh des surfs ...
Tant que c'est sur les builds à partir de bitmap c'est nickel
et quand c'est avec le GDI, ça reste en surimpression
avec la fonction redrawpanel écrite au dessus ...

Les deux premiers build de la fonction sont bien rafraichis mais pas celui du GDI ... :doubt:
Le texte précédent reste affiché  et le nouveau texte vient se superposer ...



Message modifié ( 13-09-2007 03:27 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 265
  • Hein, quoi !?
    • FsPassengers
Reply #34 - 13 September 2007, 04:23:55
Oublie pas dans ce genre de cas d'executer pas a pas pour voir que devienne tes valeurs et
*pourquoi* elle ne font pas ce que tu attend...

Un bon F9 mis a un point strategique ca peut te sauver des heures et quelques milliers de cheveux...

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #35 - 13 September 2007, 04:40:43
En fait, dans ce cas, c'est un truc à faire au niveau du GDI ...
Genre Clearsurface ... J'ai essayé Delete mais là .... plus rien :)
Il n'y a aucune raison que le refresh se fasse sur cette fonction
uniquement sur les bilts bitmaps et pas sur le bilt GDI ...
Mais alors pour trouver les outils GDI, c'est le parcours du combattant,
tant dans les headers que sur Google ...

J'ai trouvé ça dans l'oapi ...
oapiClearSurface (surf, VERYVERYDARKGREEN);
Ca fonctionne, j'ai le refresh, mais je suis déçu car je voulais écrire par dessus une
bitmap en background avec SetBkMode (hDC, TRANSPARENT);  

Comme dans la fonction au dessus. Mais visiblement il faut
"effacer" le dernier texte créé au bilt précédent ....

Là, je me retrouve avec un texte vert clair sur un fond uni vert foncé .... :sad:



Message modifié ( 13-09-2007 05:08 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 265
  • Hein, quoi !?
    • FsPassengers
Reply #36 - 13 September 2007, 05:19:06
je suis dubitatif sur ton truc... :doubt:

Sois tu a dis a Orbiter de te fournir un "fond neuf" à chaque image et tu palance la purée dessus,
soit tu le sauve et le fourni toi même mais je ne vois aucune raisons de commencer à faire
des spécialités avec GDI.

Envoie ou explique avec les petite imageux...

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #37 - 13 September 2007, 05:37:24
J'ai trouvé ... c'est vraiment une grosse bouse le GDI aussi ...
Et voilà comment on passe huit heures sur une ligne :badsmile:


Le troisième bilt de ma fonction doit ausssi réappeler la bitmap ...

Code: [Select]
oapiBlt (surf, srf[1], 0, 0,Display[id].iBmpPosX+10,Display[id].iBmpPosY, Display[id].TailleXRegister,
Display[id].TailleYRegister);
HDC hDC = oapiGetDC (surf);
SetBkMode (hDC, TRANSPARENT);
sprintf (cbuf, "Astro \"%s\" %i",Name,Crew.GetCrewTotalNumber());

En fait, il faut reconstruire TOUTE la surface même si c'est
juste pour changer une lettre en transparence !
N'importe quoi question perfs en fait !!!

Je pensais que quand j'avais mon fond je pouvais faire n'importe quoi par dessus comme on fait avec l'oapi en
PANELMAP_BACKGROUND .... mais nib ... faut TOUT reconstruire à chaque coup !
Par contre, j'ai appris trois nouveaux outils du GDI au passage :)
Faut bien essayer de positiver un peu !



Message modifié ( 13-09-2007 05:38 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 265
  • Hein, quoi !?
    • FsPassengers
Reply #38 - 13 September 2007, 05:48:41
T'est vraiment obligé de faire ce mic-mac la ?
Ca marche pas un panel_MAP_BACKGROUND ?

T'est sur que ca marche dans tout les cas ? (switch vessel, switch panel)

Je suis inquiet :badsmile:

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #39 - 13 September 2007, 05:53:57
Quote
Ca marche pas un panel_MAP_BACKGROUND ?

Si ça marche ... mais je veux faire un display très souple avec plusieurs  possibilités de fond ...
Donc mon background panel est ...... noir !
Pitites photos quand tout sera au point ...



Message modifié ( 13-09-2007 06:48 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #40 - 13 September 2007, 05:58:44
Tiens, au passage ...

Crois tu qu'il serait possible de faire passer des bitmaps hors ressources sur le panel ?
Je me disais que ça pouvait être sympa de pouvoir balancer des photos d'identité des MMU
sur le display ...

Pour l'instant, j'ai fait un truc avec les MMUs "par défaut" de boulinium mais ...
Si je fais entrer d'autres MMUs d'un autre vaisseau je ne vois pas d'autres solutions que
d'avoir quelques ressources "Tronches d'invités" ....

Si ça pouvait être "customisé" depuis l'extérieur par l'utilisateur, ce serait plus sympa ...



Message modifié ( 13-09-2007 05:59 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 265
  • Hein, quoi !?
    • FsPassengers
Reply #41 - 13 September 2007, 06:23:33
Ah... je vois... une ID card... très sympa l'idée, je sais pas si c'est vraiment le genre
de truc qui va faire que tu va arriver à finir ce millénaire encore, mais .. très sympa. :badsmile:

On peut avoir des jpg qui ce loadent externe + display mais ca je ne te montrerais pas... ;)
Fini d'abord la base on verra si t'est sage éventuellement après.

Sinon bonne idée quand même, j'ai hate de voir ca ;)

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #42 - 13 September 2007, 06:41:57


Si je galère moins demain, normalement, je termine l'interface MMU ( Affichages panel, gestion par les boutons et
consumebufferedkey, sons,  choix du dock, et EVA et SaveRestore des variables pour l'ensemble de CE système)
Pas de gestion de vie pour le moment ... trop de boulot.

Effectivement, la customisation n'est pas une priorité ... ;)
Mais je suis content de savoir que c'est possible


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 265
  • Hein, quoi !?
    • FsPassengers
Reply #43 - 13 September 2007, 07:03:42


Bhoa , tu me connais je suis toujours pret à filer, mais il me semble
qu'il faudrais deja bien avancer la base avant de rajouter des "wow"
qui prennent autant de temps. ;)

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #44 - 13 September 2007, 07:19:15
Non non ... pas tout de suite .... ;)

Il y a tellement de sujets de déconcentration et je vois le temps qui file .... :sick:
Déjà bien heureux si je peux fournir la première beta pour le moment ou la première
release aurait du être faite sans tous ces problèmes.

Petite vue de l'interface MMU ...
J'hésite sur le sélecteur d'airlock, pas la place pour un véritable sélecteur,
donc soit une annonce vocale soit une petite info par écrit sur le display soit les deux...




Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #45 - 20 September 2007, 12:14:35

Je n'arrive pas à afficher le symbole % en GDI ...
Quand j'écris ça ...
sprintf (cbuf, "%i%",iPressureRearAirlock);
Le symbole n'apparait pas ... :sick:
Quelqu'un a t'il une idée sur comment faire ça ?


« Last Edit: 20 September 2007, 13:25:39 by picto »
Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15410
  • Karma: 265
  • Hein, quoi !?
    • FsPassengers
Reply #46 - 20 September 2007, 13:17:23
double le... %%

Dan

« Last Edit: 20 September 2007, 13:25:39 by DanSteph »

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 25
  • Criiii Crii Crii
Reply #47 - 20 September 2007, 13:25:38
MerciMerci


« Last Edit: 20 September 2007, 13:25:39 by picto »
Pic