Codejock Xtreme ToolkitPro v15.0 在HOOK控件后导致滚动条不正常bug及修复

界面库的原理先搞清楚就好办了,大部分都是采用HOOK WinProc来实现界面美化,所有先从HOOK开始入手,很多问题慢慢就清晰了...

这个深坑有几个月了,一直没闲功夫去认真阅读它的整个代码框架,今天翻阅了一个小时,总算有点头绪了,只需要一行代码即可解决~~

当然,它在WIN8.1/10上面还有无数的坑,原版CODEJOCK记得有不下10处需要改动,其他的慢慢调吧 偷笑 .....

实际上SetHook内部也过滤掉了很多类名,反正在这里也过滤掉你自己的窗口类名就行了

CXTPSkinObject* CXTPSkinManager::SetHook(HWND hWnd, LPCTSTR lpszClassName, LPCREATESTRUCT lpcs, BOOL bAuto)
{
	if (_tcscmp(lpszClassName, _T("tooltips_class32")) == 0)
		return NULL;

	if (_tcsicmp(lpszClassName, _T("IME")) == 0)
		return NULL;

	if(_tcsicmp(lpszClassName,_T("CicMarshalWndClass"))== 0)
		return NULL;

	if(_tcsicmp(lpszClassName,_T("MSCTFIME UI"))== 0)
		return NULL;

	CXTPSkinObject* pSink = NULL;

	if (pSink == NULL && _tcsstr(lpszClassName, _T("WindowsForms")) != NULL)
	{

		CString strClass(lpszClassName);
		int nClassNameStart = strClass.Find(_T('.'));
		int nClassNameEnd = strClass.Find(_T('.'), nClassNameStart + 1);

		if (nClassNameStart != -1 && nClassNameEnd != -1 && nClassNameEnd != nClassNameStart)
		{
			strClass = strClass.Mid(nClassNameStart + 1, nClassNameEnd - nClassNameStart - 1);

			CXTPSkinObjectClassInfo* pInfo = m_pClassMap->Lookup(strClass);

			if (pInfo)
			{
				pSink = pInfo->CreateObject(lpszClassName, lpcs);
			}
		}

		if (pSink == NULL)
		{
			pSink = new CXTPSkinObjectApplicationFrame();
		}

		pSink->m_bWindowsForms = TRUE;
	}

	if (pSink == NULL)
	{
		CXTPSkinObjectClassInfo* pInfo = m_pClassMap->Lookup(lpszClassName);

		if (pInfo)
		{
			pSink = pInfo->CreateObject(lpszClassName, lpcs);
		}
		else
		{
			if (_tcsstr(lpszClassName, _T("Internet Explorer")) != NULL)
				return NULL;

			if (_tcsstr(lpszClassName, _T("OleMainThread")) != NULL)
				return NULL;

			pSink = new CXTPSkinObjectApplicationFrame();
		}
	}

	if (pSink && _tcscmp(lpszClassName, _T("#32770")) == 0)
	{
		((CXTPSkinObjectFrame*)pSink)->m_dwDialogTexture = IsTabPage(lpcs) ? ETDT_ENABLETAB : ETDT_ENABLE;
	}

	if (pSink)
	{

		pSink->m_pManager = this;
		{
			CXTPLockGuard lock(m_csObjects);
			m_mapObjects[hWnd] = pSink;
		}

		pSink->AttachHook(hWnd, lpcs, bAuto);
	}

	return pSink;
}


☆ 资料说明:☆ 专业级MFC界面控件套装,包含命令工具栏、浮动面板和属性网格,支持最近的Visual Studio 2010和Windows7风格; 压缩包内包括安装程序和注册机; ☆ 软件简介:☆ Codejock Software 创建于 1998 年,专业开发 MS Visual Studio 开发环境下的组件,便于 VC 开发人员轻松开发出各种界面,如类似 VC++6.0 的开发界面、 Outlook 界面等,并支持 XP 风格。由于功能的完善, Extreme Toolkit 被许多大公司采用。 2003 年 Codejock 公司加快开发,开发出一系列界面组件,包括 Extreme Toolkit 4.1 , Extreme Toolkit Pro , Extreme Suite 等组件包,支持开发环境也从 VC++5/ 6 升 级到 VC++.NET 和 VB ,而且支持 Windows XP 、 OfficeXP/2003 、 Outlook2003 、 Visual Studio 2005 等风格主题。目前是 VC/VB 和 .NET 开发环境下最好的界面开发组件之一。 Codejock 软件公司的 Xtreme Toolkit Pro 提供了 Xtreme Toolkit 标准版的所有特性,以及 Xtreme Suite 中的所有高级特性,包括 Xtreme 控制栏(Xtreme Command Bars)—— 把需要创建的具有改进对接算法的所有组件提供给 Windows 的图形用户界面(GUI)工程师,这些组件用来创建具有 Microsoft Office XP 风格的工具栏和菜单、 Xtreme 浮动面板(Xtreme Docking Pane)—— 把所有组件提供给 Windows 的图形用户界面(GUI)工程师,这些组件用来创建具有改进 Visual Studio.NET 风格的浮动面板、 Xtreme 属性网格(Xtreme Property Grid)—— 把完善的 Visual Studio.NET 风格的属性网格提供给 Windows 的图形用户界面(GUI)工程师。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪宁宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值