Thanks. Yes.
cdr1_mfd = { 2,GRP_LeftMFDScreen };
plt1_mfd = { 2,GRP_RightMFDScreen };
cntr1_mfd = { 2,GRP_CenterMFDScreen };
2 is the vc mesh
no this clbkVCMouseEvent is never called. I have the debug script and it is never seen. Also a break which it never hits
void SPS::clbkMFDMode(int mfd, int mode)
{
oapiVCTriggerRedrawArea(-1, ALL_MFD_BUTTONS);
}
//-------------------------------------------------------------------------
bool SPS::clbkLoadVC(int id)
{
SetCameraOffset(_V(0, .595, 0));
SetCameraDefaultDirection(_V(0, -0.1908, 0.9816));
DefineMFDButtons();
oapiVCRegisterMFD(MFD_LEFT, &cdr1_mfd);
oapiVCRegisterMFD(MFD_RIGHT, &plt1_mfd);
oapiVCRegisterMFD(MFD_USER1, &cntr1_mfd);
return true;
}
//-------------------------------------------------------------------------
bool SPS::clbkVCMouseEvent(int id, int event, VECTOR3& p)
{
sprintf(oapiDebugString(), "Mouse position: X %f Y %f Z %f bt%d", p.x, p.y, p.z, id);
if (id == CDR1_PWR) {
oapiSendMFDKey(MFD_LEFT, OAPI_KEY_ESCAPE);
}
return true;
if (id == CDR1_SEL) {
oapiSendMFDKey(MFD_LEFT, OAPI_KEY_F1);
return true;
}
if (id == CDR1_MNU) {
oapiSendMFDKey(MFD_LEFT, OAPI_KEY_GRAVE);
return true;
}
if (id == PLT1_PWR) {
oapiSendMFDKey(MFD_RIGHT, OAPI_KEY_ESCAPE);
}
return true;
if (id == PLT1_SEL) {
oapiSendMFDKey(MFD_RIGHT, OAPI_KEY_F1);
return true;
}
if (id == PLT1_MNU) {
oapiSendMFDKey(MFD_RIGHT, OAPI_KEY_GRAVE);
return true;
}
if (id == CNTR1_PWR) {
oapiSendMFDKey(MFD_USER1, OAPI_KEY_ESCAPE);
}
return true;
if (id == CNTR1_SEL) {
oapiSendMFDKey(MFD_USER1, OAPI_KEY_F1);
return true;
}
if (id == CNTR1_MNU) {
oapiSendMFDKey(MFD_USER1, OAPI_KEY_GRAVE);
return true;
}
if (id == CDR1_LBUTTONS) {
int button = p.y * 6;
oapiProcessMFDButton(MFD_LEFT, button, event);
return true;
}
if (id == CDR1_RBUTTONS) {
int button = p.y * 6;
oapiProcessMFDButton(MFD_LEFT, button + 6, event);
return true;
}
if (id == PLT1_LBUTTONS) {
int button = p.y * 6;
oapiProcessMFDButton(MFD_RIGHT, button, event);
return true;
}
if (id == PLT1_RBUTTONS) {
int button = p.y * 6;
oapiProcessMFDButton(MFD_RIGHT, button + 6, event);
return true;
}
if (id == CNTR1_LBUTTONS) {
int button = p.y * 6;
oapiProcessMFDButton(MFD_USER1, button, event);
return true;
}
if (id == CNTR1_RBUTTONS) {
int button = p.y * 6;
oapiProcessMFDButton(MFD_USER1, button + 6, event);
return true;
}
return false;
}
bool SPS::clbkVCRedrawEvent(int id, int event, SURFHANDLE surf)
{
bool return_value = false;
if (id == ALL_MFD_BUTTONS) {
PaintMFDButtons(surf);
return_value = true;
}
return return_value;
}
void SPS::PaintMFDButtons(SURFHANDLE surf)
{
HDC hDC = oapiGetDC(surf);
for (int mfd = 0; mfd < 3; mfd++) {
// D. Beachy: BUGFIX: if MFD powered off, do not paint buttons
if (oapiGetMFDMode(mfd) == MFD_NONE) {
}
else
{ // MFD powered on
sprintf(oapiDebugString(), "MFD MODE %d MFD %d ", oapiGetMFDMode(mfd), mfd);
HFONT pFont = (HFONT)SelectObject(hDC, g_Param.font[0]);
SetTextColor(hDC, RGB(255, 255, 255));
SetTextAlign(hDC, TA_CENTER);
SetBkMode(hDC, TRANSPARENT);
const char* label;
int y = 16;
for (int bt = 0; bt < 6; bt++) {
if (label = oapiMFDButtonLabel(mfd, bt)) {
TextOut(hDC, mfd_buttons_ypos[mfd], y, label, strlen(label));
y += 64;
}
else break;
}
int y2 = 16;
for (int bt = 6; bt < 12; bt++) {
if (label = oapiMFDButtonLabel(mfd, bt)) {
TextOut(hDC, mfd_buttons_ypos[mfd] + 128, y2, label, strlen(label));
y2 += 64;
}
else break;
}
//TextOut (hDC, 234, 1, "PG", 2);
SelectObject(hDC, pFont);
}
}
oapiReleaseDC(surf, hDC);
}
void SPS::DefineMFDButtons()
{
SURFHANDLE mfd_buttons_surf;
mfd_buttons_surf = oapiGetTextureHandle(hOrbiterVCMesh, 3);
oapiVCRegisterArea(CDR1_PWR, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_ONREPLAY);
oapiVCRegisterArea(CDR1_SEL, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_ONREPLAY);
oapiVCRegisterArea(CDR1_MNU, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_ONREPLAY);
oapiVCSetAreaClickmode_Quadrilateral(CDR1_PWR, CDR1_PWR_AREA.pt1, CDR1_PWR_AREA.pt2, CDR1_PWR_AREA.pt3, CDR1_PWR_AREA.pt4);
oapiVCSetAreaClickmode_Quadrilateral(CDR1_SEL, CDR1_SEL_AREA.pt1, CDR1_SEL_AREA.pt2, CDR1_SEL_AREA.pt3, CDR1_SEL_AREA.pt4);
oapiVCSetAreaClickmode_Quadrilateral(CDR1_MNU, CDR1_MNU_AREA.pt1, CDR1_MNU_AREA.pt2, CDR1_MNU_AREA.pt3, CDR1_MNU_AREA.pt4);
oapiVCRegisterArea(PLT1_PWR, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_ONREPLAY);
oapiVCRegisterArea(PLT1_SEL, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_ONREPLAY);
oapiVCRegisterArea(PLT1_MNU, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_ONREPLAY);
oapiVCSetAreaClickmode_Quadrilateral(PLT1_PWR, PLT1_PWR_AREA.pt1, PLT1_PWR_AREA.pt2, PLT1_PWR_AREA.pt3, PLT1_PWR_AREA.pt4);
oapiVCSetAreaClickmode_Quadrilateral(PLT1_SEL, PLT1_SEL_AREA.pt1, PLT1_SEL_AREA.pt2, PLT1_SEL_AREA.pt3, PLT1_SEL_AREA.pt4);
oapiVCSetAreaClickmode_Quadrilateral(PLT1_MNU, PLT1_MNU_AREA.pt1, PLT1_MNU_AREA.pt2, PLT1_MNU_AREA.pt3, PLT1_MNU_AREA.pt4);
oapiVCRegisterArea(CNTR1_PWR, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_ONREPLAY);
oapiVCRegisterArea(CNTR1_SEL, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_ONREPLAY);
oapiVCRegisterArea(CNTR1_MNU, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_ONREPLAY);
oapiVCSetAreaClickmode_Quadrilateral(CNTR1_PWR, CNTR1_PWR_AREA.pt1, CNTR1_PWR_AREA.pt2, CNTR1_PWR_AREA.pt3, CNTR1_PWR_AREA.pt4);
oapiVCSetAreaClickmode_Quadrilateral(CNTR1_SEL, CNTR1_SEL_AREA.pt1, CNTR1_SEL_AREA.pt2, CNTR1_SEL_AREA.pt3, CNTR1_SEL_AREA.pt4);
oapiVCSetAreaClickmode_Quadrilateral(CNTR1_MNU, CNTR1_MNU_AREA.pt1, CNTR1_MNU_AREA.pt2, CNTR1_MNU_AREA.pt3, CNTR1_MNU_AREA.pt4);
oapiVCRegisterArea(CDR1_LBUTTONS, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBUP | PANEL_MOUSE_LBPRESSED | PANEL_MOUSE_ONREPLAY);
oapiVCRegisterArea(CDR1_RBUTTONS, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBUP | PANEL_MOUSE_LBPRESSED | PANEL_MOUSE_ONREPLAY);
oapiVCSetAreaClickmode_Quadrilateral(CDR1_LBUTTONS, CDR1_LBUTTONS_AREA.pt1, CDR1_LBUTTONS_AREA.pt2, CDR1_LBUTTONS_AREA.pt3, CDR1_LBUTTONS_AREA.pt4);
oapiVCSetAreaClickmode_Quadrilateral(CDR1_RBUTTONS, CDR1_RBUTTONS_AREA.pt1, CDR1_RBUTTONS_AREA.pt2, CDR1_RBUTTONS_AREA.pt3, CDR1_RBUTTONS_AREA.pt4);
oapiVCRegisterArea(PLT1_LBUTTONS, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBUP | PANEL_MOUSE_LBPRESSED | PANEL_MOUSE_ONREPLAY);
oapiVCRegisterArea(PLT1_RBUTTONS, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBUP | PANEL_MOUSE_LBPRESSED | PANEL_MOUSE_ONREPLAY);
oapiVCSetAreaClickmode_Quadrilateral(PLT1_LBUTTONS, PLT1_LBUTTONS_AREA.pt1, PLT1_LBUTTONS_AREA.pt2, PLT1_LBUTTONS_AREA.pt3, PLT1_LBUTTONS_AREA.pt4);
oapiVCSetAreaClickmode_Quadrilateral(PLT1_RBUTTONS, PLT1_RBUTTONS_AREA.pt1, PLT1_RBUTTONS_AREA.pt2, PLT1_RBUTTONS_AREA.pt3, PLT1_RBUTTONS_AREA.pt4);
oapiVCRegisterArea(CNTR1_LBUTTONS, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBUP | PANEL_MOUSE_LBPRESSED | PANEL_MOUSE_ONREPLAY);
oapiVCRegisterArea(CNTR1_RBUTTONS, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN | PANEL_MOUSE_LBUP | PANEL_MOUSE_LBPRESSED | PANEL_MOUSE_ONREPLAY);
oapiVCSetAreaClickmode_Quadrilateral(CNTR1_LBUTTONS, CNTR1_LBUTTONS_AREA.pt1, CNTR1_LBUTTONS_AREA.pt2, CNTR1_LBUTTONS_AREA.pt3, CNTR1_LBUTTONS_AREA.pt4);
oapiVCSetAreaClickmode_Quadrilateral(CNTR1_RBUTTONS, CNTR1_RBUTTONS_AREA.pt1, CNTR1_RBUTTONS_AREA.pt2, CNTR1_RBUTTONS_AREA.pt3, CNTR1_RBUTTONS_AREA.pt4);
oapiVCRegisterArea(ALL_MFD_BUTTONS, _R(0, 0, 1536, 384), PANEL_REDRAW_USER, PANEL_MOUSE_IGNORE, PANEL_MAP_BACKGROUND, mfd_buttons_surf);
}
h:
bool clbkLoadVC(int id);
bool clbkVCMouseEvent(int id, int event, VECTOR3& p);
bool clbkVCRedrawEvent(int id, int event, SURFHANDLE surf);
void clbkMFDMode(int mfd, int mode);
VCMFDSPEC cdr1_mfd;
VCMFDSPEC plt1_mfd;
VCMFDSPEC cntr1_mfd;
HINSTANCE hDLL;
HFONT hFont,hFont1;
HPEN hPen;
HBRUSH hBrush;
void PaintMFDButtons(SURFHANDLE surf);
struct RECT_AREA {
VECTOR3 pt1;
VECTOR3 pt2;
VECTOR3 pt3;
VECTOR3 pt4;
};