2011-04-04 3 views
0

J'utilise Mosync API C++ pour le développement mobile multiplateforme. J'essaie d'avoir un écran transparent (qui a une étiquette qui n'est pas transparente) qui s'affiche sur un autre écran, donc je peux voir les deux écrans en même temps.Mosync: Afficher un écran transparent sur un autre écran

Mais que se passe-t-il que l'écran n'est pas transparent, son noir? Pourquoi cela arrive-t-il? Je sais que c'est possible de le faire parce que Sams CookBook exemple d'un menu, est un écran transparent (avec une zone de liste à l'intérieur) & il affiche sur le dessus d'un autre écran. Pourquoi pensez-vous que mon code ci-dessous n'affiche pas un écran transparent mais un écran noir? Mon petit exemple de projet est joint (y compris son fichier .png transparent):

#include <MAUtil/Moblet.h> 
#include <MAUI/Screen.h> 
#include <MAUI/Label.h> 
#include <MAUI/Image.h> 

using namespace MAUtil; 
using namespace MAUI; 

#define RES_BLANK 1 

class ClearScreen : public Screen 
{ 
    public: 
     ClearScreen() : Screen() 
     { 
      Image *cell = new Image(0, 0, 400, 800, NULL, true, true, RES_BLANK); 
      Label *item = new Label(10, 300, 200, 200, cell); 

      // What SHOULD happen: have the whole screen transparent by having a 
      // transparent Image as the background & have a pink label on this screen, 
      // Then I should be able to also see parts of MyScreen behind this screen 
      // because parts of this are transparent 
      // What ACTUALLY happens: 
      // This creates an Image that is black (that covers the whole screen) 
      // & a pink label on it 
      this -> setMain(cell); 
     } 

    private: 
}; 

class MyScreen : public Screen 
{ 
    public: 
     MyScreen() : Screen() 
     { 
      Label *cell = new Label(0, 0, 400, 800, NULL); 
      Label *item = new Label(0, 0, 200, 200, cell); 
      cell -> setDrawBackground(true); 
      cell -> setBackgroundColor(20000); 
      item -> setDrawBackground(true); 
      item -> setBackgroundColor(90000); 

      this -> setMain(cell); 
     } 

    private: 
}; 


class MyMoblet : public Moblet 
{ 
    public: 
     MyMoblet() 
     { 
      MyScreen *m = new MyScreen(); 
      m -> show(); 
      ClearScreen *c = new ClearScreen(); 
      c -> show(); 
     } 

     void keyPressEvent(int keyCode, int nativeCode) 
     { 

     } 

     void keyReleaseEvent(int keyCode, int nativeCode) 
     { 

     } 
}; 

extern "C" int MAMain() 
{ 
    Moblet::run(new MyMoblet()); 
    return 0; 
}; 

Répondre

2

Lorsque vous appelez la méthode show() il cache l'écran actuel. Voici la partie du fichier source Screen.cpp:

void Screen::show() { 
      ... 
      if(sCurrentScreen) sCurrentScreen->hide(); 
      sCurrentScreen = this; 
      Engine::getSingleton().setMain(mMain); 
      mMain->setEnabled(true); 
      mMain->requestRepaint(); 
      ... 
    } 

Utilisez simplement des dispositions et des étiquettes avec des couleurs transparentes.

Questions connexes