折叠的groupbox

分享于 

5分钟阅读

Web开发

  繁體

介绍

首先,我的英语很抱歉,我来自乌克兰。 : )
主要的想法是使一个折叠的groupbox。 我找到了大量需要的C# groupboxes,但在 C++ 中没有。 在开始时,我没有时间创建它,所以我使用了这里描述的类 。 修正了一些 Bug 并编写了几个函数之后,我得到了一个很。

如何使用它

你必须在对话框中包含一个类标题h file:

#include<spanclass="code-string">"CollapseGroupBox.h"</span>

然后将groupbox变量的基类从 CStatic 或者 CButton 更改为 CollapseGroupBox
例如:

// beforeCStatic m_st1;
CStatic m_st2;
CStatic m_st3;
CStatic m_st4;

更改为:

//afterCollapseGroupBox m_st1;
CollapseGroupBox m_st2;
CollapseGroupBox m_st3;
CollapseGroupBox m_st4;

如果没有groupbox的变量,请使用类向导来创建它们。 为它们选择"控件"类别。

使用代码

首先,如果tmodel有标题字符串并且你喜欢标题对齐,那么你的对话框就不可以能获得了。 不过,我将给你简要介绍如何使用这个类。
我们来讨论一下标题。
标题变量是 SS_LEFTSS_CENTERSS_RIGHT:

BOOL CGBdemoDlg::OnInitDialog()
{
...// default caption alignment is RIGHT. To change it follow code 上面 m_st2.SetAlignment(SS_LEFT); // left caption alignment m_st4.SetAlignment(SS_CENTER); // center caption alignment...
} 

我的对话框有 4个 groupboxes。 groupbox 1和 3将具有正确的标题对齐方式。

你还可以根据需要更改框的可视化。 这些函数允许修改颜色:

SetBorderColor(COLORREF clrBorder);
SetCatptionTextColor(COLORREF clrText);
SetBackgroundColor(COLORREF clrBKTilte);

这些- 修改标题字符串及其可视化效果:

SetText(LPCTSTR lpszTitle);
SetFontBold(BOOL bBold);
SetFontName(const CString& strFont, BYTE byCharSet = ANSI_CHARSET);
SetFontUnderline(BOOL bSet);
SetFontItalic(BOOL bSet);
SetFontSize(int nSize);
SetFont(LOGFONT lf);
SetAlignment(DWORD dwType);

如果对话框 BGColor 不是 COLOR_BTNFACE,请使用函数 setBGColor(COLORREF bgColor); 来实现良好的background 可视化。

现在,让我们来讨论一下。

std::vector<cwnd*/> intoElements; // vector of groupbox's componentsbool m_frameMinimized; // Header-Only Style flagBOOL IsInGroupBox(CWnd* pCtrl) const;void GetGroupBoxElements();void ShowElements(bool bShow);

我们看到了,在groupbox中有一个元素的向量,位于groupbox中。 函数 IsInGroupBox 告诉我们一个元素的位置,函数 GetGroupBoxElements 检查对话框中所有内容的位置并填充向量。 如果你愿意,你可以用自己的手填写。 : )

intoElements.push_back(GetDlgItem(ELEMENT_ID));

现在最有趣的是。 在我的对话框中,box4位于box3中。 而且,如果没有这里代码,则塌陷操作将不正确:

BOOL CGBdemoDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
 if (wParam == UM_UPDATEFORM)
 {// groupbox changed his state (Header-Only Style/Full State)if (lParam == (LPARAM)m_st3.m_hWnd)
 {
 if (m_st3.m_frameMinimized == false)
 m_st4.SetFrameExpand(m_st4.m_frameMinimized);
 }
 }
 if (wParam == UM_MOUSELEAVE)
 {// mouse leaves groupbox }
 if (wParam == UM_MOUSEENTRY)
 {// mouse comes to groupbox }
 return CDialog::OnCommand(wParam, lParam);
}

Our发送三种消息变体:

  • 鼠标离开 groupbox
  • mouse来到 groupbox
  • groupbox更改了状态

我们可以控制我们需要的一切。 例如在我的应用程序( 不在本演示中) 中,我使用 UM_UPDATEFORM 垂直调整对话框的大小来隐藏空闲空间。

关于动态创建的几个单词。 尝试这个:

m_boxMain.Create(_T("Caption"),WS_CHILD | WS_VISIBLE | 
 BS_GROUPBOX,CRect(xxx,xxx,xxx,xxx),this,ELEMENT_ID);

关于 "在groupbox中看不到任何控件"中最热门的问题之一。
最简单的答案是在编辑器中打开对话框,选择 groupbox,Ctrl+C,Del,Ctrl+V,一切都会正常。 : )
或者你可以添加 private 函数来改变矢量 intoElements 中的z-order 或者元素,并将它的放到 GetGroupBoxElements的末尾。

历史记录

  • 第八个 2009年10月: 初始版本

COL  Group  折叠  Groupbox  
相关文章