#ifndef _COMMON_COMMONCONTROLSEX_HPP_
#define _COMMON_COMMONCONTROLSEX_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_COMMCTRL_HPP_
#include <common/commctrl.hpp>
#endif

class CommonControlsEx : private tagINITCOMMONCONTROLSEX
{
public:
  enum InitFlags{InitListView=ICC_LISTVIEW_CLASSES,InitTreeView=ICC_TREEVIEW_CLASSES,
	  InitBar=ICC_BAR_CLASSES,InitTab=ICC_TAB_CLASSES,InitUpDown=ICC_UPDOWN_CLASS,
		InitProgress=ICC_PROGRESS_CLASS,InitHotKey=ICC_HOTKEY_CLASS,InitAnimate=ICC_ANIMATE_CLASS,
		InitWin95=ICC_WIN95_CLASSES,InitDate=ICC_DATE_CLASSES,InitUserEx=ICC_USEREX_CLASSES,
		InitCoolBar=ICC_COOL_CLASSES};
	CommonControlsEx(void);
	CommonControlsEx(const CommonControlsEx &someCommonControlsEx);
	CommonControlsEx(const tagINITCOMMONCONTROLSEX &sometagINITCOMMONCONTROLSEX);
	virtual ~CommonControlsEx();
	CommonControlsEx &operator=(const CommonControlsEx &someCommonControlsEx);
	CommonControlsEx &operator=(const tagINITCOMMONCONTROLSEX &sometagINITCOMMONCONTROLSEX);
	DWORD flags(void)const;
	void flags(DWORD flags);
	BOOL initCommonControlsEx(void);
	tagINITCOMMONCONTROLSEX &getINITCOMMONCONTROLSEX(void);
private:
  DWORD size(void)const;
	void size(DWORD size);
};

inline
CommonControlsEx::CommonControlsEx(void)
{
  size(sizeof(tagINITCOMMONCONTROLSEX));
	flags(0);
}

inline
CommonControlsEx::CommonControlsEx(const CommonControlsEx &someCommonControlsEx)
{
  size(sizeof(tagINITCOMMONCONTROLSEX));
  *this=someCommonControlsEx;
}

inline
CommonControlsEx::CommonControlsEx(const tagINITCOMMONCONTROLSEX &sometagINITCOMMONCONTROLSEX)
{
  size(sizeof(tagINITCOMMONCONTROLSEX));
  *this=sometagINITCOMMONCONTROLSEX;
}

inline
CommonControlsEx::~CommonControlsEx()
{
}

inline
CommonControlsEx &CommonControlsEx::operator=(const CommonControlsEx &someCommonControlsEx)
{
  flags(someCommonControlsEx.flags());
	return *this; 
}

inline
CommonControlsEx &CommonControlsEx::operator=(const tagINITCOMMONCONTROLSEX &sometagINITCOMMONCONTROLSEX)
{
  flags(sometagINITCOMMONCONTROLSEX.dwICC);
	return *this;
}

inline
DWORD CommonControlsEx::flags(void)const
{
  return tagINITCOMMONCONTROLSEX::dwICC;
}

inline
void CommonControlsEx::flags(DWORD flags)
{
  tagINITCOMMONCONTROLSEX::dwICC=flags;
}

inline
DWORD CommonControlsEx::size(void)const
{
  return tagINITCOMMONCONTROLSEX::dwSize;
}

inline
void CommonControlsEx::size(DWORD size)
{
  tagINITCOMMONCONTROLSEX::dwSize=size;
}

inline
tagINITCOMMONCONTROLSEX &CommonControlsEx::getINITCOMMONCONTROLSEX(void)
{
  return (tagINITCOMMONCONTROLSEX&)*this;
}

inline
BOOL CommonControlsEx::initCommonControlsEx(void)
{
  if(!flags())return FALSE;
	return ::InitCommonControlsEx(&getINITCOMMONCONTROLSEX());
}
#endif
