Я вижу некоторые вещи, которые вам нужно сделать.Во-первых, вам нужно установить mainLayout в качестве основного виджета для Screen, вызвав setMain (mainLayout).Это заставляет экран знать о mainLayout, чтобы он мог его рисовать.После того, как вы это сделаете, вы сможете увидеть свои виджеты на экране, а также получить события щелчка.
В pointerPressedEvent вы были почти правы, метод содержимого testLabel берет точку, а не экран.Здесь вы должны вызвать testLabel-> contains (px, py), чтобы оценить, нажата ли кнопка testLabel.
Полный пересмотренный код выглядит примерно так:
#include <MAUtil/Moblet.h>
#include <MAUI/Layout.h>
#include <MAUI/ListBox.h>
#include <MAUI/Label.h>
#include <MAUI/EditBox.h>
#include <MAUI/Screen.h>
#include <MAUtil/Environment.h>
#include <madmath.h>
#include <conprint.h>
using namespace MAUtil;
using namespace MAUI;
class MouseScreen : public Screen
{
private:
Label *testLabel;
public:
MouseScreen()
{
MAExtent screenDim = maGetScrSize();
Layout* mainLayout = new Layout( 0, 0, EXTENT_X(screenDim), EXTENT_Y(screenDim), NULL, 1, 3 );
ListBox* mainListBox = new ListBox( 0, 0, 100, 200, mainLayout,
ListBox::LBO_VERTICAL, ListBox::LBA_LINEAR,
true );
mainListBox -> setPaddingLeft( 10 );
mainListBox -> setPaddingRight( 10 );
mainListBox -> setPaddingTop( 10 );
mainListBox -> setPaddingBottom( 10 );
mainListBox -> setBackgroundColor( 900 );
mainLayout -> setBackgroundColor( 300 );
testLabel = new Label( 10, 300, 50, 20, mainLayout );
//testLabel -> addPointerListener( this );
testLabel -> setCaption( "Click me" );
mainLayout -> add( testLabel );
setMain( mainLayout );
}
void pointerPressEvent( MAPoint2d p )
{
if ( testLabel->contains( p.x, p.y ) )
{
printf( "Label clicked" );
}
}
void pointerMoveEvent( MAPoint2d p ) {}
void pointerReleaseEvent( MAPoint2d p ) {}
};
class MouseMoblet : public Moblet
{
public:
MouseMoblet()
{
instance = new MouseScreen();
instance -> show();
}
~MouseMoblet()
{
delete instance;
}
void keyPressEvent(int keyCode, int nativeCode)
{
// todo: handle key presses
printf( "Blah" ); // never occurs when I press the mouse, but other KEYS work
}
void keyReleaseEvent(int keyCode, int nativeCode)
{
// todo: handle key releases
}
private:
MouseScreen *instance;
};
extern "C" int MAMain()
{
Moblet::run(new MouseMoblet());
return 0;
};
Примечание: Текущая система пользовательского интерфейса MoSync была разработана для телефонов без сенсорного ввода, поэтому она немного хитроумно обрабатывает события указателя, однако это будет улучшено в следующем выпуске.Не зависит от того, хотите ли вы сохранить поведение по умолчанию или нет, в настоящее время реализация Screen по умолчанию ничего не делает.