#include #include Foo::Foo(void) : mhDisplay(0), mCounter(0), mlpLedDisplay(0) { mThreadHandler.setCallback(this,&Foo::threadHandler); mTimerHandler.setCallback(this,&Foo::timerHandler); MessageThread::insertHandler(&mThreadHandler); Window::insertHandler(VectorHandler::TimerHandler,&mTimerHandler); } Foo::~Foo() { stop(); destroyWindow(); MessageThread::removeHandler(&mThreadHandler); } DWORD Foo::threadHandler(ThreadMessage &someThreadMessage) { switch(someThreadMessage.message()) { case ThreadMessage::TM_CREATE : createWindow(GetModuleHandle(0),mWindowPoint); break; case ThreadMessage::TM_DESTROY : destroyWindow(); break; case ThreadMessage::TM_USER : if(someThreadMessage.userDataOne()==FooStart)cycle(); break; } return FALSE; } void Foo::cycle(void) { ThreadMessage threadMessage(ThreadMessage::TM_USER,FooStart,0L); if(!Window::isValid()||!mlpLedDisplay)return; if(mCounter>999)mCounter=0; mlpLedDisplay->setNumber(mCounter++); mlpLedDisplay->paint(); update(); MessageThread::postMessage(threadMessage); ::Sleep(50); } void Foo::createWindow(HINSTANCE hInstance,const Point &windowPoint) { if(mhDisplay)return; Window::createWindow("BUTTON","",WS_POPUP|WS_CAPTION,Rect(windowPoint.x(),windowPoint.y(),50,50),0,0,0); show(SW_SHOW); update(); mlpLedDisplay=new LedDisplay((HWND)(Window&)*this,Point(0,0)); // setTimer(0,25); } void Foo::destroyWindow(void) { if(mlpLedDisplay){delete mlpLedDisplay;mlpLedDisplay=0;} // killTimer(1); Window::destroy(); } CallbackData::ReturnType Foo::timerHandler(CallbackData &someCallbackData) { // ThreadMessage threadMessage(ThreadMessage::TM_USER,FooStart,0L); if(!Window::isValid()||!mlpLedDisplay)return 0; if(mCounter>999)mCounter=0; mlpLedDisplay->setNumber(mCounter++); mlpLedDisplay->paint(); update(); // MessageThread::postMessage(threadMessage); return 0; }