/*~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=
**
**    FILE:       BUTTON.CPP
**    DATE:       5/12/98
**    PROJ:       NT5
**    PROG:       BLJ
**    COMMENTS:   
**
**    DESCRIPTION: Window class custom buttons
**                    
**    HISTORY:
**    DATE        WHO            WHAT
**    ----        ---            ----
**    5/12/98     a-brycej     Wrote it.
**    
**
** Copyright (C) Microsoft 1998.  All Rights Reserved.
**
**~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=*/

#include <malloc.h>     // for _alloca
#include "resrc1.h"

#include "cplsvr1.h"
extern HINSTANCE ghInst;
extern CDIGameCntrlPropSheet_X *pdiCpl;

// Colour of text for buttons!
#define TEXT_COLOUR  RGB(202,202,202)

HICON hIconArray[2];

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//    FUNCTION :  ButtonWndProc
//    REMARKS  :  The callback function for the CustomButton Window.
//                    
//    PARAMS   :  The usual callback funcs for message handling
//
//    RETURNS  :  LRESULT - Depends on the message
//    CALLS    :  
//    NOTES    :
//                

LRESULT CALLBACK ButtonWndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    switch( iMsg )
    {
        case WM_PAINT:
            {
                PAINTSTRUCT *pps = new (PAINTSTRUCT);
                assert (pps);

                HDC hDC = BeginPaint(hWnd, pps);

                // Draw the appropriate icon                                                                                       
                DrawIconEx(hDC, 0, 0, hIconArray[GetWindowLong(hWnd, GWLP_USERDATA)], 0, 0, 0, NULL, DI_NORMAL);

                // Prepare the DC for the text
                SetBkMode   (hDC, TRANSPARENT);
                SetTextColor(hDC, TEXT_COLOUR);

                // Enforce the proper size!
                pps->rcPaint.top    = pps->rcPaint.left   = 0;
                pps->rcPaint.bottom = 33;
                pps->rcPaint.right  = 30;

                TCHAR tsz[3];

                // Draw the Number                        
                DrawText (hDC, (LPCTSTR)tsz, GetWindowText(hWnd, tsz, sizeof(tsz)/sizeof(TCHAR)), &pps->rcPaint, DT_VCENTER|DT_CENTER|DT_NOPREFIX|DT_SINGLELINE|DT_NOCLIP);
                SetBkMode(hDC, OPAQUE);
                EndPaint (hWnd, pps);

                if( pps )
                    delete (pps);
            }
            return(FALSE);

        default:
            return(DefWindowProc(hWnd, iMsg,wParam, lParam));
    }
    return(FALSE);
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
//    FUNCTION :  RegisterCustomButtonClass
//    REMARKS  :  Registers the Custom Button control window.
//                    
//    PARAMS   :  hInstance - Used for the call to RegisterClassEx
//
//    RETURNS  :  TRUE - if successfully registered
//                FALSE - failed to register
//    CALLS    :  RegisterClassEx
//    NOTES    :
//

extern ATOM RegisterCustomButtonClass()
{
    LPWNDCLASSEX pCustCtrlClass   = (LPWNDCLASSEX)_alloca(sizeof(WNDCLASSEX));
    assert (pCustCtrlClass);

    ZeroMemory(pCustCtrlClass, sizeof(WNDCLASSEX));

    pCustCtrlClass->cbSize        = sizeof(WNDCLASSEX);
    pCustCtrlClass->style         = CS_CLASSDC; 
    pCustCtrlClass->lpfnWndProc   = ButtonWndProc;
    pCustCtrlClass->hInstance     = ghInst;
    pCustCtrlClass->lpszClassName = TEXT("TESTBUTTON");

    return(RegisterClassEx( pCustCtrlClass ));
}