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: [tutorial] Posez vos question sur les DLL C++  (Read 84062 times)

0 Members and 1 Guest are viewing this topic.

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #200 - 21 July 2007, 13:48:19
:sad: Vessel2 oui ..... pas gentil de se moquer :sad:
J'rigoleeuuxx ...
Merci NoMatter. :wor:

C'est une découverte, j'avais ça, et n'ayant pas encore été confronté à cette
situation je ne savais pas vraiment ce que faisait la seconde ligne :sick:

Code: [Select]
void Irridium::clbkDrawHUD(int iMode, const HUDPAINTSPEC* pHPS, HDC hdc)
{
    VESSEL2::clbkDrawHUD(iMode, pHPS, hdc);
    char cbuf[255];
    int d = pHPS->Markersize/2;

Il faut vraiment trouver des morceaux de code avec un maximum de commentaires.

J'avais quand même tripoté dans ce coin là en virant
int iMode dans
void Irridium::clbkDrawHUD(int iMode, const HUDPAINTSPEC* pHPS, HDC hdc),
iMode dans
VESSEL2::clbkDrawHUD(iMode, pHPS, hdc);
et int mode dans
void clbkDrawHUD (int mode, const HUDPAINTSPEC *hps, HDC hDC);

Mais ça compilait pas et ensuite j'osais pas aller bidouiller dans l'OAPI :lol:
La fonction manquait d'arguments !



Message modifié ( 21-07-2007 14:48 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #201 - 22 July 2007, 02:16:03
Quote
Dan a écrit:
Et la bitmap des boutons:



Dan

Est ce le même système pour les displays du DGIV ou
est ce de l'écriture avec les outils du GDI ?
Par exemple pour le niveau de puissance d'un moteur ?

C'est pour une question d'optimisation.
Pour un dessin complexe, il est évident que la bitmap est utile mais par exemple
pour un level qui est un simple rectangle dont le niveau monte et descend, j'imagine
qu'il est plus rentable de se servir d'une brush par exemple ?

Pour les boutons, j'ai l'impression qu'on a pas le choix, l'oapi oblige à utiliser le
système à trois états de la bitmap que l'on spawne dans clbkPanelRedrawEvent.
C'est dommage quand on voit que sur certains boutons, la seule modif est la petite
led centrale.


Pic

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #202 - 22 July 2007, 02:20:49
tu ne t'arrête jamais Pict ????



Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #203 - 22 July 2007, 03:53:21
Si .... faut bien dormir :sad:


de temps en temps :badsmile:



Message modifié ( 22-07-2007 03:53 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #204 - 22 July 2007, 04:30:39
Quote
picto a écrit:
C'est pour une question d'optimisation.
Pour un dessin complexe, il est évident que la bitmap est utile mais par exemple
pour un level qui est un simple rectangle dont le niveau monte et descend, j'imagine
qu'il est plus rentable de se servir d'une brush par exemple ?

Pour les boutons, j'ai l'impression qu'on a pas le choix, l'oapi oblige à utiliser le
système à trois états de la bitmap que l'on spawne dans clbkPanelRedrawEvent.
C'est dommage quand on voit que sur certains boutons, la seule modif est la petite
led centrale.


Brush pas forcement, GDI est "lent" une copie bitmap comme pour la "manette" des moteurs DG (ou DGIV)
est parfait.

Sur l'ordi du DGIV tout est en GDI (par exemple la silhouette du DG pout temp et le logo "spacetech")

On est absolument pas limité a des boutons "3 bitmap" tu peut en faire deux ou 5 comme tu veux je comprend pas
forcement bien ta question ou ton soucis la dessus !??

Tu peut aussi faire des display à "ruban" ou une bitmap plus grande "scroll" dans une carré plus petit.

Précise ceq eu tu veux je te dirais ce qui est mieux ;)

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #205 - 22 July 2007, 05:15:14
Par exemple pour une jauge, le niveau, c'est mieux en copiant
des morceaux de bitmaps avec un savant calcul dans poststep
de la hauteur de pixels :badsmile: grâce à un truc genre GetFuel,
 je sais pas le nom exact ;) ou c'est mieux avec une brush du GDI ?





Message modifié ( 22-07-2007 05:26 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #206 - 22 July 2007, 05:26:09
l'avantage du GDI c'est:

un call et hop tu passe a autre chose, c'est fait.
Si tu dois changer le display (place sur panel etc etc)
un chiffre ou deux et hop roule.

L'avantage du bitmap c'est que tu peu faire comme de petites led séparée (comme sur l'image éteinte)
+ legere illumination des bords comme si led vraiment allumée. plus réaliste, plus sympa.
Ca ce ferait avec PANEL_SAVE_BAKGROUND machin et tu change juste la hauteur du bitmap a copier.

Dans les deux cas toutefois utiliser REDRAW_USER et n'appliquer le rafraichissement (triggerredraw)
que quand la valeur a changée (double variable) comme lemoteur ou quoi que tu display change pas continuellement
ca optimise beaucoup. (si tuen a plusieurs ca change j'ai gagné 10FSP sur le panel du bas avec l'affichage fuel sur
DGIV contrairement a un panel redraw always)

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #207 - 22 July 2007, 05:48:51
Oki, merci ....  je vois bien le truc.



Message modifié ( 22-07-2007 08:32 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #208 - 22 July 2007, 17:05:20
Petite question possibilités sur les displays :badsmile:

Quelle méthode faut il utiliser pour afficher une bitmap par exemple
un 100 par 100 puis de dessiner par dessus, ou afficher du texte en
dynamique ?  Mais sans que cette image fasse partie du background.
pour pouvoir les changer à volonté.

 .... Ca permettrait de faire des fonds sympas sur les displays  

Un peu comme ce qui se passe  sur le MFD Map.

Ah oui, j'oubliais aussi ...
INFRAME est il un outil paramétrable pour dessiner transparent ?



Message modifié ( 22-07-2007 19:23 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #209 - 22 July 2007, 20:06:29
tu oapiBlt et puis tu dessine dessus...

INFRAME c'est quoi ?

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #210 - 22 July 2007, 20:18:14
INFRAME c'est INSIDEFRAME en fait :sick:
En fait je pensais à NULL, seul outil dont je n'ai pas encore trouvé l'utilisation.
Code: [Select]
// ==============================================================
//  Definition des outils de dessin pour le GDI
// ==============================================================

//  Création du pen dans HPEN   Type de crayon, epaisseur du crayon, couleur RGB & font dans HFONT
//  Les types de traits disponibles sont PS_DASH           - - - - - - - -  
//                                       PS_SOLID          _______________
//                                       PS_DOT            ...............
//                                       PS_INSIDEFRAME    _______________  mais "sous" la frame
//                                       PS_DASHDOT        -.-.-.-.-.-.-.-
//                                       PS_NULL           rien apparemment, à étudier
//                                       PS_DASHDOTDOT     _.._.._.._.._.._
//  Création de font dans HFONT

Et il en reste un paquet :sick:

Code: [Select]
#define PS_USERSTYLE        7
#define PS_ALTERNATE        8
#define PS_STYLE_MASK       0x0000000F

#define PS_ENDCAP_ROUND     0x00000000
#define PS_ENDCAP_SQUARE    0x00000100
#define PS_ENDCAP_FLAT      0x00000200
#define PS_ENDCAP_MASK      0x00000F00

#define PS_JOIN_ROUND       0x00000000
#define PS_JOIN_BEVEL       0x00001000
#define PS_JOIN_MITER       0x00002000
#define PS_JOIN_MASK        0x0000F000

#define PS_COSMETIC         0x00000000
#define PS_GEOMETRIC        0x00010000
#define PS_TYPE_MASK        0x000F0000



Message modifié ( 22-07-2007 20:38 )

Pic

Offline Schimz

  • Legend
  • ******
  • Posts: 1598
  • Karma: 1
Reply #211 - 22 July 2007, 22:35:16
Q: 780 octets de pixel sur 160 zones de panel, c'est beaucoup ? (l'alternative serait de tracer 160 quarts de cercle :siffle: )

ed : et bien sûr avec alpha channel, c'est plus rigolo :)

re-ed : 250 octets :siffle:



Message modifié ( 22-07-2007 22:43 )


Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #212 - 22 July 2007, 22:38:50
Pour plus de cohérence avec d'autre addon's, je cherche à ouvrir mon sas avec la touche "A", j'ai fait divers essais mais
rien à faire.

Quote
if(key==OAPI_KEY_A)
   {
      RevertDoor();
      PlayVesselWave3(MyID,OUVDOORSOUND);
      Crew.SetAirlockDoorState(!Crew.GetAirlockDoorState());
      if(Crew.GetAirlockDoorState()==TRUE)
         strcpy(SendFocusScreenMessage(),"Airlock is now open");      
      else
         strcpy(SendFocusScreenMessage(),"Airlock is now closed");
      return 1;
   }

il doit me manqué quelque chose ou avoir mal placer mes éléments !? J'ai besoin d'un peu d'aide SVP.



Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #213 - 22 July 2007, 22:42:40
Le code posté est bon, si couille il y a ce n'est pas ici..
Quest ce qui ne marche pas exactement, pas de message ou le sas pas ouvert ?

Dan


Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #214 - 22 July 2007, 23:00:14
J'ai trouvé quelque chose, il faut que je mettre  "Q" pour ouvrir mon sas avec "A" :wonder:

Quote
if(key==OAPI_KEY_Q)

Par contre quand mon sas et ouvert je ne peux pas faire une EVA car il m'indique:

Quote
Error, airlock is closed, unable to EVA



Offline Momo

  • Legend
  • ******
  • Posts: 2682
  • Karma: 1
Reply #215 - 22 July 2007, 23:21:06
   // Ummu Key "Q" Switch the airlock door on/off
   if(key==OAPI_KEY_Q)
   {
// animation du sas
RevertTonAnim();
      // switch state
      Crew.SetAirlockDoorState(!Crew.GetAirlockDoorState());
      // display state
      if(Crew.GetAirlockDoorState()==TRUE)
         strcpy(SendFocusScreenMessage(),"Airlock is now open" ) ;   
      else
         strcpy(SendFocusScreenMessage(),"Airlock is now closed" ) ;   
      return 1;
   }



Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #216 - 22 July 2007, 23:34:48
Quote
siriusfett a écrit:
J'ai trouvé quelque chose, il faut que je mettre  "Q" pour ouvrir mon sas avec "A" :wonder:

Azerty/Qwerty  :lol:

Comme la majeur partie des gens tapent a deux doigts l'azerty ne sert strictement à rien
faudra bien que les francais abandonnent cette "exception" un jour ou l'autre...

Met une autre touche "S" pour sas ? (OAPI_KEY_S)

T'est pas brouté genre anim ouvert alors que sas fermé dans la logique ?

Dan


Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #217 - 23 July 2007, 00:53:50
Quote
DanSteph a écrit:
T'est pas brouté genre anim ouvert alors que sas fermé dans la logique ?
Dan

Pour l'instant c'est moi que ça broute :lol:
:wall::wall::wall:



Message modifié ( 23-07-2007 01:06 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #218 - 23 July 2007, 01:19:57
Schimz, tu parles de ça ?


Pic

Offline Schimz

  • Legend
  • ******
  • Posts: 1598
  • Karma: 1
Reply #219 - 23 July 2007, 16:40:17
Non, Ça, c'est aut'chose :)



Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #220 - 24 July 2007, 16:43:26

Et ben, c'est un peu énigmatique ta question ! :)

Petite question pour gagner un peu de temps sur la fabrication des ressources bitmaps.
D'après ce que je crois avoir compris, les boutons des MFDs sont déclarés six par six verticalement  en indiquant
l'encombrement de chaque bouton et l'espacement qu'il y a entre eux à partir de l'offset des coins haut de chaque
série référencé sur le coin haut le plus proche du MFD consécutif.  Chsais pas si je suis clair sur ce coup là :wonder:

Les DLLs ds MFDs dessinent elles en blanc plus transparent sur n'importe quel design de bouton du moment qu'ils
soient sombres ou faut il tout dessiner, y compris les textes ?

J'ai un doute en regardant le shuttle A ...


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #221 - 24 July 2007, 16:58:34
Chui pas sur de bien comprendre, comme les boutons MFD ne sont pas animé on ne les dessines
pas c'est juste un carré virtuel pour le clique mouse.

Chui pas dans le mood, faut m'expliquer patiemment  ;) (chui dans le Fsx :wall: )

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #222 - 24 July 2007, 17:03:30
Ah je crois que je comprend... il me semble que le MFD ce demerde avec les texts
en transparent. Après tu peux dessiner un bouton sur le fond mais il n'y a aucun
affichage séparé du bouton.


Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #223 - 24 July 2007, 17:21:28

Ok, merci, le doute venait de ce que les textes des boutons des MFDs du ShuttleA sont en couleur.
Mais si ça se trouve, il y a une option pour ça dans la déclaration des MFDs, je n'ai pas encore regardé,
Chuis sur tochop' pas sur MSVC ;)

Au passage, bon courage sur FsPX ;)


Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #224 - 26 July 2007, 07:25:03
C'est pas pour être méchant :badsmile:, mais c'est un peu le b...  dans votre OS3.5SDK ... oui Môssieur !
16 wavs pour 14 déclarations, c'est : soit il y a des wavs qui ne servent à rien soit il manque des
déclarations dans la SDK ... ;)
J'rigoleuxxxxx ..... nan, celui qui m'embête le plus, c'est l'ambient0.wav que je ne sais pas remplacer.
ou le 9 .... ou un autre si c'est encore mieux organisé que ce que j'imagine :badsmile:

mainext.wav
mainextloud.wav
Hover_int.WAV
attfire.wav
attsustain.WAV
aircond.wav

ambient0.wav
ambient1.wav
ambient2.wav
ambient3.wav
ambient4.wav
ambient5.wav
ambient6.wav
ambient7.wav
ambient8.wav
ambient9.wav


Code: [Select]
//This is the keyword used by ReplaceStockSound3()

#define REPLACE_MAIN_THRUST 10
#define REPLACE_HOVER_THRUST 11
#define REPLACE_RCS_THRUST_ATTACK 12
#define REPLACE_RCS_THRUST_SUSTAIN 13
#define REPLACE_AIR_CONDITIONNING 14

#define REPLACE_COCKPIT_AMBIENCE_1 15
#define REPLACE_COCKPIT_AMBIENCE_2 16
#define REPLACE_COCKPIT_AMBIENCE_3 17
#define REPLACE_COCKPIT_AMBIENCE_4 18
#define REPLACE_COCKPIT_AMBIENCE_5 19
#define REPLACE_COCKPIT_AMBIENCE_6 20
#define REPLACE_COCKPIT_AMBIENCE_7 21
#define REPLACE_COCKPIT_AMBIENCE_8 22
#define REPLACE_COCKPIT_AMBIENCE_9 23



Message modifié ( 26-07-2007 07:29 )

Pic