#include struct GridCtrl : Ctrl { int cols; double cx; bool ready; GridCtrl() { cols = 5; cx = 1; ready = false; } void ComputeSize() { Size sz = GetSize(); cx = sz.cx / double(cols); } virtual void State(int reason) { if(reason == OPEN) { ComputeSize(); ready = true; } } virtual void Paint(Draw &w) { Size sz = GetSize(); for(int i = 0; i < cols; i++) { Color c = (i & 1) ? Red : Yellow; w.DrawRect(int(i * cx), 0, fceil(cx), sz.cy, c); } ready = true; } virtual void Layout() { if(ready) ComputeSize(); } }; struct App : TopWindow { GridCtrl grid, grid1; EditString edit, edit1; Splitter spl, spl1; TabCtrl tab; App() { Add(tab.SizePos()); // tab.Add(spl.Horz(grid, edit), "Sheet 1"); tab.Add(spl1, "Sheet 2"); Sizeable().Zoomable(); } virtual bool Key(dword key, int count) { if(key == K_SPACE) { spl1.Horz(grid1.SizePos(), edit1); } return false; } }; GUI_APP_MAIN { App().Run(); }