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: Problème sur Panel 2D  (Read 1694 times)

0 Members and 1 Guest are viewing this topic.

Offline NLS le pingouin

  • Legend
  • ******
  • Posts: 826
  • Karma: 1
26 April 2010, 19:06:28
Salutations,
Je m'initie aux panels 2D, mais je bloque sur un point. Je tente de créer un MFD. J'arrive à obtenir l'affichage principale et les boutons sont fonctionnels. Par contre, je n'arrive pas à afficher de texte sur mes boutons. Je vous montre à quoi ressemble mon code pour l'instant.
Code: [Select]
bool Astra3B::clbkLoadPanel(int id)
{
//Image de fond
HBITMAP hBmp = LoadBitmap(g_hDLL, MAKEINTRESOURCE(IDB_PANEL1+id));
oapiRegisterPanelBackground (hBmp, PANEL_ATTACH_BOTTOM|PANEL_MOVEOUT_BOTTOM, 0xFFFFFF);

//Définition des MFD
//Les MFD doivent faire 230px de côté
MFDSPEC mfd_left = {{47, 106, 47+226, 106+226}, 6, 6, 8, 38};
oapiRegisterMFD (MFD_LEFT, mfd_left);
oapiRegisterPanelArea (AID_MFD1_LBUTTON, _R(6, 114, 38, 324), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_LBPRESSED, PANEL_MAP_BACKGROUND);
oapiRegisterPanelArea (AID_MFD1_RBUTTON, _R(282, 114, 314, 324), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_LBPRESSED, PANEL_MAP_BACKGROUND);
//oapiRegisterPanelArea (AID_MFD1_BBUTTON, _R(6, 114, 38, 324), PANEL_REDRAW_USER, PANEL_MOUSE_LBDOWN|PANEL_MOUSE_LBPRESSED, PANEL_MAP_BACKGROUND);
return true;
}

Code: [Select]
bool Astra3B::clbkPanelMouseEvent (int id, int event, int mx, int my)
{
switch (id)
{
case AID_MFD1_RBUTTON :
case AID_MFD1_LBUTTON :
if (my%38 < 20)
{
int bt = my/38 + (id == AID_MFD1_LBUTTON ? 0 : 6);
oapiProcessMFDButton (MFD_LEFT, bt, event);
return true;
}
break;
}
return false;
}

Code: [Select]
bool Astra3B::clbkPanelRedrawEvent (int id, int event, SURFHANDLE surf)
{
switch (id)
{
case AID_MFD1_LBUTTON:
RedrawPanel_MFDButton (surf, MFD_LEFT, 0); //Fonction récupérée sur le code source du shuttleA
return true;
case AID_MFD1_RBUTTON:
RedrawPanel_MFDButton (surf, MFD_LEFT, 1);
return true;

}
return false;
}

Code: [Select]
void Astra3B::RedrawPanel_MFDButton (SURFHANDLE surf, int mfd, int side)
{
HDC hDC = oapiGetDC (surf);
SetTextColor (hDC, RGB(0, 200, 0));
SetTextAlign (hDC, TA_CENTER);
SetBkMode (hDC, TRANSPARENT);
const char *label;
for (int bt = 0; bt < 6; bt++) {
if (label = oapiMFDButtonLabel (mfd, bt+side*6))
TextOut (hDC, 11, 118+38*bt, label, strlen(label));
else break;
}
oapiReleaseDC (surf, hDC);
}

Ca va faire une bonne heure que je tourne en rond sans réussir à trouver de solution. Quelqu'un arrive à voir d'où viens le problème?
Merci



Message modifié ( 26-04-2010 19:06 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #1 - 26 April 2010, 22:00:29
Mhhh à vue de groins regarde du coté de "PANEL_REDRAW_USER"

Ca veut dire que le refresh est manuel donc il manque un "oapiRedrawBidule"
Essaie plutot avec "REDRAW_MOUSE_BIDULE" ou regarde le code du Shuttle...!?

J'ai pas la doc sous le nez, désolé.

Sinon mets un breakpoint (debug) dans la fonction RedrawPanel_MFDButton et regarde
-si elle est appellée
-si le surf est un handle valide
-si le label est bien un text et pas null.

Dan

« Last Edit: 26 April 2010, 22:00:29 by DanSteph »