Dan's Orbiter page

Orbiter Francophone => Création Orbiter Francophone => Topic started by: NLS le pingouin on 26 April 2010, 19:06:28

Title: Problème sur Panel 2D
Post by: NLS le pingouin on 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 )
Title: Re: Problème sur Panel 2D
Post by: DanSteph on 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