Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*+
Copyright (c) 1999-2000 Microsoft Corporation
Module Name:
RDPRemoteDesktopClientHost
Abstract:
Author:
Tad Brockway 02/00
Revision History:
--*/
#include "stdafx.h"
#ifdef TRC_FILE
#undef TRC_FILE
#endif
#define TRC_FILE "_crdph"
#include "RDCHost.h"
#include "TSRDPRemoteDesktopClient.h"
#include "RemoteDesktopClientHost.h"
#include <RemoteDesktopUtils.h>
///////////////////////////////////////////////////////
//
// CRemoteDesktopClientHost Methods
//
HRESULT CRemoteDesktopClientHost::FinalConstruct() { DC_BEGIN_FN("CRemoteDesktopClientHost::FinalConstruct");
HRESULT hr = S_OK; if (!AtlAxWinInit()) { TRC_ERR((TB, L"AtlAxWinInit failed.")); hr = E_FAIL; }
DC_END_FN(); return hr; }
HRESULT CRemoteDesktopClientHost::Initialize( LPCREATESTRUCT pCreateStruct ) /*++
Routine Description:
Final Initialization
Arguments:
pCreateStruct - WM_CREATE, create struct.
Return Value:
S_OK on success. Otherwise, an error code is returned.
--*/ { DC_BEGIN_FN("CRemoteDesktopClientHost::Initialize");
RECT rcClient = { 0, 0, pCreateStruct->cx, pCreateStruct->cy }; HRESULT hr; IUnknown *pUnk = NULL;
ASSERT(!m_Initialized);
//
// Create the client Window.
//
m_ClientWnd = m_ClientAxView.Create( m_hWnd, rcClient, REMOTEDESKTOPCLIENT_TEXTGUID, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, 0 );
if (m_ClientWnd == NULL) { hr = HRESULT_FROM_WIN32(GetLastError()); TRC_ERR((TB, L"Window Create: %08X", GetLastError())); goto CLEANUPANDEXIT; } ASSERT(::IsWindow(m_ClientWnd));
//
// Get IUnknown
//
hr = AtlAxGetControl(m_ClientWnd, &pUnk); if (!SUCCEEDED(hr)) { TRC_ERR((TB, L"AtlAxGetControl: %08X", hr)); pUnk = NULL; goto CLEANUPANDEXIT; }
//
// Get the client control.
//
hr = pUnk->QueryInterface(__uuidof(ISAFRemoteDesktopClient), (void**)&m_Client); if (!SUCCEEDED(hr)) { TRC_ERR((TB, L"QueryInterface: %08X", hr)); goto CLEANUPANDEXIT; }
m_Initialized = TRUE;
CLEANUPANDEXIT:
//
// m_Client keeps our reference to the client object until
// the destructor is called.
//
if (pUnk != NULL) { pUnk->Release(); }
DC_END_FN();
return hr; }
STDMETHODIMP CRemoteDesktopClientHost::GetRemoteDesktopClient( ISAFRemoteDesktopClient **client ) /*++
Routine Description:
Arguments:
Return Value:
S_OK on success. Otherwise, an error code is returned.
--*/ { DC_BEGIN_FN("CRemoteDesktopClientHost::GetRemoteDesktopClient");
HRESULT hr;
ASSERT(m_Initialized);
if (m_Client != NULL) { hr = m_Client->QueryInterface(__uuidof(ISAFRemoteDesktopClient), (void **)client); } else { hr = E_FAIL; }
DC_END_FN();
return hr; }
|