在U ++中滚动窗口

时间:2014-04-24 11:25:36

标签: c++ scroll scrollbar

我目前正在使用U ++ IDE编写Windows应用程序。一个用于数据输入的窗口包含的显示字段多于可以放入单个屏幕的字段,因此我想在窗口中添加一个滚动条。到目前为止,非常好,我查了ScrollBar example on the U++ page并尝试在我的应用程序中实现它。我的问题是 - 它只是不滚动。我怀疑它与我的应用程序有多个窗口有关,但我不确定。以下是我的应用程序的结构:

GUI_APP_MAIN {
    MainWindow app;
    ...
    app.Run();
}

struct MainWindow : TopWindow {
    PatientFrame dlg;
    ...
    // Opens window that displays a patient overview
    void new_patient() {
        ...
        dlg.Execute();
}

    ...

struct PatientFrame : TopWindow {
    ProcessFrame proc;
    ...
    // Opens the window that should have a scrollbar
    void new_process() {
        ...
       proc.Execute();
    }
}

struct ProcessFrame : TopWindow {
    ...
    // Nearly 1:1 from the example
    ScrollBar sb;

    virtual void Layout() {
        sb.SetPage(GetSize().cy);
    }

    virtual void MouseWheel(Point, int zdelta, dword) {
        sb.Wheel(zdelta);
    }

    bool Key(dword key, int) {
       return sb.VertKey(key);
    }

    // n is the number of entryfields I have, each entryfield is 21 pixels high
    void SetCount(int n) {
        sb.SetTotal(n * 21);
    }

    void Scroll() {
        Refresh();
    }

    void buildList() {
        // Constructs the contents of the window
        ...
        // Sets the size for the scrollbar
        SetCount(count);
    }

    ...

    typedef ProcessFrame CLASSNAME;

    ProcessFrame() {
        SetRect(0, 0, 720, 435);
        Title("Process Frame").Sizeable().Zoomable();
        ...
        AddFrame(sb);
        sb.WhenScroll = THISBACK(Scroll);
        sb.SetLine(21);
    }
}

现在滚动条本身显示得很好。它的大小似乎也设置正确,因为当我调整窗口大小时,滚动条会调整自身,当我调整大小时,同样的事情。我也试过玩一行大小,再次,滚动条调整得很好。唯一的问题是,它实际上并没有滚动视图区域。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

你似乎跳过了实际读取滚动条的部分(这在原始示例的Draw中发生)。滚动条不会自行调整任何内容,该示例确实根据其位置移动实际绘制的数字。我对U ++没有多少经验,但我想你需要扩展滚动条的回调来调整小部件。刷新前的位置。