vs 2005/2008/2010 ATL ActiveX控件显示XP风格
2014-02-27 16:06
507 查看
vs 2005/2008/2010 ATL ActiveX控件在IE浏览器中控件显示的是原始的风格,要显示XP风格只要进行以下操作
一、在Stdafx.h中增加下以内容
二、增加CXPStyleAC类
三、在dllmain中创建Active context
四、重写CComCompositeControl的CreateControlWindow方法,在创建控件前激活context
五、编译运行,大功告成
六、参考资料
http://support.microsoft.com/kb/830033/zh-cn
http://blogs.msdn.com/b/junfeng/archive/2006/03/19/sxs-activation-context-activate-and-deactivate.aspx?Redirected=true
一、在Stdafx.h中增加下以内容
#if defined _M_IX86 #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") #elif defined _M_IA64 #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"") #elif defined _M_X64 #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") #else #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") #endif
二、增加CXPStyleAC类
//XPStyleAC.h #pragma once class CXPStyleAC { protected: CXPStyleAC(void); public: ~CXPStyleAC(void); public: static CXPStyleAC* Instance(); BOOL CreateAc(); void DestoryAc(); BOOL ActivateAc(); BOOL DeactiveAc(); private: HANDLE m_hActAc; ULONG_PTR m_ulAcCookie; };
//XPStyleAC.cpp #include "StdAfx.h" #include "XPStyleAC.h" CXPStyleAC::CXPStyleAC(void) : m_hActAc(INVALID_HANDLE_VALUE), m_ulAcCookie(0) { } CXPStyleAC::~CXPStyleAC(void) { } CXPStyleAC* CXPStyleAC::Instance() { static CXPStyleAC oXpStyleAc; return &oXpStyleAc; } BOOL CXPStyleAC::CreateAc() { ATLASSERT(INVALID_HANDLE_VALUE == m_hActAc); BOOL bRet = FALSE; static int s_nModule = 0; MEMORY_BASIC_INFORMATION mbi; ::VirtualQuery(&s_nModule, &mbi, sizeof(mbi)); TCHAR szModule[MAX_PATH]; int n = ::GetModuleFileName((HMODULE)mbi.AllocationBase, szModule, MAX_PATH); ATLENSURE(n > 0); if (n > 0) { // Set up the activation context structure ACTCTX actctx; memset(&actctx, 0, sizeof(actctx)); actctx.cbSize = sizeof(actctx); actctx.hModule = (HMODULE)mbi.AllocationBase; actctx.lpSource = szModule; actctx.lpResourceName = ISOLATIONAWARE_MANIFEST_RESOURCE_ID; actctx.dwFlags = ACTCTX_FLAG_HMODULE_VALID | ACTCTX_FLAG_RESOURCE_NAME_VALID; // Create the activation context m_hActAc = CreateActCtx(&actctx); ATLASSERT(INVALID_HANDLE_VALUE != m_hActAc); if (m_hActAc != INVALID_HANDLE_VALUE) { bRet = TRUE; } } return bRet; } void CXPStyleAC::DestoryAc() { if (m_hActAc != INVALID_HANDLE_VALUE) { ReleaseActCtx(m_hActAc); m_hActAc = INVALID_HANDLE_VALUE; } } BOOL CXPStyleAC::ActivateAc() { BOOL bRet = FALSE; if (m_hActAc != INVALID_HANDLE_VALUE) { bRet = ActivateActCtx(m_hActAc, &m_ulAcCookie); ATLASSERT(bRet); } return bRet; } BOOL CXPStyleAC::DeactiveAc() { BOOL bRet = FALSE; if (m_hActAc != INVALID_HANDLE_VALUE && m_ulAcCookie != 0) { bRet = DeactivateActCtx(0, m_ulAcCookie); ATLASSERT(bRet); } return bRet; }
三、在dllmain中创建Active context
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { if (dwReason == DLL_PROCESS_ATTACH) { CXPStyleAC::Instance()->CreateAc(); } else if (dwReason == DLL_PROCESS_DETACH) { CXPStyleAC::Instance()->DestoryAc(); } return _AtlModule.DllMain(dwReason, lpReserved); }
四、重写CComCompositeControl的CreateControlWindow方法,在创建控件前激活context
六、参考资料
http://support.microsoft.com/kb/830033/zh-cn
http://blogs.msdn.com/b/junfeng/archive/2006/03/19/sxs-activation-context-activate-and-deactivate.aspx?Redirected=true
相关文章推荐
- vs 2005/2008/2010 ATL ActiveX控件显示XP风格
- 关于使Visual Studio 2005/2008/2010开发的MFC程序具有XP风格的问题
- Visual Studio 2008中 显示解决方案管理器中的解决方案节点,VS 2010 高级专业版 序列号
- VS 2008 win32 sdk 应用程序如何打开xp控件外观
- Win32 SDK 应用程序中使用XP控件外观(VS 2008)
- VS2005里自带的日历控件实现点击日期显示当天所更新了内容!
- 关于使Visual Studio 2005/2008开发的程序具有XP风格的问题
- 在VS(2005、2008、2010)的MFC工程中添加flash控件
- VS 2008 显示代码行数/改变程序格式风格
- Visual Studio 2010中的快捷键与小技巧整理(VS 2005、2008同样受用)
- sql 2005 express版本如果安装vs 2010则被sql 2008 express升级代替
- 在WinXP环境下显示XP风格的控件
- 从VS 2010 自带的2008 SQL数据库中的数据导入到 SQL 2005中
- 如何编程实现向Visual Studio的Toolbox添加控件(VS 2003, VS 2005, VS 2008)
- VC6实现XP风格的控件效果(和VC2005一样)
- vs 2008下实现最小化到托盘和tab控件显示多个对话框的两个好博文
- VS 2005 / 2008 / 2010 能否继续使用 ASP.NET 1.x版的DataGrid ????
- 【转】VC2008在工具栏Toolbar里添加XP风格spin box control控件
- vs 2008下实现最小化到托盘和tab控件显示多个对话框的两个好博文
- VS2010 MFC中的Picture控件显示图像