Ich hab jetzt mal nochmal ne anwendung geschrieben wo ich NUR den event-receiver testen will... hier mal der code:
EventReceiver.h
Code:
#ifndef EVENTRECEIVER_H
#define EVENTRECEIVER_H
#include <Irrlicht.h>
using namespace irr;
using namespace gui;
using namespace scene;
using namespace io;
using namespace video;
using namespace core;
class CEventReceiver :
public IEventReceiver
{
private:
IGUIEnvironment* pGUIEnvironment;
public:
CEventReceiver(IGUIEnvironment* pGUI);
~CEventReceiver();
virtual bool OnEvent(const SEvent &myevent);
};
#endif
EventReceiver.cpp
Code:
#include "EventReceiver.h"
CEventReceiver::CEventReceiver(IGUIEnvironment* pGUI)
{
pGUIEnvironment = pGUI;
}
CEventReceiver::~CEventReceiver(void)
{
}
bool CEventReceiver::OnEvent(const SEvent &myevent)
{
if (myevent.EventType == EET_GUI_EVENT)
{
s32 id = myevent.GUIEvent.Caller->getID();
switch(myevent.GUIEvent.EventType)
{
case EGET_SCROLL_BAR_CHANGED:
if (id == 104)
{
s32 pos = ((IGUIScrollBar*)myevent.GUIEvent.Caller)->getPos();
for (s32 i=0;i< EGDC_COUNT; i++)
{
SColor col = pGUIEnvironment->getSkin()->getColor((EGUI_DEFAULT_COLOR)i);
col.setAlpha(pos);
pGUIEnvironment->getSkin()->setColor((EGUI_DEFAULT_COLOR)i, col);
}
}
break;
}
}
return false;
}
main.cpp
Code:
#include <windows.h>
#include <Irrlicht.h>
#include "EventReceiver.h"
using namespace irr;
using namespace core;
using namespace io;
using namespace gui;
using namespace scene;
using namespace video;
#pragma comment(lib,"Irrlicht.lib")
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
IrrlichtDevice* pDevice = createDevice(EDT_DIRECT3D9, dimension2d<s32>(800,600), 32, false, false, false);
pDevice->setWindowCaption(L"GUI Test");
IVideoDriver* pVideoDriver = pDevice->getVideoDriver();
ISceneManager* pSceneManager = pDevice->getSceneManager();
IGUIEnvironment* pGUIEnvironment = pDevice->getGUIEnvironment();
CEventReceiver* EvRe = new CEventReceiver(pGUIEnvironment);
pDevice->setEventReceiver(EvRe);
IGUIScrollBar* pScrollbar = pGUIEnvironment->addScrollBar(true, rect<s32>(0,0,150,15), 0, 104);
//pScrollbar->setMax(255);
while (pDevice->run() && pDevice->isWindowActive())
{
pVideoDriver->beginScene(true,true,SColor(255,255,255,255));
//pSceneManager->drawAll();
pGUIEnvironment->drawAll();
pVideoDriver->endScene();
}
pDevice->drop();
return 0;
}
Führe ich das jetzt so aus bekomm ich folgenden error:
Code:
Unhandled exception at 0x004123f6 in Irrlicht.exe: 0xC0000005: Access violation reading location 0x00000001.
Und zwar zeigt das "myevent" auf einen nicht passenden speicher...
Wenn ich in der main.cpp die beiden Zeilen mit dem EventReceiver auskommentiere, zeigt mir das programm einen weißen bildschirm mit einer scrollbar (genau wie gewünscht

...
Und noch ein problem:
Wenn ich die Kommentare bei pScrollbar->setMax(255); entferne kommt einer der erwähnten ESP errors O.o
Hat da vll jemand einen fehler auf den er mich aufmerksam machen könnte? ._.