多年前,我在应用程序的工具栏中添加了一个编辑控件,遵循以下类似的指示:
http://www.codeproject.com/Articles/1106/Adding-a-Combo-Box-to-a-Docking-Toolbar
在许多文章中都可以找到类似的指示,所以我认为这个程序很常见。直到几年前,这个工作正常,结果如文章所示。但是,我相信转向XP改变了工具栏中按钮的外观,而我现在在我的应用程序中看到了这一点:
似乎原始说明只是因为更改前的控件占据了工具栏的整个高度,因此编辑控件阻碍了它后面的分隔符。
理想情况下,我认为底层分隔符应该是不可见的。但是,这似乎没有在我发现的任何文章中明确处理,我不太确定自己如何防止绘制分隔符。
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
答案 1 :(得分:1)
如果您在codeproject上完全遵循该文章,您可能已经将占位符从按钮修改为分隔符。这就是当按钮图像的高度大于组合框的高度时显示的分隔线的原因。
如果您将占位符保留为空按钮,则不会出现此问题。在级联编队中可能需要一系列几个占位符按钮,以便为组合框提供真正有用的长度。
该技术演示如下:
// standard creation of the toolbar in CMainFrame::OnCreate
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
// status bar creation .....
// .....
// the place holders are a series of 5 empty toolbar buttons ie: ID_COMBO_1 to ID_COMBO_5
// get index of first combobox place holder
INT nIndex = m_wndToolBar.GetToolBarCtrl().CommandToIndex(ID_COMBO_1);
// get size of first place holder rectangle
CRect rcRect;
m_wndToolBar.GetToolBarCtrl().GetItemRect(nIndex, &rcRect);
INT nWidth = rcRect.Width();
// calculate width of combobox with sum of all place holder (5 in total)
nWidth = nWidth * 5;
rcRect.top = 5; // top of combo box
rcRect.bottom = rcRect.top + 250; // drop height
rcRect.right = rcRect.left + nWidth;
// create the combobox to sit above the place holders
if(!m_comboBox.Create(CBS_DROPDOWNLIST | CBS_SORT | WS_VISIBLE |
WS_TABSTOP | WS_VSCROLL, rcRect, &m_wndToolBar, ID_COMBO_1))
{
TRACE(_T("Failed to create combo-box\n"));
return FALSE;
}
m_comboBox.AddString("Toolbar Combobox item one");
m_comboBox.AddString("Toolbar Combobox item two");
m_comboBox.AddString("Toolbar Combobox item three");