// Reply 8 Updated
// Compile for Windows
// The base class has changed from window to Cwindow
DECLARE IMPORT,_TrackMouseEvent(tme as TRACKMOUSEEVENT),INT;
struct TRACKMOUSEEVENT
{
    unsigned INT cbSize;
    unsigned INT dwFlags;
    unsigned INT hwndTrack;
    unsigned INT dwHoverTime;
}

CONST TME_HOVER = 1;
CONST TME_LEAVE = 2;
CONST WM_MOUSEHOVER = 0x2A1;
CONST WM_MOUSELEAVE = 0x2A3;

class HoverWindow:Cwindow
{
	declare OnMouseMove(int x,int y,int flags),int;
	declare WndProc(unsigned int message, unsigned int wparam, unsigned int lparam),int;
}

class MainWindow:Cwindow
{
	declare OnClose(),int;
}
int run;

global sub main()
{
	MainWindow win;
	HoverWindow child;
	win.Create(0,0,300,100,AWS_CAPTION | AWS_SYSMENU | AWS_AUTODRAW | AWS_VISIBLE | AWS_BORDER,0,"HoverDemo",0);
	child.Create(10,10,60,60,AWS_VISIBLE|AWS_BORDER|AWS_CHILD,0,"",win);
	win.CenterWindow();
	run = 1;
	do
	{
		wait();
	} until run = 0;
	return;
}

MainWindow::OnClose(),int
{
	run = 0;
	return true;
}

HoverWindow::OnMouseMove(int x,int y,int flags),int
{
	TRACKMOUSEEVENT tme;
	tme.cbSize = LEN(TRACKMOUSEEVENT);
	tme.dwFlags = TME_HOVER | TME_LEAVE;
	tme.hwndTrack = m_hwnd;
	tme.dwHoverTime = 25;
	_TrackMouseEvent(tme);
	return true;
}

HoverWindow::WndProc(unsigned int message, unsigned int wparam, unsigned int lparam),int
{
	select message
	{
		case WM_MOUSEHOVER:
			SetWindowColor(RGB(255,0,0));
		case WM_MOUSELEAVE:
			SetWindowColor(RGB(255,255,255));
	
	}
return CWindow!!WndProc(message,wParam,lParam);
}
