ToolBar的一个奇怪现象
ToolBar的一个奇怪现象
将CyberArticle Express工具栏修改成标准的Windows工具栏(使用CToolBarCtrl),结果发现一个奇怪的现象:
如果工具栏按钮包含下拉按钮BTNS_DROPDOWN,而且工具栏具有TBSTYLE_EX_DRAWDDARROWS和TBSTYLE_FLAT风格,则工具栏按钮在某些情况下,会变得很大(例如更改Theme,或者某些系统下面,锁定计算机,然后再恢复)。
经过检查,原来这是COMCTL32的一个问题:在MFC的CToolBar这个类里面,修复了这个问题,但是CToolBarCtrl没有修复这个问题。
下面是bartool.cpp里面的一段说明
// In comctl32 version 6.00 when using XP Look combined with TBSTYLE_EX_DRAWDDARROWS
// style minimal sizing policy was changed to be
// button.height >= image.height + 13
// button.width >= image.width + 16
// this force buttons to be bigger then usual
// To override this behavior we should remove TBSTYLE_EX_DRAWDDARROWS prior to sizing operations
//
在CToolBarCtrl派生类里面,增加消息处理。下面的代码,是从bartool.cpp里面找到的。
ON_MESSAGE(WM_SETTINGCHANGE, OnPreserveZeroBorderHelper)
ON_MESSAGE(WM_SETFONT, OnPreserveZeroBorderHelper)
LRESULT CWizToolBarCtrlEx::OnPreserveZeroBorderHelper(WPARAM, LPARAM)
{
int _afxComCtlVersion = _AfxGetComCtlVersion();
//
BOOL bModify = FALSE;
ASSERT(_afxComCtlVersion != -1);
DWORD dwStyle = 0;
DWORD dwStyleEx = 0;
if (_afxComCtlVersion >= VERSION_IE4)
{
dwStyle = GetStyle();
bModify = ModifyStyle(0, TBSTYLE_TRANSPARENT|TBSTYLE_FLAT);
if ((_afxComCtlVersion >= VERSION_6) && ::IsWindow(m_hWnd))
{
dwStyleEx = SetExtendedStyle(GetExtendedStyle() &~ TBSTYLE_EX_DRAWDDARROWS);
}
}
LRESULT lResult = Default();
if (bModify)
{
SetWindowLong(m_hWnd, GWL_STYLE, dwStyle);
}
if (dwStyleEx & TBSTYLE_EX_DRAWDDARROWS)
{
SetExtendedStyle(dwStyleEx);
}
return lResult;
}
处理后可以解决这个问题
最近评论