ReactOS  0.4.12-dev-712-ge6be187
ATL::CWindowImplBaseT< TBase, TWinTraits > Class Template Reference

#include <atlwin.h>

Inheritance diagram for ATL::CWindowImplBaseT< TBase, TWinTraits >:
Collaboration diagram for ATL::CWindowImplBaseT< TBase, TWinTraits >:

Public Member Functions

 CWindowImplBaseT ()
 
virtual void OnFinalMessage (HWND)
 
BOOL SubclassWindow (HWND hWnd)
 
virtual WNDPROC GetWindowProc ()
 
LRESULT DefWindowProc (UINT uMsg, WPARAM wParam, LPARAM lParam)
 
HWND Create (HWND hWndParent, _U_RECT rect, LPCTSTR szWindowName, DWORD dwStyle, DWORD dwExStyle, _U_MENUorID MenuOrID, ATOM atom, LPVOID lpCreateParam)
 
- Public Member Functions inherited from ATL::CWindowImplRoot< TBase >
 CWindowImplRoot ()
 
virtual ~CWindowImplRoot ()
 
- Public Member Functions inherited from ATL::CMessageMap
virtual BOOL ProcessWindowMessage (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID)=0
 

Static Public Member Functions

static DWORD GetWndStyle (DWORD dwStyle)
 
static DWORD GetWndExStyle (DWORD dwExStyle)
 
static LRESULT CALLBACK StartWindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 

Public Attributes

WNDPROC m_pfnSuperWindowProc
 
- Public Attributes inherited from ATL::CWindowImplRoot< TBase >
CWndProcThunk m_thunk
 
const _ATL_MSGm_pCurrentMsg
 
DWORD m_dwState
 

Additional Inherited Members

- Public Types inherited from ATL::CWindowImplRoot< TBase >
enum  { WINSTATE_DESTROYED = 0x00000001 }
 

Detailed Description

template<class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL::CWindowImplBaseT< TBase, TWinTraits >

Definition at line 1462 of file atlwin.h.

Constructor & Destructor Documentation

◆ CWindowImplBaseT()

template<class TBase = CWindow, class TWinTraits = CControlWinTraits>
ATL::CWindowImplBaseT< TBase, TWinTraits >::CWindowImplBaseT ( )
inline

Definition at line 1473 of file atlwin.h.

1474  {
1476  }
LRESULT DefWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1521
WNDPROC m_pfnSuperWindowProc
Definition: atlwin.h:1470

Member Function Documentation

◆ Create()

template<class TBase = CWindow, class TWinTraits = CControlWinTraits>
HWND ATL::CWindowImplBaseT< TBase, TWinTraits >::Create ( HWND  hWndParent,
_U_RECT  rect,
LPCTSTR  szWindowName,
DWORD  dwStyle,
DWORD  dwExStyle,
_U_MENUorID  MenuOrID,
ATOM  atom,
LPVOID  lpCreateParam 
)
inline

Definition at line 1591 of file atlwin.h.

1593  {
1594  HWND hWnd;
1595 
1596  ATLASSERT(m_hWnd == NULL);
1597  ATLASSERT(atom != 0);
1598  if (atom == 0)
1599  return NULL;
1600  if (m_thunk.Init(NULL, NULL) == FALSE)
1601  {
1603  return NULL;
1604  }
1605 
1607  if (MenuOrID.m_hMenu == NULL && (dwStyle & WS_CHILD) != 0)
1608  MenuOrID.m_hMenu = (HMENU)(UINT_PTR)this;
1609  if (rect.m_lpRect == NULL)
1610  rect.m_lpRect = &TBase::rcDefault;
1611  hWnd = ::CreateWindowEx(dwExStyle, reinterpret_cast<LPCWSTR>(MAKEINTATOM(atom)), szWindowName, dwStyle, rect.m_lpRect->left,
1612  rect.m_lpRect->top, rect.m_lpRect->right - rect.m_lpRect->left, rect.m_lpRect->bottom - rect.m_lpRect->top,
1613  hWndParent, MenuOrID.m_hMenu, _AtlBaseModule.GetModuleInstance(), lpCreateParam);
1614 
1615  ATLASSERT(m_hWnd == hWnd);
1616 
1617  return hWnd;
1618  }
HINSTANCE GetModuleInstance()
Definition: atlcore.h:198
#define ATLASSERT(x)
Definition: CComVariant.cpp:9
void AddCreateWndData(_AtlCreateWndData *pData, void *pObject)
Definition: atlbase.h:986
HWND hWnd
Definition: settings.c:17
#define WS_CHILD
Definition: pedump.c:617
_AtlCreateWndData cd
Definition: atlwin.h:231
& rect
Definition: startmenu.cpp:1413
BOOL Init(WNDPROC proc, void *pThis)
Definition: atlwin.h:245
#define CreateWindowEx
Definition: winuser.h:5621
smooth NULL
Definition: ftsmooth.c:416
#define SetLastError(x)
Definition: compat.h:409
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
CAtlWinModule _AtlWinModule
Definition: atlbase.cpp:27
CWndProcThunk m_thunk
Definition: atlwin.h:1311
CAtlBaseModule _AtlBaseModule
Definition: atlbase.cpp:26
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:60
#define MAKEINTATOM(i)
Definition: winbase.h:1416
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13

Referenced by ATL::CWindowImpl< CShellBrowser, CWindow, CFrameWinTraits >::Create().

◆ DefWindowProc()

template<class TBase = CWindow, class TWinTraits = CControlWinTraits>
LRESULT ATL::CWindowImplBaseT< TBase, TWinTraits >::DefWindowProc ( UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
inline

Definition at line 1521 of file atlwin.h.

1522  {
1523  CWindowImplBaseT<TBase, TWinTraits> *pThis;
1524 
1525  pThis = reinterpret_cast<CWindowImplBaseT<TBase, TWinTraits> *>(this);
1527  }
#define CallWindowProc
Definition: winuser.h:5601
WPARAM wParam
Definition: combotst.c:138
WNDPROC m_pfnSuperWindowProc
Definition: atlwin.h:1470
LPARAM lParam
Definition: combotst.c:139

Referenced by ATL::CWindowImplBaseT< CToolbar< TASK_ITEM >, CControlWinTraits >::CWindowImplBaseT(), CShellBrowser::WindowProc(), and ATL::CWindowImplBaseT< CToolbar< TASK_ITEM >, CControlWinTraits >::WindowProc().

◆ GetWindowProc()

template<class TBase = CWindow, class TWinTraits = CControlWinTraits>
virtual WNDPROC ATL::CWindowImplBaseT< TBase, TWinTraits >::GetWindowProc ( )
inlinevirtual

Reimplemented in CShellBrowser, and CDefView.

Definition at line 1506 of file atlwin.h.

1507  {
1508  return WindowProc;
1509  }
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1547

Referenced by ATL::CWindowImplBaseT< CToolbar< TASK_ITEM >, CControlWinTraits >::StartWindowProc(), and ATL::CWindowImplBaseT< CToolbar< TASK_ITEM >, CControlWinTraits >::SubclassWindow().

◆ GetWndExStyle()

template<class TBase = CWindow, class TWinTraits = CControlWinTraits>
static DWORD ATL::CWindowImplBaseT< TBase, TWinTraits >::GetWndExStyle ( DWORD  dwExStyle)
inlinestatic

Definition at line 1516 of file atlwin.h.

1517  {
1518  return TWinTraits::GetWndExStyle(dwExStyle);
1519  }

◆ GetWndStyle()

template<class TBase = CWindow, class TWinTraits = CControlWinTraits>
static DWORD ATL::CWindowImplBaseT< TBase, TWinTraits >::GetWndStyle ( DWORD  dwStyle)
inlinestatic

Definition at line 1511 of file atlwin.h.

1512  {
1513  return TWinTraits::GetWndStyle(dwStyle);
1514  }

◆ OnFinalMessage()

template<class TBase = CWindow, class TWinTraits = CControlWinTraits>
virtual void ATL::CWindowImplBaseT< TBase, TWinTraits >::OnFinalMessage ( HWND  )
inlinevirtual

◆ StartWindowProc()

template<class TBase = CWindow, class TWinTraits = CControlWinTraits>
static LRESULT CALLBACK ATL::CWindowImplBaseT< TBase, TWinTraits >::StartWindowProc ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
inlinestatic

Definition at line 1529 of file atlwin.h.

1530  {
1531  CWindowImplBaseT<TBase, TWinTraits> *pThis;
1532  WNDPROC newWindowProc;
1533  WNDPROC GCCU(pOldProc);
1534 
1535  pThis = reinterpret_cast<CWindowImplBaseT<TBase, TWinTraits> *>(_AtlWinModule.ExtractCreateWndData());
1536  ATLASSERT(pThis != NULL);
1537  if (pThis == NULL)
1538  return 0;
1539  pThis->m_thunk.Init(pThis->GetWindowProc(), pThis);
1540  newWindowProc = pThis->m_thunk.GetWNDPROC();
1541  pOldProc = reinterpret_cast<WNDPROC>(::SetWindowLongPtr(hWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(newWindowProc)));
1542  Unused(pOldProc); // TODO: should generate trace message if overwriting another subclass
1543  pThis->m_hWnd = hWnd;
1544  return newWindowProc(hWnd, uMsg, wParam, lParam);
1545  }
#define ATLASSERT(x)
Definition: CComVariant.cpp:9
HWND hWnd
Definition: settings.c:17
#define SetWindowLongPtr
Definition: treelist.c:70
WPARAM wParam
Definition: combotst.c:138
smooth NULL
Definition: ftsmooth.c:416
CAtlWinModule _AtlWinModule
Definition: atlbase.cpp:27
void * ExtractCreateWndData()
Definition: atlbase.h:991
#define GWLP_WNDPROC
Definition: treelist.c:66
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2859
#define GCCU(x)
Definition: atlwin.h:27
LPARAM lParam
Definition: combotst.c:139
#define Unused(x)
Definition: atlwin.h:28

◆ SubclassWindow()

template<class TBase = CWindow, class TWinTraits = CControlWinTraits>
BOOL ATL::CWindowImplBaseT< TBase, TWinTraits >::SubclassWindow ( HWND  hWnd)
inline

Definition at line 1482 of file atlwin.h.

1483  {
1484  CWindowImplBaseT<TBase, TWinTraits> *pThis;
1485  WNDPROC newWindowProc;
1486  WNDPROC oldWindowProc;
1487  BOOL result;
1488 
1489  ATLASSERT(m_hWnd == NULL);
1490  ATLASSERT(::IsWindow(hWnd));
1491 
1492  pThis = reinterpret_cast<CWindowImplBaseT<TBase, TWinTraits>*>(this);
1493 
1494  result = m_thunk.Init(GetWindowProc(), this);
1495  if (result == FALSE)
1496  return FALSE;
1497  newWindowProc = m_thunk.GetWNDPROC();
1498  oldWindowProc = reinterpret_cast<WNDPROC>(::SetWindowLongPtr(hWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(newWindowProc)));
1499  if (oldWindowProc == NULL)
1500  return FALSE;
1501  m_pfnSuperWindowProc = oldWindowProc;
1502  pThis->m_hWnd = hWnd;
1503  return TRUE;
1504  }
#define TRUE
Definition: types.h:120
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define ATLASSERT(x)
Definition: CComVariant.cpp:9
HWND hWnd
Definition: settings.c:17
WNDPROC GetWNDPROC()
Definition: atlwin.h:253
#define SetWindowLongPtr
Definition: treelist.c:70
BOOL Init(WNDPROC proc, void *pThis)
Definition: atlwin.h:245
smooth NULL
Definition: ftsmooth.c:416
unsigned int BOOL
Definition: ntddk_ex.h:94
virtual WNDPROC GetWindowProc()
Definition: atlwin.h:1506
#define GWLP_WNDPROC
Definition: treelist.c:66
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2859
CWndProcThunk m_thunk
Definition: atlwin.h:1311
WNDPROC m_pfnSuperWindowProc
Definition: atlwin.h:1470
GLuint64EXT * result
Definition: glext.h:11304

◆ WindowProc()

template<class TBase = CWindow, class TWinTraits = CControlWinTraits>
static LRESULT CALLBACK ATL::CWindowImplBaseT< TBase, TWinTraits >::WindowProc ( HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
inlinestatic

Definition at line 1547 of file atlwin.h.

1548  {
1549  CWindowImplBaseT<TBase, TWinTraits> *pThis = reinterpret_cast<CWindowImplBaseT< TBase, TWinTraits> *>(hWnd);
1550  _ATL_MSG msg(pThis->m_hWnd, uMsg, wParam, lParam);
1551  LRESULT lResult;
1552  const _ATL_MSG *previousMessage;
1553  BOOL handled;
1554  LONG_PTR saveWindowProc;
1555 
1556  ATLASSERT(pThis != NULL && (pThis->m_dwState & WINSTATE_DESTROYED) == 0 && pThis->m_hWnd != NULL);
1557  if (pThis == NULL || (pThis->m_dwState & WINSTATE_DESTROYED) != 0 || pThis->m_hWnd == NULL)
1558  return 0;
1559 
1560  hWnd = pThis->m_hWnd;
1561  previousMessage = pThis->m_pCurrentMsg;
1562  pThis->m_pCurrentMsg = &msg;
1563 
1564  handled = pThis->ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult, 0);
1565  ATLASSERT(pThis->m_pCurrentMsg == &msg);
1566 
1567  if (handled == FALSE)
1568  {
1569  if (uMsg == WM_NCDESTROY)
1570  {
1571  saveWindowProc = ::GetWindowLongPtr(hWnd, GWLP_WNDPROC);
1572  lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1573  if (pThis->m_pfnSuperWindowProc != ::DefWindowProc && saveWindowProc == ::GetWindowLongPtr(hWnd, GWLP_WNDPROC))
1574  ::SetWindowLongPtr(hWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(pThis->m_pfnSuperWindowProc));
1575  pThis->m_dwState |= WINSTATE_DESTROYED;
1576  }
1577  else
1578  lResult = pThis->DefWindowProc(uMsg, wParam, lParam);
1579  }
1580  ATLASSERT(pThis->m_pCurrentMsg == &msg);
1581  pThis->m_pCurrentMsg = previousMessage;
1582  if (previousMessage == NULL && (pThis->m_dwState & WINSTATE_DESTROYED) != 0)
1583  {
1584  pThis->m_dwState &= ~WINSTATE_DESTROYED;
1585  pThis->m_hWnd = NULL;
1586  pThis->OnFinalMessage(hWnd);
1587  }
1588  return lResult;
1589  }
#define ATLASSERT(x)
Definition: CComVariant.cpp:9
HWND hWnd
Definition: settings.c:17
#define SetWindowLongPtr
Definition: treelist.c:70
WPARAM wParam
Definition: combotst.c:138
LRESULT DefWindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: atlwin.h:1521
UINT msg
Definition: msvc.h:92
smooth NULL
Definition: ftsmooth.c:416
unsigned int BOOL
Definition: ntddk_ex.h:94
#define WM_NCDESTROY
Definition: winuser.h:1666
#define GWLP_WNDPROC
Definition: treelist.c:66
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define msg(x)
Definition: auth_time.c:54
#define GetWindowLongPtr
Definition: treelist.c:73
LONG_PTR LRESULT
Definition: windef.h:209
LPARAM lParam
Definition: combotst.c:139

Referenced by ATL::CWindowImplBaseT< CToolbar< TASK_ITEM >, CControlWinTraits >::GetWindowProc().

Member Data Documentation

◆ m_pfnSuperWindowProc


The documentation for this class was generated from the following file: