2011-04-04 103 views
0

我正在使用Mosync API C++进行跨平台移动开发。我试图让透明屏幕(其中有一个不透明的标签)在另一个屏幕上显示,这样我就可以同时看到两个屏幕。Mosync:在另一个屏幕上显示透明屏幕

但是它发生了什么,它的屏幕不透明,它的黑色?为什么会发生?我知道它可能做到这一点,因为菜单的Sams CookBook示例是一个透明屏幕(带有列表框)&它显示在另一个屏幕的顶部。

为什么你认为我的下面的代码不显示透明屏幕而是黑屏?我的小项目,例如附后(包括它的透明PNG文件):

#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; 
}; 

回答

2

当你调用show()方法,它隐藏当前画面。以下是来自Screen.cpp源文件的部分:

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

只需使用具有透明颜色的布局和标签。

相关问题