/*
	CVSNT Generic API - Activate XP controls
    Copyright (C) 2004 Tony Hoyle and March-Hare Software Ltd

	Probably public domain.  From google groups.
*/
/* _EXPORT */
#ifndef MANIFEST__H
#define MANIFEST__H

#ifdef __AFXWIN_H__

class CActivateManifest
{
public:
	CActivateManifest() : m_ulActivationCookie(0), m_hActCtx(0)
	{
		BOOL bRet = Init();

		if (bRet && m_hActCtx && (INVALID_HANDLE_VALUE != m_hActCtx))
			ActivateActCtx(m_hActCtx, &m_ulActivationCookie);
	}

	virtual ~CActivateManifest()
	{
		if (m_hActCtx && (m_hActCtx!= INVALID_HANDLE_VALUE))
		{
			DeactivateActCtx(0, m_ulActivationCookie);
			ReleaseActCtx(m_hActCtx);
		}
	}

private:
	ULONG_PTR m_ulActivationCookie;
	HANDLE m_hActCtx;

	BOOL Init()
	{
		BOOL bRet = FALSE;
		BOOL bTemp = FALSE;

		OSVERSIONINFO info = { 0 };
		info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

		bTemp = GetVersionEx(&info);
		if (bTemp)
		{
			//do special XP theme activation code only on XP or higher...
			if ( (info.dwMajorVersion >= 5) ||
				 (info.dwMajorVersion == 5 && (info.dwMinorVersion >= 1)) &&
				 (info.dwPlatformId == VER_PLATFORM_WIN32_NT))
			{
				ACTCTX actctx = {0};
				TCHAR szModule[MAX_PATH] = {0};

				HINSTANCE hinst = AfxGetInstanceHandle();
				::GetModuleFileName(hinst, szModule, MAX_PATH);

				actctx.cbSize = sizeof(ACTCTX);
				actctx.dwFlags = ACTCTX_FLAG_HMODULE_VALID |
				ACTCTX_FLAG_RESOURCE_NAME_VALID;

				actctx.lpSource = szModule;
				actctx.lpResourceName = MAKEINTRESOURCE(2);
				actctx.hModule = hinst;

				m_hActCtx = ::CreateActCtx(&actctx);
				if (INVALID_HANDLE_VALUE != m_hActCtx)
					bRet = TRUE;
			}
		}

		return bRet;
	}
}; 

#endif

#endif

syntax highlighted by Code2HTML, v. 0.9.1