/*++

   Copyright    (c)    1994-1998    Microsoft Corporation

   Module  Name :

        ipctl.h

   Abstract:

        IP Address common control MFC wrapper definitions

   Author:

        Ronald Meijer (ronaldm)

   Project:

        Internet Services Manager

   Revision History:

--*/

#ifndef _IPCTL_H
#define _IPCTL_H


#if (_WIN32_IE < 0x0400)
//
// Defined in comctrl.h.  Defined here because NT 5 MFC42.dll are
// defined with _WIN32_IE 0x300
//
#pragma message("Warning: privately defining _WIN32_IE definitions")
#define IPM_CLEARADDRESS (WM_USER+100)
#define IPM_SETADDRESS   (WM_USER+101)
#define IPM_GETADDRESS   (WM_USER+102)
#define IPM_SETRANGE     (WM_USER+103)
#define IPM_SETFOCUS     (WM_USER+104) 
#define IPM_ISBLANK      (WM_USER+105)
#define WC_IPADDRESSW    L"SysIPAddress32"
#define WC_IPADDRESSA    "SysIPAddress32"
#ifdef UNICODE
#define WC_IPADDRESS     WC_IPADDRESSW
#else
#define WC_IPADDRESS     WC_IPADDRESSA
#endif // UNICODE
#endif // _WIN32_IE



class COMDLL CIPAddressCtl : public CWnd
{
/*--

Class Description:

    MFC IP Address control wrapper.

Public Interface:

    CIPAddressCtl       : Constructor
    ~CIPAddressCtl      : Destructor

    Create              : Create the control
    ClearAddress        : Clear the address
    SetAddress          : Set address to value
    GetAddress          : Get address from the control
    SetRange            : Set field to octet range
    SetFocus            : Set focus on a specifc field
    IsBlank             : Return true if the control is blank

Notes:

    Either create control dynamically with Create method, or put in resource
    template as a user control of name "SysIPAddress32".  In this case,
    common style DWORDs as follows:

    WS_BORDER | WS_CHILD | WS_VISIBLE     0x50800000

--*/

    DECLARE_DYNAMIC(CIPAddressCtl)

//
// Constructor/Destructor
//
public:
    CIPAddressCtl();
    ~CIPAddressCtl();

//
// Interface
//
public:
    //
    // Create the control
    //
    BOOL Create(
        IN LPCTSTR lpszName,
        IN DWORD dwStyle, 
        IN const RECT & rect, 
        IN CWnd * pParentWnd, 
        IN UINT nID
        );

    //
    // Clear the address in the control
    //
    void ClearAddress();

    //
    // Set the ip address value
    //
    void SetAddress(
        IN DWORD dwIPAddress
        );

    //
    // Get the ip address value. 
    // Returns the number of non-blank values
    //
    int GetAddress(
        OUT LPDWORD lpdwIPAddress
        );

    //
    // Set the octet range of a field
    // 
    void SetRange(
        IN int iField, 
        IN BYTE bRange
        );

    //
    // Set focus on an octet field within the control
    //
    void SetFocus(
        IN int iField
        );

    //
    // Return TRUE if the control is blank
    //
    BOOL IsBlank();

protected:
    static BOOL m_fClassRegistered;

protected:
    static BOOL RegisterClass();
};


//
// Inline Expansion
//
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

inline BOOL CIPAddressCtl::Create(
    IN LPCTSTR lpszName,
    IN DWORD dwStyle, 
    IN const RECT & rect, 
    IN CWnd * pParentWnd, 
    IN UINT nID
    )
{
    //
    // Create the control
    //
    return CWnd::Create(
        WC_IPADDRESS, 
        lpszName, 
        dwStyle, 
        rect, 
        pParentWnd, 
        nID
        );
}

inline void CIPAddressCtl::ClearAddress()
{
    SNDMSG(m_hWnd, IPM_CLEARADDRESS, 0, 0L);
}

inline void CIPAddressCtl::SetAddress(
    IN DWORD dwIPAddress
    )
{
    SNDMSG(m_hWnd, IPM_SETADDRESS, 0, (LPARAM)dwIPAddress);
}

inline int CIPAddressCtl::GetAddress(
    OUT LPDWORD lpdwIPAddress
    )
{
    return (int)SNDMSG(m_hWnd, IPM_GETADDRESS, 0, (LPARAM)lpdwIPAddress);
}   

inline void CIPAddressCtl::SetRange(
    IN int iField, 
    IN BYTE bRange
    )
{
    SNDMSG(m_hWnd, IPM_SETRANGE, (WPARAM)iField, (LPARAM)bRange);
}

inline void CIPAddressCtl::SetFocus(
    IN int iField
    )
{
    SNDMSG(m_hWnd, IPM_SETFOCUS, (WPARAM)iField, 0L);
}

inline BOOL CIPAddressCtl::IsBlank()
{
    return (BOOL)SNDMSG(m_hWnd, IPM_ISBLANK, 0, 0L);
}

#endif // _IPCTL_H