//+----------------------------------------------------------------------------
//
// File:     cm_misc.h     
//
// Module:   CMDIAL32.DLL
//
// Synopsis: Implements the CFreezeWindow Class
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// Author:   henryt Created    01/13/98
//
//+----------------------------------------------------------------------------
#ifndef _CM_MISC_INC
#define _CM_MISC_INC

extern  HINSTANCE   g_hInst; // the instance handle for resource

//
// A helper class to auto disable/enable window
// The constructor will disable the window, the distructor will enable the window
//
class CFreezeWindow
{
public:
    CFreezeWindow(HWND hWnd, BOOL fDisableParent = FALSE) 
    {
        //
        // Disable the window
        // To disable a property page, the property sheet also need to be disabled
        //

        m_hWnd = hWnd; 

        if (m_hWnd)
        {
             m_fDisableParent = fDisableParent; 
             
             //
             // Store the currently focuse window
             //

             m_hFocusWnd = GetFocus();

             EnableWindow(m_hWnd, FALSE);

             if (fDisableParent)
             {
                EnableWindow(GetParent(m_hWnd), FALSE);
             }
        }
    }

    ~CFreezeWindow()
    {
        if (m_hWnd)
        {
            EnableWindow(m_hWnd, TRUE);
            if (m_fDisableParent)
            {
                EnableWindow(GetParent(m_hWnd), TRUE);
            }

            //
            // Restore focus to the previously focuses window if any.
            // Its just the right thing to do.
            //

            if (m_hFocusWnd)
            {
                SetFocus(m_hFocusWnd);
            }

        }
    }
protected:
    HWND m_hWnd;
    HWND m_hFocusWnd;
    BOOL m_fDisableParent;
};

#endif