diff options
Diffstat (limited to 'hammer/shellmessagewnd.cpp')
| -rw-r--r-- | hammer/shellmessagewnd.cpp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/hammer/shellmessagewnd.cpp b/hammer/shellmessagewnd.cpp new file mode 100644 index 0000000..a489185 --- /dev/null +++ b/hammer/shellmessagewnd.cpp @@ -0,0 +1,92 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Receives shell commands from other applications and forwards them +// to the shell command handler. +// +// $Workfile: $ +// $Date: $ +// +//----------------------------------------------------------------------------- +// $Log: $ +// +// $NoKeywords: $ +//=============================================================================// + +#include "stdafx.h" +#include "Shell.h" +#include "ShellMessageWnd.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include <tier0/memdbgon.h> + + +static const char *g_pszClassName = "Worldcraft_ShellMessageWnd"; + + +BEGIN_MESSAGE_MAP(CShellMessageWnd, CWnd) + //{{AFX_MSG_MAP(CShellMessageWnd) + ON_WM_COPYDATA() + //}}AFX_MSG_MAP +END_MESSAGE_MAP() + + +//----------------------------------------------------------------------------- +// Purpose: Creates the hidden shell message window. +// Output : Returns true on success, false on failure. +//----------------------------------------------------------------------------- +bool CShellMessageWnd::Create(void) +{ + WNDCLASS wndcls; + memset(&wndcls, 0, sizeof(WNDCLASS)); + wndcls.style = 0; + wndcls.lpfnWndProc = AfxWndProc; + wndcls.hInstance = AfxGetInstanceHandle(); + wndcls.hIcon = NULL; + wndcls.hCursor = NULL; + wndcls.hbrBackground = NULL; + wndcls.lpszMenuName = NULL; + wndcls.cbWndExtra = 0; + wndcls.lpszClassName = g_pszClassName; + + if (!AfxRegisterClass(&wndcls)) + { + AfxMessageBox("Could not register the Hammer shell message window class."); + return(false); + } + + return(CWnd::CreateEx(0, g_pszClassName, g_pszClassName, 0, CRect(0, 0, 10, 10), NULL, 0) == TRUE); +} + + +//----------------------------------------------------------------------------- +// Purpose: Attaches a shell command handler to this message window. All commands +// received by this message window will be sent to the command handler. +// Input : pShell - Shell command handler. NULL disables command processing. +//----------------------------------------------------------------------------- +void CShellMessageWnd::SetShell(CShell *pShell) +{ + Assert(pShell != NULL); + m_pShell = pShell; +} + + +//----------------------------------------------------------------------------- +// Purpose: Handles the WM_COPYDATA message containing the shell command from +// another application. +// Input : pWnd - Temporary CWnd object of the sending window. +// pCopyData - Copy data struct with shell command in the lpData field. +// Output : Returns TRUE on success, FALSE on failure. +//----------------------------------------------------------------------------- +BOOL CShellMessageWnd::OnCopyData(CWnd *pWnd, COPYDATASTRUCT *pCopyData) +{ + if (m_pShell != NULL) + { + if (pCopyData->lpData != NULL) + { + return(m_pShell->RunCommand((const char *)pCopyData->lpData) ? TRUE : FALSE); + } + } + + return(FALSE); +} + |