249 lines
5.9 KiB
C++
249 lines
5.9 KiB
C++
/*--------------------------------------------------------------------------*
|
|
*
|
|
* Microsoft Windows
|
|
* Copyright (C) Microsoft Corporation, 1992 - 1999
|
|
*
|
|
* File: wrapper.cpp
|
|
*
|
|
* Contents: Implementation file for simple wrapper classes
|
|
*
|
|
* History: 02-Feb-98 jeffro Created
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
#include "stdafx.h"
|
|
#include "wrapper.h"
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CAccel::CAccel
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
CAccel::CAccel (HACCEL hAccel /* =NULL */)
|
|
:
|
|
m_hAccel (hAccel)
|
|
{
|
|
}
|
|
|
|
CAccel::CAccel (LPACCEL paccl, int cEntries)
|
|
:
|
|
m_hAccel (::CreateAcceleratorTable (paccl, cEntries))
|
|
{
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CAccel::~CAccel
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
CAccel::~CAccel ()
|
|
{
|
|
DestroyAcceleratorTable ();
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CAccel::CreateAcceleratorTable
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool CAccel::CreateAcceleratorTable (LPACCEL paccl, int cEntries)
|
|
{
|
|
DestroyAcceleratorTable ();
|
|
ASSERT (m_hAccel == NULL);
|
|
if(paccl != NULL)
|
|
m_hAccel = ::CreateAcceleratorTable (paccl, cEntries);
|
|
|
|
return (m_hAccel != NULL);
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CAccel::CopyAcceleratorTable
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
int CAccel::CopyAcceleratorTable (LPACCEL paccl, int cEntries) const
|
|
{
|
|
return (::CopyAcceleratorTable (m_hAccel, paccl, cEntries));
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CAccel::DestroyAcceleratorTable
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void CAccel::DestroyAcceleratorTable ()
|
|
{
|
|
if (m_hAccel != NULL)
|
|
{
|
|
::DestroyAcceleratorTable (m_hAccel);
|
|
m_hAccel = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CAccel::LoadAccelerators
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool CAccel::LoadAccelerators (int nAccelID)
|
|
{
|
|
return (LoadAccelerators (MAKEINTRESOURCE (nAccelID)));
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CAccel::LoadAccelerators
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool CAccel::LoadAccelerators (LPCTSTR pszAccelName)
|
|
{
|
|
HINSTANCE hInst = AfxFindResourceHandle (pszAccelName, RT_ACCELERATOR);
|
|
return (LoadAccelerators (hInst, pszAccelName));
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CAccel::LoadAccelerators
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool CAccel::LoadAccelerators (HINSTANCE hInst, LPCTSTR pszAccelName)
|
|
{
|
|
DestroyAcceleratorTable ();
|
|
ASSERT (m_hAccel == NULL);
|
|
m_hAccel = ::LoadAccelerators (hInst, pszAccelName);
|
|
|
|
return (m_hAccel != NULL);
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CAccel::TranslateAccelerator
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool CAccel::TranslateAccelerator (HWND hwnd, LPMSG pmsg) const
|
|
{
|
|
return ((m_hAccel != NULL) &&
|
|
::TranslateAccelerator (hwnd, m_hAccel, pmsg));
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CDeferWindowPos::CDeferWindowPos
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
CDeferWindowPos::CDeferWindowPos (
|
|
int cWindows,
|
|
bool fSynchronousPositioningForDebugging)
|
|
: m_hdwp (NULL),
|
|
m_fSynchronousPositioningForDebugging (fSynchronousPositioningForDebugging)
|
|
{
|
|
Begin (cWindows);
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CDeferWindowPos::~CDeferWindowPos
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
CDeferWindowPos::~CDeferWindowPos ()
|
|
{
|
|
if (m_hdwp)
|
|
End();
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CDeferWindowPos::Begin
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool CDeferWindowPos::Begin (int cWindows)
|
|
{
|
|
ASSERT (m_hdwp == NULL);
|
|
ASSERT (cWindows > 0);
|
|
|
|
m_hdwp = ::BeginDeferWindowPos (cWindows);
|
|
return (m_hdwp != NULL);
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CDeferWindowPos::End
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool CDeferWindowPos::End ()
|
|
{
|
|
ASSERT (m_hdwp != NULL);
|
|
HDWP hdwp = m_hdwp;
|
|
m_hdwp = NULL;
|
|
|
|
if ( hdwp == NULL )
|
|
return false;
|
|
|
|
return (::EndDeferWindowPos (hdwp) != 0);
|
|
}
|
|
|
|
|
|
/*+-------------------------------------------------------------------------*
|
|
* CDeferWindowPos::AddWindow
|
|
*
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
bool CDeferWindowPos::AddWindow (
|
|
const CWnd* pwnd,
|
|
const CRect& rect,
|
|
DWORD dwFlags,
|
|
const CWnd* pwndInsertAfter /* =NULL */)
|
|
{
|
|
ASSERT (IsWindow (pwnd->GetSafeHwnd()));
|
|
|
|
if (pwndInsertAfter == NULL)
|
|
dwFlags |= SWP_NOZORDER;
|
|
|
|
if ( m_hdwp == NULL )
|
|
return false;
|
|
|
|
m_hdwp = ::DeferWindowPos (m_hdwp,
|
|
pwnd->GetSafeHwnd(),
|
|
pwndInsertAfter->GetSafeHwnd(),
|
|
rect.left, rect.top,
|
|
rect.Width(), rect.Height(),
|
|
dwFlags);
|
|
|
|
#ifdef DBG
|
|
if (m_fSynchronousPositioningForDebugging)
|
|
{
|
|
End ();
|
|
Begin (1);
|
|
}
|
|
#endif
|
|
|
|
return (m_hdwp != NULL);
|
|
}
|