您的位置:首页 > 编程语言 > PHP开发

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

2015-05-21 15:18 549 查看
界面库的原理先搞清楚就好办了,大部分都是采用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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  VC Win8 codejock bug