windows-nt/Source/XPSP1/NT/shell/shdocvw/hlink.cpp
2020-09-26 16:20:57 +08:00

139 lines
2.5 KiB
C++

#include "priv.h"
class CMyHlink : public IHlink
{
public:
// *** IUnknown methods ***
virtual HRESULT __stdcall QueryInterface(REFIID riid, LPVOID * ppvObj);
virtual ULONG __stdcall AddRef(void) ;
virtual ULONG __stdcall Release(void);
// *** IOleWindow methods ***
virtual HRESULT __stdcall SetHlinkSite(IHlinkSite *pihlSite);
virtual HRESULT __stdcall GetHlinkSite(IHlinkSite **ppihlSite);
virtual HRESULT __stdcall GetMonikerReference(
IMoniker **ppimk,
LPWSTR *ppwzLocation);
virtual HRESULT __stdcall GetStringReference(LPWSTR *ppwzRefString);
virtual HRESULT __stdcall GetFriendlyName(LPWSTR *ppwzFriendlyName);
virtual HRESULT __stdcall Navigate(
IHlinkFrame *pihlFrame,
DWORD grfHLNF,
LPBC pbc,
DWORD dwbscCookie,
IBindStatusCallback *pibsc,
IHlinkBrowseContext *pihlbc);
protected:
CMyHlink();
~CMyHlink();
UINT _cRef;
IHlinkSite* _pihlSite;
IMoniker* _pmk;
TCHAR _szLocation[MAX_PATH];
};
CMyHlink::CMyHlink(IMoniker* pmk, LPCTSTR pszLocation, LPCSTR pszFriedlyName)
: _cRef(1), _pihlSite(NULL), _pmk(pmk)
{
if (_pmk) {
_pmk->AddRef();
}
if (pszLocation) {
lstrcpy(_szLocation, pszLocation);
} else {
_szLocation[0] = '\0';
}
}
CMyHlink::~CMyHlink()
{
if (_pmk) {
_pmk->Release();
}
if (_pihlSite) {
_pihlSite->Release();
}
}
HRESULT CMyHlink::QueryInterface(REFIID riid, LPVOID * ppvObj)
{
}
ULONG CMyHlink::AddRef(void)
{
return ++_cRef;
}
ULONG CMyHlink::Release(void)
{
if (--_cRef > 0) {
return _cRef;
}
delete this;
return 0;
}
HRESULT CMyHlink::SetHlinkSite(IHlinkSite *pihlSite)
{
if (_pihlSite) {
_pihlSite->Release();
}
_pihlSite = pihlSite;
if (_pihlSite) {
_pihlSite->AddRefe();
}
return S_OK;
}
HRESULT CMyHlink::GetHlinkSite(IHlinkSite **ppihlSite)
{
*ppihlSite = _pihlSite;
if (_pihlSite) {
_pihlSite->AddRefe();
}
return S_OK;
}
HRESULT CMyHlink::GetMonikerReference(
IMoniker **ppimk,
LPWSTR *ppwzLocation)
{
if (ppimk) {
*ppimk = _pmk;
if (_pmk) {
_pmk->AddRef();
}
}
// Handle ppwszLocation as well!
return S_OK;
}
HRESULT CMyHlink::GetStringReference(LPWSTR *ppwzRefString)
{
return E_NOTIMPL;
}
HRESULT CMyHlink::GetFriendlyName(LPWSTR *ppwzFriendlyName)
{
}
HRESULT CMyHlink::Navigate(
IHlinkFrame *pihlFrame,
DWORD grfHLNF,
LPBC pbc,
DWORD dwbscCookie,
IBindStatusCallback *pibsc,
IHlinkBrowseContext *pihlbc);