`

动态改变Composite中的子控件时,用layout()而非redraw() ,用CTabFolder的例子进行说明

 
阅读更多
{
  Composite topComp = null;
  // ...

  // CTabFolder
  CTabFolder tabFolder = new CTabFolder(topComp, SWT.TOP | SWT.BORDER);
  GridData gd = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
  gd.horizontalSpan = 20;
  tabFolder.setLayoutData(gd);
  tabFolder.setTabHeight(30);
  tabFolder.setSimple(true);
  tabFolder.marginHeight = 0;
  tabFolder.marginWidth = 0;
  Font font = null;
  // font = FontFactory.getFont("Arial", 8, SWT.BOLD);

  // CTabItem
  CTabItem item2 = new CTabItem(tabFolder, SWT.NULL);
  item2.setText("Pins");
  item2.setFont(font);
  // ----
  Group pinsGroup = new Group(tabFolder, SWT.FILL);
  pinsGroup.setText("Pins");
  Color color = null;
  pinsGroup.setBackground(color /* ColorFactory.getColor(255, 255, 255) */);
  pinsGroup.setLayout(new RowLayout());

  // 动态填充 pinsGroup的内容
  setDynamicData(pinsGroup);

  item2.setControl(pinsGroup);

  // ============================================

 }

 public void setDynamicData(Composite pinsGroup) {
  // 1.清除掉原来的 子控件
  Control[] controls = pinsGroup.getChildren();
  for (int i = 0; i < controls.length; i++) {
   controls[i].dispose();
  }
  // 2. 数据填充,例如:
  for (int i = 0; i < 20; i++) {
   final CLabel pinLabel = new CLabel(pinsGroup, SWT.CENTER);
   pinLabel.setText("pinLabel:"+i);
   RowData rowData = new RowData();
   rowData.height = 20;
   rowData.width =40;
   pinLabel.setLayoutData(rowData);
  }
  
  //3. layout--->这是关键(用pinsGroup.redraw();//这个还是没有效果)
  pinsGroup.layout(); 
  /*markLayout()这是源码中的真正实现,只有设置了.layout(),参数changed才为true,才有动态改变的效果
   * -----执行---->if (all) {...}分支
  void markLayout (boolean changed, boolean all) {
   if (layout != null) {
    state |= LAYOUT_NEEDED;
    if (changed) state |= LAYOUT_CHANGED;
   }
   if (all) {
    Control [] children = _getChildren ();
    for (int i=0; i<children.length; i++) {
     children [i].markLayout (changed, all);
    }
   }
  }*/
  //pinsGroup.redraw();
  /*设置.redraw()后的内部实现,参数all为false-----执行---->OS.RedrawWindow (handle, null, 0, flags);
  void redraw (boolean all) {
   if (!OS.IsWindowVisible (handle)) return;
   if (OS.IsWinCE) {
    OS.InvalidateRect (handle, null, true);
   } else {
    int flags = OS.RDW_ERASE | OS.RDW_FRAME | OS.RDW_INVALIDATE;
    if (all) flags |= OS.RDW_ALLCHILDREN;
    OS.RedrawWindow (handle, null, 0, flags);
   }
  }*/
 }
分享到:
评论

相关推荐

    动态创建控件DynamicMultiCtrls

    在编程领域,动态创建控件是一项重要的技术,尤其在用户界面设计中,它允许程序根据运行时的需求或用户输入自动生成界面元素。标题中的“动态创建控件DynamicMultiCtrls”特指这种技术的一个实例,主要涉及到如何在...

    动态改变对话框控件大小

    5. **窗口重绘(Redraw)**:当控件大小改变时,需要重新绘制以确保其正确显示。这通常涉及到OnPaint()消息的处理,以及可能的CRect对象的调整,以更新控件的边界。 6. **WM_SIZE消息**:Windows消息系统中的WM_...

    动态生成任意张图片控件

    在IT行业中,动态生成任意张图片控件是一个常见的需求,特别是在网页开发、移动应用或桌面应用设计中。这种功能使得程序可以根据用户的需求或者特定逻辑在界面上动态地创建和显示多张图片。以下是对这个主题的详细...

    VB6.0中msflexgrid控件的使用

    例如,`Click`事件响应单击,`KeyDown`事件响应按键,`ColResize`事件则在列宽改变时触发。 5. **数据绑定**:`MSFlexGrid`可以与数据源绑定,例如数据库,以实时更新显示的数据。这通常通过`DataSource`和`Data...

    VB6.0 QRMAKER 条码二维码生成控件

    在编程过程中,你可以通过VB6.0的事件处理程序与QRMAKER控件交互,如响应按钮点击事件,动态改变条码或二维码的数据内容。此外,还可以使用控件的`Redraw`方法刷新显示,以反映最新的设置变化。 在实际的应用场景中...

    MTK控件开发及使用说明

    【MTK控件开发及使用说明】 MTK控件是专为MediaTek(MTK)平台设计的一种用户界面元素,用于提升用户体验。本文档主要针对"Shortcut bar"控件进行详细解析,它是一种用于增强界面美观性和操作性的图标快捷方式功能...

    ChartCtrl控件库(可在VS2019中使用)

    **ChartCtrl控件库在VS2019中的使用** `ChartCtrl`是一个在MFC(C++编程框架)中用于创建图表和数据可视化的控件库。它在Visual Studio 2010版本中被广泛使用,而随着VS2019的发布,开发者们自然希望能够在新的IDE...

    MTK控件开发及使用说明.doc

    ### MTK控件开发及使用说明 #### 一、背景介绍与目的 在移动设备的交互设计中,特别是在MTK6235平台下,为了提高用户体验和界面美观度,通常需要开发定制化的控件来满足特定的需求。本文档旨在详细介绍如何在MTK...

    共享一个c#快速画图控件,使用很方便,

    2. 创建控件:在窗体上添加ZedGraphControl对象,这可以在设计时通过拖放或者在代码中创建。 3. 初始化数据:你需要准备要显示的数据,并将其转化为ZedGraph所需的格式,如点集(PointPairList)、曲线集...

    vb6控件参考手册-各种控件的使用

    - 控件的性能优化:避免过多的控件更新,合理使用Redraw和Repaint属性。 - 用户体验提升:考虑控件的响应速度、反馈机制和无障碍设计。 综上所述,VB6控件参考手册涵盖了从基础到高级的各种控件使用方法,通过...

    数据波形显示控件Graph在VC++中的应用举例

    在VC++编程环境中,开发图形用户界面(GUI)时,我们常常需要利用各种控件来展示数据或执行特定任务。ActiveX技术提供了一种跨平台的解决方案,它允许开发人员集成由不同供应商创建的组件,其中包括用于图形显示的...

    MFC界面控件美化

    控件重绘则是在控件状态改变时,如尺寸调整、焦点切换等,动态更新控件的显示效果。 文件名称"SkinControls(自绘MFC基本控件 )"可能是一个包含自定义皮肤的库或示例代码,用于演示如何对MFC的基础控件进行自定义...

    msflexgrid控件的函数说明

    **msflexgrid控件**是Microsoft Visual C++中一个经典的多行多列数据显示控件,常用于Windows应用程序开发。这个控件提供了灵活的布局和数据展示能力,允许开发者创建类似于电子表格的用户界面。在本篇文章中,我们...

    物联型串口屏开发 LUA教程5—控件读写操作函数说明

    本教程“物联型串口屏开发 LUA教程5—控件读写操作函数说明”将深入探讨如何利用LUA API函数对串口屏上的控件进行读取和修改,从而提升用户界面的动态性和响应性。 首先,我们需要理解LUA的基本语法和特性。LUA是一...

    MFC VS2010 图片控件+滚动条

    6. **OnSize事件**:当窗口大小改变时,需要更新滚动条的属性,以保持图片与控件之间的比例关系。因此,重写OnSize函数是必要的,以确保滚动条与图片控件的大小变化同步。 7. **自绘(Redraw)逻辑**:由于图片可能...

    vc6.0调用plotline二维坐标曲线activex控件示例1

    在本文中,我们将深入探讨如何在Visual C++ 6.0(简称VC6.0)环境中使用PlotLine二维坐标曲线ActiveX控件。ActiveX控件是一种可重用的软件组件,它允许开发者在不同应用程序中插入、使用和交互各种功能。PlotLine...

    对C#的树型控件TREEVIEW添加背景图片

    在C#编程中,开发用户界面时,我们经常会用到各种控件,其中树型控件(TreeView)是一个常用的数据展示工具,它用于显示层次结构的数据。然而,标准的TreeView控件默认的样式可能显得相对单一,特别是其白色的背景。...

    vc中间添加图表控件

    在VC++的MFC(Microsoft Foundation Classes)框架中,添加图表控件是一项常见的任务,用于在应用程序中展示数据。这通常涉及到使用图形用户界面(GUI)元素来创建动态的、可视化的数据表示。"vc中间添加图表控件"这...

    VB程序,通过PictureBox控件实现的动态曲线

    在VB(Visual Basic)编程环境中,PictureBox控件是一种非常实用的元素,它可以用来显示图像、图形甚至是动态的图像效果。本教程将详细讲解如何利用VB6.0中的PictureBox控件来实现动态曲线的绘制。 首先,我们要...

    Labview 3D控件的简单应用

    在LabVIEW中,3D控件的应用为用户提供了创建和展示三维模型的能力,使得数据呈现更加直观和生动。 一,3D 简述 3D技术,即三维技术,是指基于三个坐标轴(X、Y、Z)构建的立体空间概念。它不仅包含长度、宽度,还有...

Global site tag (gtag.js) - Google Analytics