2011-10-30 18 views
3

デフォルトでは、wxGridは、最後の列の後ろの右側に小さな(10ピクセル?)空白の境界線を表示します。 SetMargins()を呼び出しても効果はありません。wxGridは右に大きい空白のボーダーを表示します

刺激的ですが、私はそれと一緒に暮らすことができます。

ただし、行ラベルの幅をゼロに設定すると、空白の境界線がはるかに大きくなります。 1つの列しかなければ、その効果はひどいです。 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"); 

は私がちょうどのwxWidgets v2.8.12にアップグレード

enter image description here

を与えます。

答えて

1

グリッドスペースに列を合わせるための「自動サイズ設定」機能が見つかりませんでした。回避策として 、あなたが1つの列のみを持っている場合は、それ以外

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

にその幅を設定総和他の列の幅と残りのスペース(マイナススクロールバーの幅、マイナス10)を合わせて、最後の1を適応させます。

EDIT

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:私はこれを生産する作業の例を、持っている私はこれで、残りのマージンを削除するsucceded:

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

enter image description here

+0

私はこれを試しました。それは何の違いもないようです。 – ravenspoint

+0

@ravenspoint、明日あなたはまだこの問題を解決する必要がある場合、私は実際の例を試してみます – Sga

+0

私はまだこの問題を解決する必要があります - それは私のアプリのいくつかの外観を火星。 – ravenspoint

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()イベントとリンクされているときに特に効果的です。

関連する問題