// DialogExt.cpp: implementation of the CDialogExt class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DialogExt.h"
#include "resource.h"
#include "library.h"
#include "ylgl.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#include ".\scrollbar\coolscroll.h"
void	InitTest(void);
LRESULT HandleCustomDraw(UINT, NMCSBCUSTOMDRAW *);

HDC			hdcCoolSkin;
HBITMAP		hCoolSkinBmp;

BOOL fCustomDraw  = FALSE;
BOOL fButtons     = FALSE;
BOOL fThumbAlways = FALSE;

BOOL fLeftScroll  = FALSE;
BOOL fEnableCSB   = TRUE;
 
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
HWND     CDialogExt::m_hWnd=NULL;
WNDPROC	 CDialogExt::m_cWndProc = NULL;
CBitmap  CDialogExt::m_bmptop;
CBitmap  CDialogExt::m_bmpclose;
CBitmap  CDialogExt::m_bmpmax;
CBitmap  CDialogExt::m_bmpmin;
CBitmap  CDialogExt::m_bmprestore;
int	     CDialogExt::m_height=0;
int	     CDialogExt::m_width=0;
int	     CDialogExt::m_buttonstate=0;
CFont	 CDialogExt::m_CaptionFont;

void RedrawNC(HWND hwnd)
{
	SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE|
		SWP_FRAMECHANGED|SWP_DRAWFRAME);

}
void InitTest(void)
{
	if(hCoolSkinBmp)return;
	hdcCoolSkin  = CreateCompatibleDC(0);
	CBitmap bmp;
	AfxSetResourceHandle(GetModuleHandle(NULL));
	bmp.LoadBitmap (IDB_SCROLL);
 
	hCoolSkinBmp = (HBITMAP)bmp.m_hObject ;
	SelectObject(hdcCoolSkin, hCoolSkinBmp);
}
BOOL CALLBACK EnumChildProcDlg(HWND hwnd,LPARAM lParam)
{
	char sClassName[201] = "\0";
	if(hwnd)
	{
		GetClassName( hwnd, sClassName, 200 );
		if( strcmp( sClassName, "Edit" ) == 0 ||strcmp( sClassName, "ListBox" ) == 0||strcmp( sClassName, "ComboBox" ) == 0)
		{
			InitTest();
			InitializeCoolSB(hwnd);
            fCustomDraw=1;
			CoolSB_SetSize(hwnd, SB_BOTH, SYSTEM_METRIC, SYSTEM_METRIC);
			CoolSB_SetMinThumbSize(hwnd, SB_BOTH, (UINT)-1);
		}
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}
    void CDialogExt::Init()
	{
	//	AfxSetResourceHandle(GetModuleHandle(NULL));
		m_bmptop.LoadBitmap(IDB_TITLE);
		m_bmpclose.LoadBitmap(IDB_CLOSE);
		m_bmpmax.LoadBitmap(IDB_MAX);
		m_bmpmin.LoadBitmap(IDB_MIN);
		m_bmprestore.LoadBitmap(IDB_RESTORE);

		BITMAP bm;
		memset( &bm, 0, sizeof(bm) );
		m_bmptop.GetBitmap(&bm);
        m_height=bm.bmHeight;
		m_width=bm.bmWidth ;
	    m_CaptionFont.CreatePointFont( GetSystemMetrics(SM_CYSMCAPTION), "System" );
		g_frameedgebrush=CreateSolidBrush(RGB(85, 119, 217));
		g_frameedgepen=::CreatePen (PS_SOLID, 1, RGB(85, 119, 217));
		if(g_crDialogbkColor==0)
			g_crDialogbkColor=RGB(204,204,204);
	}
	 CRect CDialogExt::GetMaximizeRect()
	{
	    CRect r;
	    SystemParametersInfo(SPI_GETWORKAREA, 0, r, 0);
	    return r;
	}
	 LRESULT CDialogExt::DefWindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
	{
		m_hWnd=hWnd;
 	    CWnd	*pWnd = NULL;
		CPoint	point;
		pWnd = CWnd::FromHandle( hWnd );
        WNDSTATE *m_wndstate;
        if (g_ctrlMap.Lookup( hWnd, (void*&)m_wndstate) )
		{
		    m_cWndProc=m_wndstate->oldWndProc ;
			DWORD   style=GetWindowLong(hWnd, GWL_STYLE);
			if(((style & WS_CHILD) == WS_CHILD||(style & WS_CAPTION) != WS_CAPTION)&&(message!=WM_INITDIALOG&&message!=WM_NOTIFY))
			{
				return CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam );
			}
		}
		switch( message )
		{
    	case WM_NOTIFY:
			{
				NMHDR *hdr = (NMHDR *)lParam;
	           if(hdr->code == NM_COOLSB_CUSTOMDRAW)
			   {
			       return HandleCustomDraw(wParam, (NMCSBCUSTOMDRAW *)lParam);
			   }
			   break;
			}
		case WM_INITDIALOG:
			{
				int ret=CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam );
				EnumChildWindows(hWnd,(WNDENUMPROC)EnumChildProcDlg,0);
				return ret;
			}
	    case WM_SETTEXT:
			{
               CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam );
		       OnNcPaint( pWnd );
		       return 0;
			}
	    case WM_NCCALCSIZE:
		    OnNcCalcSize( (BOOL)wParam, (NCCALCSIZE_PARAMS *)lParam );
		    return 0;
	    case WM_NCPAINT:
			{
		       OnNcPaint( pWnd );
		       return 0;
			}
	    case WM_SIZE:
			{
				if(::IsZoomed (m_hWnd))
		            Maximize();
				CRect wr;
				pWnd->GetWindowRect (&wr);
				CRgn rgn;
	            rgn.CreateRoundRectRgn(0 , 0, wr.Width()+1, wr.Height()+10,8,6);
                pWnd->SetWindowRgn ((HRGN)rgn, TRUE);
		         break;
			}
		case WM_ACTIVATE:
		case WM_NCACTIVATE:
			{
	            OnNcPaint( pWnd );
		        return 1;
			}
	 	case WM_DESTROY:
			{
                WNDSTATE *m_wndstate;
                if (g_ctrlMap.Lookup( m_hWnd, (void*&)m_wndstate) )
				{
                    delete m_wndstate;  
					g_ctrlMap.RemoveKey( m_hWnd );
				}
		    	break;
			}
	    case WM_NCLBUTTONDOWN:
		    if(!OnNcLButtonDown(wParam, CPoint(LOWORD(lParam), HIWORD(lParam))))
		       return 0;
			else
				break;
	    case WM_NCLBUTTONUP:
		    OnNcLButtonUp(wParam, CPoint(LOWORD(lParam), HIWORD(lParam)));
		    return 0;
	    case WM_NCLBUTTONDBLCLK:
		    OnNcLButtonDblClk(wParam, CPoint(LOWORD(lParam), HIWORD(lParam)));
		    return 0;
	    case WM_NCMOUSEMOVE:
		    OnNcMouseMove( wParam,CPoint(LOWORD(lParam), HIWORD(lParam)));
		    return 0;
	    case WM_CTLCOLORSTATIC:
			{
				HDC hdc=(HDC)wParam;
				HWND hwnd=(HWND)lParam;
				::SetBkMode (hdc, TRANSPARENT);
 
		char szTemp[MAX_PATH];
		GetClassName(hwnd, szTemp, sizeof(szTemp));
		if (lstrcmpi(szTemp, "Edit") == 0)
		{
			CRect rc,rc2;
			::GetWindowRect (hwnd, rc);
			CPoint pt1,pt2;
			pt1=rc.TopLeft ();
			pt2=rc.BottomRight ();
			::ScreenToClient (::GetParent (hwnd), &pt1);
			::ScreenToClient (::GetParent (hwnd), &pt2);
			rc.left =pt1.x;
			rc.top =pt1.y;
			rc.right =pt2.x;
			rc.bottom =pt2.y;

			rc2=rc;
			rc.DeflateRect (2, 2, 2, 2);
			::SetBkColor(hdc, RGB(128, 162, 223) );
	if(g_pMainWnd2->m_pBk)
	{
		HDC hdc2=::GetDC (::GetParent (hwnd));
 
		Graphics graph(hdc2);
		Rect destinationRect(rc.left,rc.top,rc.Width (), rc.Height ());
		rc=g_pMainWnd2->m_rcarray.ElementAt (16);
		rc2.left +=rc.left ;
		rc2.right +=rc.left ;
		rc2.top +=rc.top ;
		rc2.bottom +=rc.top ;
		rc=rc2;
	    rc.left /=g_fscalex;
		rc.right /=g_fscalex;
		rc.top /=g_fscaley;
		rc.bottom /=g_fscaley;
		graph.DrawImage(g_pMainWnd2->m_pBk, destinationRect, rc.left , rc.top ,rc.Width (), rc.Height (),UnitPixel);
		::ReleaseDC (::GetParent (hwnd), hdc2);
	}
		}
		return (INT_PTR)::GetStockObject(NULL_BRUSH);
			}
	    case WM_ERASEBKGND:
#ifdef NEW_SKIN
	if(g_pMainWnd2->m_pBk)
	{	
		CRect rc;
		pWnd->GetClientRect (rc);
		HDC hdc=(HDC)wParam;
   
	//	::FillRect (hdc, rc, (HBRUSH)::GetStockObject (WHITE_BRUSH));
		Graphics graph(hdc);

		Rect destinationRect(0,0,rc.Width (), rc.Height ());
		rc=g_pMainWnd2->m_rcarray.ElementAt (16);
	    rc.left /=g_fscalex;
		rc.right /=g_fscalex;
		rc.top /=g_fscaley;
		rc.bottom /=g_fscaley;
		graph.SetSmoothingMode(SmoothingModeHighQuality);
		graph.DrawImage(g_pMainWnd2->m_pBk, destinationRect, rc.left , rc.top ,rc.Width (), rc.Height (),UnitPixel);

		return 1;
	}
#else
	return CDialog::OnEraseBkgnd(pDC);
#endif
		default:
			break;
		}
		return CallWindowProc( m_cWndProc, hWnd, message, wParam, lParam );
	}
	
	void  CDialogExt::OnNcPaint(CWnd* pWnd )
	{
	    CDC * pDC = pWnd->GetWindowDC();
	    CRect wr;
	    pWnd->GetWindowRect( wr );
		CDC memdc;
	    memdc.CreateCompatibleDC(pDC);
	    CBitmap *pOldBmp=memdc.SelectObject(&m_bmptop);
		CBrush brush;
		CBrush brush2;
		bool m_bActive;
		   if(m_hWnd==GetForegroundWindow  ())
			   m_bActive=true;
		   else
			   m_bActive=false;
		if(m_bActive)
		{
			brush.CreateSolidBrush (RGB(0,33,169));
			brush2.CreateSolidBrush (RGB(8,85,221));
			pDC->StretchBlt(0, 0, wr.Width (), m_height, &memdc, 0, 0, m_width, m_height, SRCCOPY);
		}
		else
		{
			brush.CreateSolidBrush (RGB(122,150,223));
			brush2.CreateSolidBrush (RGB(122,150,223));
		    pDC->FillRect (CRect(0,0,wr.Width (), m_height), &brush2);
		}
	    memdc.SelectObject(pOldBmp);
		pDC->FillRect (CRect(0,0,3,wr.Height ()), &brush2);
		pDC->FillRect (CRect(wr.Width()-3,0,wr.Width(),wr.Height ()), &brush);
		pDC->FillRect (CRect(0,wr.Height ()-3,wr.Width(),wr.Height ()), &brush);
////////////////////////////////////////////
		if ( m_buttonstate == 3 )
		    DrawButton( pDC, 0, 2 );
	    else if ( m_buttonstate == 6)
		    DrawButton( pDC, 0, 1 );
	    else
		    DrawButton( pDC, 0, 0 );
	
	    if ( m_buttonstate == 1 )
		    DrawButton( pDC, 2, 2 );
	    else if ( m_buttonstate == 4)
		    DrawButton( pDC, 2, 1 );
	    else
		    DrawButton( pDC, 2, 0 );	

	    if ( m_buttonstate == 2 )
		    DrawButton( pDC, 1, 2 );
	    else if ( m_buttonstate == 5)
		    DrawButton( pDC, 1, 1 );
	    else
		    DrawButton( pDC, 1, 0 );
////////////////////////////////////////////
	wr.left=5;
	if ( pWnd->GetStyle () & WS_SYSMENU )
	{
		HICON hIcon=(HICON)::SendMessage(m_hWnd, WM_QUERYDRAGICON, 0, 0);
		if ( hIcon != NULL )
		{
			::DrawIconEx(pDC->m_hDC, 5, 4, hIcon, 16, 16, 0, NULL, DI_NORMAL);
			wr.left +=19;
		}
	}
	    CString m_title;
		pWnd->GetWindowText(m_title);
	    if (m_bActive)
		   pDC->SetTextColor( RGB(255,255,255) );
	    else
		   pDC->SetTextColor( RGB(192,192,192) );
	    CFont *oldfont;
	    oldfont = pDC->SelectObject(&m_CaptionFont);
	    pDC->SetBkMode(TRANSPARENT);
	    pDC->DrawText( m_title, CRect( wr.left, 0, wr.Width (), m_height ), DT_SINGLELINE | DT_LEFT | DT_VCENTER | DT_WORD_ELLIPSIS  );
	    pDC->SelectObject(oldfont);
	}

   BOOL CDialogExt::Draw( CDC *pDC, int x, int y, LPRECT sr , CBitmap &bmp)
  {
	CDC dc;
	dc.CreateCompatibleDC( pDC );
	CBitmap * oldbmp = dc.SelectObject( &bmp );
    int a=sr->right - sr->left;
	int b=sr->bottom - sr->top;
	if ( sr != NULL)
		pDC->BitBlt( x, y, sr->right - sr->left, sr->bottom - sr->top, &dc, sr->left, sr->top,  SRCCOPY );
	dc.SelectObject( oldbmp );		
	return TRUE;
  }
  void CDialogExt::Maximize()
  {
 	CRect r = GetMaximizeRect();
	::MoveWindow( m_hWnd, r.left, r.top, r.Width(), r.Height(), TRUE  );
	UpdateWindow( m_hWnd );
  }
   void CDialogExt::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS *lpncsp)
  {
	if ( bCalcValidRects )
	{
		lpncsp->rgrc[0].left = lpncsp->rgrc[0].left + 3;
		lpncsp->rgrc[0].right = lpncsp->rgrc[0].right - 3;
		lpncsp->rgrc[0].top = lpncsp->rgrc[0].top + 23;
		lpncsp->rgrc[0].bottom = lpncsp->rgrc[0].bottom - 3;
		lpncsp->rgrc[1] = lpncsp->rgrc[0];
	}
  }
   BOOL CDialogExt::DrawButton( CDC * pDC, int i, int state)
  {
	bool m_maxable;
	bool m_minable;
    WNDSTATE *m_wndstate;
    if (g_ctrlMap.Lookup( m_hWnd, (void*&)m_wndstate) )
	{
		m_maxable=m_wndstate->m_maxable ;
		m_minable=m_wndstate->m_minable ;
	}
	if ( i == 0 )
	{
	//	if ( m_bmpCloseBtn.GetSafeHandle() )
	//	{
			CRect r = GetButtonRect(0);
			Draw( pDC, r.left, r.top, CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), 21 ), m_bmpclose );
	//	}
	}
	if ( i == 1 )
	{
		CRect r = GetButtonRect(1);
		if ( m_maxable )
		{
			//if ( m_winstate == 1)
			Draw( pDC, r.left, r.top, CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), 21 ), m_bmprestore );
			//else
			//	m_bmpMaxBtn.Draw( pDC, r.left, r.top, 
				//	CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), m_bmpCloseBtn.Height() ) , m_colTrans, m_bTrans);
		}
	}
	if ( i == 2 )
	{
		if ( m_minable )
		{
			CRect r = GetButtonRect(2);
			Draw( pDC, r.left, r.top, CRect( state * r.Width(), 0, (state + 1 ) * r.Width(), 21 ) , m_bmpmin);

		}
	}
	return TRUE;	
  }

   CRect CDialogExt::GetButtonRect(int i)
  {
	CWnd *pWnd = CWnd::FromHandle(m_hWnd);
 	CRect wr;
 	pWnd->GetWindowRect(wr);
 	CRect r=CRect(CPoint(wr.Width () -2*4-3*21-4, 1),CSize(21,21));
	if ( i == 0 )//&& m_bmpCloseBtn.GetSafeHandle() )
	{
		//close
		r.left += 21*2+2*3;
		r.right += 21*2+2*3;
	}
	if ( i == 1 )//&& m_bmpMaxBtn.GetSafeHandle())
	{
		//max
		
		r.left += 21+3;
		r.right += 21+3;
			
	}
	if ( i == 2 )//&& m_bmpMinBtn.GetSafeHandle())
	{
		//min
		r.left += 0;
		r.right += 0;
	}
	return r;
  }

  bool CDialogExt::OnNcLButtonDown(UINT nHitTest, CPoint point)
  {
	CWnd *pWnd = CWnd::FromHandle(m_hWnd);
	CRect wr;
    CDC * pDC = pWnd->GetWindowDC();
	pWnd->GetWindowRect(wr);
	point.x -= wr.left;
	point.y -= wr.top;
	bool m_maxable;
	bool m_minable;
    WNDSTATE *m_wndstate;
    if (g_ctrlMap.Lookup( m_hWnd, (void*&)m_wndstate) )
	{
		m_maxable=m_wndstate->m_maxable ;
		m_minable=m_wndstate->m_minable ;
	}

	if ( PtInRect( GetButtonRect(0), point ) )
	{
		m_buttonstate=0;
	   // SendMessage(m_hWnd, WM_CLOSE, 0,0);
		//return 0;
	}
	else if ( PtInRect( GetButtonRect(2), point ) && m_minable )
	{
		m_buttonstate=4;
	   // SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MINIMIZE, MAKELPARAM(point.x, point.y));
	}
	else if ( PtInRect( GetButtonRect(1), point ) && m_maxable )
	{
		m_buttonstate=5;
	   /* if (IsZoomed(m_hWnd))
		{ 
	     SendMessage(m_hWnd, WM_SYSCOMMAND, SC_RESTORE, MAKELPARAM(point.x, point.y));
		}
		else
		{			
	     SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, MAKELPARAM(point.x, point.y));
		}*/
	}
/*	else if(PtInRect( CRect(5,4,21,20), point )&& (pWnd->GetStyle () & WS_SYSMENU))
	{
		CPoint pt=CPoint(0,0);
		::ClientToScreen (m_hWnd, &pt);
		PopupSysMenu(pt);
		return 0;
	}*/
 	else
	{
        return 1;
	}
	if ( m_buttonstate == 3 )
		    DrawButton( pDC, 0, 2 );
	    else if ( m_buttonstate == 6)
		    DrawButton( pDC, 0, 1 );
	    else
		    DrawButton( pDC, 0, 0 );
	
	    if ( m_buttonstate == 1 )
		    DrawButton( pDC, 2, 2 );
	    else if ( m_buttonstate == 4)
		    DrawButton( pDC, 2, 1 );
	    else
		    DrawButton( pDC, 2, 0 );	

	    if ( m_buttonstate == 2 )
		    DrawButton( pDC, 1, 2 );
	    else if ( m_buttonstate == 5)
		    DrawButton( pDC, 1, 1 );
	    else
		    DrawButton( pDC, 1, 0 );
		return 0;
  }
 

  void CDialogExt::OnNcLButtonUp(UINT nHitTest, CPoint point)
  {
	CWnd *pWnd = CWnd::FromHandle(m_hWnd);
	CRect wr;
    CDC * pDC = pWnd->GetWindowDC();
	pWnd->GetWindowRect(wr);
	point.x -= wr.left;
	point.y -= wr.top;
	bool m_maxable;
	bool m_minable;
    WNDSTATE *m_wndstate;
    if (g_ctrlMap.Lookup( m_hWnd, (void*&)m_wndstate) )
	{
		m_maxable=m_wndstate->m_maxable ;
		m_minable=m_wndstate->m_minable ;
	}

	if ( PtInRect( GetButtonRect(0), point ) )
	{
		m_buttonstate=0;
	    SendMessage(m_hWnd, WM_CLOSE, 0,0);
		return ;
	}
	else if ( PtInRect( GetButtonRect(2), point ) && m_minable )
	{
		m_buttonstate=4;
	    SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MINIMIZE, MAKELPARAM(point.x, point.y));
	}
	else if ( PtInRect( GetButtonRect(1), point ) && m_maxable )
	{
		m_buttonstate=5;
	    if (IsZoomed(m_hWnd))
		{			
	     SendMessage(m_hWnd, WM_SYSCOMMAND, SC_RESTORE, MAKELPARAM(point.x, point.y));
		}
		else
		{			
	     SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, MAKELPARAM(point.x, point.y));
		}
	}
	if ( m_buttonstate == 3 )
		    DrawButton( pDC, 0, 2 );
	    else if ( m_buttonstate == 6)
		    DrawButton( pDC, 0, 1 );
	    else
		    DrawButton( pDC, 0, 0 );
	
	    if ( m_buttonstate == 1 )
		    DrawButton( pDC, 2, 2 );
	    else if ( m_buttonstate == 4)
		    DrawButton( pDC, 2, 0 );	

	    if ( m_buttonstate == 2 )
		    DrawButton( pDC, 1, 2 );
	    else if ( m_buttonstate == 5)
		    DrawButton( pDC, 1, 0 );
		m_buttonstate=0;
  }


  void CDialogExt::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
  {
	  bool m_maxable;
    WNDSTATE *m_wndstate;
    if (g_ctrlMap.Lookup( m_hWnd, (void*&)m_wndstate) )
	{
		m_maxable=m_wndstate->m_maxable ;
		if(!m_maxable)return;
	}
	if (IsZoomed(m_hWnd))
        // ����Ѿ���󻯣�����SC_RESTORE�������̣�Ҫ��ָ�����	
		SendMessage(m_hWnd, WM_SYSCOMMAND, SC_RESTORE, MAKELPARAM(point.x, point.y));
	else
		// ���δ��󻯣�����SC_MAXIMIZE�������̣�Ҫ����󻯴���	
		SendMessage(m_hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, MAKELPARAM(point.x, point.y));
  }

   void CDialogExt::OnNcMouseMove(UINT nHitTest, CPoint point)
  {
	CWnd *pWnd = CWnd::FromHandle(m_hWnd);
    CDC * pDC = pWnd->GetWindowDC();
	CRect wr;
	pWnd->GetWindowRect(wr);
	point.x -= wr.left;
	point.y -= wr.top;
	bool m_maxable;
	bool m_minable;
    WNDSTATE *m_wndstate;
    if (g_ctrlMap.Lookup( m_hWnd, (void*&)m_wndstate) )
	{
		m_maxable=m_wndstate->m_maxable ;
		m_minable=m_wndstate->m_minable ;
	}

	if ( PtInRect( GetButtonRect(0), point ) )
		m_buttonstate=3;
		//return HTCLOSE;
	else if ( PtInRect( GetButtonRect(2), point ) && m_minable )
		m_buttonstate=1;
	//	return HTMINBUTTON;
	else if ( PtInRect( GetButtonRect(1), point ) && m_maxable )
		m_buttonstate=2;
	if ( m_buttonstate == 3 )
		    DrawButton( pDC, 0, 2 );
	    else if ( m_buttonstate == 6)
		    DrawButton( pDC, 0, 1 );
	    else
		    DrawButton( pDC, 0, 0 );
	
	    if ( m_buttonstate == 1 )
		    DrawButton( pDC, 2, 2 );
	    else if ( m_buttonstate == 4)
		    DrawButton( pDC, 2, 1 );
	    else
		    DrawButton( pDC, 2, 0 );	

	    if ( m_buttonstate == 2 )
		    DrawButton( pDC, 1, 2 );
	    else if ( m_buttonstate == 5)
		    DrawButton( pDC, 1, 1 );
	    else
		    DrawButton( pDC, 1, 0 );
		m_buttonstate=0;
  }