windows-nt/Source/XPSP1/NT/shell/shell32/cpduihlp.h
2020-09-26 16:20:57 +08:00

141 lines
4.3 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 2000
//
// File: cpduihlp.h
//
//--------------------------------------------------------------------------
#ifndef __CONTROLPANEL_DUIHELPERS_H
#define __CONTROLPANEL_DUIHELPERS_H
#include "cpviewp.h"
namespace CPL {
HRESULT Dui_FindDescendent(DUI::Element *pe, LPCWSTR pszDescendent, DUI::Element **ppeDescendent);
HRESULT Dui_GetStyleSheet(DUI::Parser *pParser, LPCWSTR pszSheet, DUI::Value **ppvSheet);
HRESULT Dui_SetElementText(DUI::Element *peElement, LPCWSTR pszText);
HRESULT Dui_SetDescendentElementText(DUI::Element *peElement, LPCWSTR pszDescendent, LPCWSTR pszText);
HRESULT Dui_SetDescendentElementIcon(DUI::Element *peElement, LPCWSTR pszDescendent, HICON hIcon);
HRESULT Dui_CreateElement(DUI::Parser *pParser, LPCWSTR pszTemplate, DUI::Element *peSubstitute, DUI::Element **ppe);
HRESULT Dui_CreateElementWithStyle(DUI::Parser *pParser, LPCWSTR pszTemplate, LPCWSTR pszStyleSheet, DUI::Element **ppe);
HRESULT Dui_DestroyDescendentElement(DUI::Element *pe, LPCWSTR pszDescendent);
HRESULT Dui_CreateString(LPCWSTR pszText, DUI::Value **ppvString);
HRESULT Dui_CreateGraphic(HICON hIcon, DUI::Value **ppValue);
HRESULT Dui_GetElementExtent(DUI::Element *pe, SIZE *pext);
HRESULT Dui_GetElementRootHWND(DUI::Element *pe, HWND *phwnd);
HRESULT Dui_SetElementIcon(DUI::Element *pe, HICON hIcon);
HRESULT Dui_MapElementPointToRootHWND(DUI::Element *pe, const POINT& ptElement, POINT *pptRoot, HWND *phwndRoot = NULL);
HRESULT Dui_SetElementProperty_Int(DUI::Element *pe, DUI::PropertyInfo *ppi, int i);
HRESULT Dui_SetElementProperty_String(DUI::Element *pe, DUI::PropertyInfo *ppi, LPCWSTR psz);
HRESULT Dui_CreateParser(const char *pszUiFile, int cchUiFile, HINSTANCE hInstance, DUI::Parser **ppParser);
inline HRESULT
Dui_SetValue(
DUI::Element *pe,
DUI::PropertyInfo *ppi,
DUI::Value *pv
)
{
return pe->SetValue(ppi, PI_Local, pv);
}
#define Dui_SetElementProperty(pe, prop, pv) Dui_SetValue((pe), DUI::Element::##prop, (pv))
#define Dui_SetElementPropertyInt(pe, prop, i) Dui_SetElementProperty_Int((pe), DUI::Element::##prop, (i))
#define Dui_SetElementPropertyString(pe, prop, s) Dui_SetElementProperty_String((pe), DUI::Element::##prop, (s))
inline HRESULT
Dui_SetElementStyleSheet(
DUI::Element *pe,
DUI::Value *pvSheet
)
{
return Dui_SetElementProperty(pe, SheetProp, pvSheet);
}
struct ATOMINFO
{
LPCWSTR pszName;
ATOM *pAtom;
};
HRESULT Dui_AddAtom(LPCWSTR pszName, ATOM *pAtom);
HRESULT Dui_DeleteAtom(ATOM atom);
HRESULT Dui_AddOrDeleteAtoms(struct ATOMINFO *pAtomInfo, UINT cEntries, bool bAdd);
inline HRESULT Dui_AddAtoms(struct ATOMINFO *pAtomInfo, UINT cEntries)
{
return Dui_AddOrDeleteAtoms(pAtomInfo, cEntries, true);
}
inline HRESULT Dui_DeleteAtoms(struct ATOMINFO *pAtomInfo, UINT cEntries)
{
return Dui_AddOrDeleteAtoms(pAtomInfo, cEntries, true);
}
//
// This is a simple smart-pointer class for DUI::Value pointers.
// It's important that the referenced DUI::Value object be released when the
// pointer is no longer needed. Use of this class ensures proper cleanup
// when the object goes out of scope.
//
class CDuiValuePtr
{
public:
CDuiValuePtr(DUI::Value *pv = NULL)
: m_pv(pv),
m_bOwns(true) { }
CDuiValuePtr(const CDuiValuePtr& rhs)
: m_bOwns(false),
m_pv(NULL) { Attach(rhs.Detach()); }
CDuiValuePtr& operator = (const CDuiValuePtr& rhs);
~CDuiValuePtr(void)
{ _Release(); }
DUI::Value *Detach(void) const;
void Attach(DUI::Value *pv);
DUI::Value **operator & ()
{ ASSERTMSG(NULL == m_pv, "Attempt to overwrite non-NULL pointer value");
m_bOwns = true;
return &m_pv;
}
operator !() const
{ return NULL == m_pv; }
bool IsNULL(void) const
{ return NULL == m_pv; }
operator const DUI::Value*() const
{ return m_pv; }
operator DUI::Value*()
{ return m_pv; }
private:
mutable DUI::Value *m_pv;
mutable bool m_bOwns;
void _Release(void);
void _ReleaseAndReset(void);
};
} // namespace CPL
#endif // __CONTROLPANEL_DUIHELPERS_H