wxGrid在右边显示大的空边框

时间:2011-10-30 18:12:28

标签: wxwidgets

默认情况下,wxGrid在最后一列之后的右侧显示一个小的(10像素?)空白边框。调用SetMargins()对它没有任何影响。

这很刺激,但我可以忍受它。

但是,如果我将行标签宽度设置为零,则空白边框会变得更大。如果我只有一列,效果太可怕了。看起来wxGrid为不存在的标签留下了空间。

myPatGrid = new wxGrid(panel,IDC_PatGrid,wxPoint(10,10),wxSize(150,300) );
myPatGrid->SetRowLabelSize(0); 
myPatGrid->CreateGrid(200,1);
myPatGrid->SetColLabelValue(0,L"Patient IDs");

有没有办法删除此边框?

enter image description here

请注意,如果我在wxGrid构造函数中将wxgrid窗口的大小设置为更窄,希望隐藏边框,我现在得到一个水平滚动条也很可怕。

myPatGrid = new wxGrid(panel,IDC_PatGrid,wxPoint(10,10),wxSize(100,300) );
myPatGrid->SetRowLabelSize(0); 
myPatGrid->CreateGrid(200,1);
myPatGrid->SetColLabelValue(0,L"Patient IDs");

给我

enter image description here

我刚刚升级到wxWidgets v2.8.12 - 问题仍然存在。

2 个答案:

答案 0 :(得分:1)

我没有找到“自动调整大小”功能来适应网格空间中的列。 作为解决方法,如果只有一列将其宽度设置为

myPatGrid->SetColMinimalWidth(0, grid_width - wxSYS_VSCROLL_X - 10)

否则,将其他列的宽度相加并调整最后一列以适应剩余空间(减去滚动条宽度,减去10)。

编辑:我有一个有效的例子,它产生了这个:

grid example

int gridSize = 150;
int minSize = gridSize - wxSYS_VSCROLL_X - 2; // scrollbar appear if higher
grid->SetRowLabelSize(0);
grid->SetColMinimalWidth(0, minSize);
grid->SetColSize(0, minSize); // needed, otherwise column will not resize
grid->ForceRefresh();
grid->SetColLabelValue(0, "COORD");

EDIT2 :我成功删除剩余的保证金:

int gridSize = 150;
int minSize = gridSize - 16; // trial & error
grid->SetMargins(0 - wxSYS_VSCROLL_X, 0);

enter image description here

答案 1 :(得分:0)

昨天解决类似的事情,我想跟随我的工作做出贡献。也许这会帮助别人:

void RecalculateGridSize(wxGrid *grid, int cols) {
  if (grid == NULL)
    return;

  grid->AutoSizeColumns();

  float cumulative = 0, param = 0;
  for (int i = 0; i < cols; ++i)
    cumulative += grid->GetColSize(i);

  //not stretching when client size lower then calculated
  if(grid->GetClientSize().x < cumulative)
    return;

  param = (float) grid->GetClientSize().x / cumulative;

  for (int i = 0; i < cols; ++i) {
    if (i != cols - 1)
      grid->SetColSize(i, int(grid->GetColSize(i)*param) - 2); //-2 for each line per column
    else
      grid->SetColSize(i, int(grid->GetColSize(i)*param)); //leaving last column full to fill properly
    }
  }

注意:与OnSize()事件链接时,这种做法特别好。