mirror of https://github.com/tongzx/nt5src
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.
140 lines
4.3 KiB
140 lines
4.3 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// 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
|
|
|
|
|