726 / 428 / 206
Регистрация: 19.12.2016
Сообщений: 1,689
1

wxWidgets wxScrolled<wxWindow>

07.11.2023, 19:39. Показов 932. Ответов 1

Author24 — интернет-сервис помощи студентам
Здравствуйте! Пытаюсь изучить wxWidgets. По видеоурокам простые вещи были понятны, но сейчас пытаюсь читать документацию и это очень трудно в понимании. На данный момент хотел получить прокручиваемое окно. По примерам из видеоуроков и примерам в документации.
Вот такой пример получился.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <wx/wx.h>
 
class MyFrame : public wxFrame
{
public:
    MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
    wxButton* m_button;
};   
 
// ----------------------------------------------------------------------------
// MyApp
// ----------------------------------------------------------------------------
 
class MyApp : public wxApp
{
public:
    virtual bool OnInit();
};
 
 
// ----------------------------------------------------------------------------
// MySizerScrolledWindow
// ----------------------------------------------------------------------------
 
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
    : wxFrame(NULL, wxID_ANY, title, pos, size)
{
    auto panel = new wxScrolled<wxPanel>(this, wxID_ANY);
    panel->SetBackgroundColour("GREEN");
 
    // Set the rate we'd like for scrolling.
 
    panel->SetScrollRate(5, 5);
 
    // Populate a sizer with a 'resizing' button and some other static
    // decoration
 
    wxFlexGridSizer* sizer = new wxFlexGridSizer(2);
 
    m_button = new wxButton(panel, wxID_RESIZE_FRAME, "Press me",
        wxDefaultPosition, SMALL_BUTTON);
 
    sizer->Add(m_button, wxSizerFlags().Centre().Border(wxALL, 20));
    sizer->Add(new wxStaticText(panel, wxID_ANY, "This is just"),
        wxSizerFlags().Centre());
    sizer->Add(new wxStaticText(panel, wxID_ANY, "some decoration"),
        wxSizerFlags().Centre());
    sizer->Add(new wxStaticText(panel, wxID_ANY, "for you to scroll..."),
        wxSizerFlags().Centre());
 
    // Then use the sizer to set the scrolled region size.
 
    panel->SetSizer(sizer);
 
 
}
 
// ----------------------------------------------------------------------------
// MyApp
// ----------------------------------------------------------------------------
 
wxIMPLEMENT_APP(MyApp);
 
bool MyApp::OnInit()
{
    MyFrame* frame = new MyFrame("Hello World", wxDefaultPosition, wxDefaultSize);
    frame->Show(true);
    return true;
}
Окно нормально прокручивается. Но потом я нашел wxScrolled< wxWindow >. Попробовал заменить wxFrame на него.
C++
1
class MyFrame : public wxScrolled<wxWindow>...
C++
1
2
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
    : wxScrolled<wxWindow>(NULL, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL| wxVSCROLL, title)
Программа компилируется, но получаю ошибку, если запущу отладчик, что невозможно создать wxWindow без родителя.
Я думал, если wxWindow является базовым, то и с ним должно работать или это связано с wxScrolled? Может кто-нибудь объяснить? Спасибо!
wxWidgets wxScrolled<wxWindow>
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2023, 19:39
Ответы с готовыми решениями:

wxWidgets и Qt
Решил поднять такой вопрос: &quot;А нужны ли нам wxWidgets, Qt или другие какие кросплатформенные...

wxWidgets
делаю презентацию по теме: Кроссплатформенный текстовый редактор с использованием библиотеки...

wxWidgets 2.9.3
Решил установить wxWidgets 2.9.3. Компилировал с помощью MinGW, вот так mingw32-make -f...

WxWidgets
Надеюсь здесь мне кто то поможет. Мне нужно создать шрифт, который обводит буквы....

1
...
1906 / 1326 / 965
Регистрация: 12.02.2013
Сообщений: 2,171
14.11.2023, 07:06 2
Лучший ответ Сообщение было отмечено ram876 как решение

Решение

Так всё правильно, вы же даже фрейм/панель не создали, он как раз по сути и является контейнером для всех элементов, которые вы будете на нём размещать. Заглядываем в документацию и видим:

wxWidgets wxScrolled<wxWindow>


Т.е. wxWindow не является как таковым окном в вашем понимании, а является любым видимым объектом. Для начала вы должны создать фрейм/панель, а потом уже привязывать к нему какие-либо элементы включая тот же wxScrolled (первый параметр конструктора, обычно передаёте this)
2
14.11.2023, 07:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2023, 07:06
Помогаю со студенческими работами здесь

CodeBlocks и WxWidgets
1. Я поработал немного с CodeBlocks в Виндовс, скомпилировал WxWidgets, создал консольное...

QtCreator + wxWidgets
Возник такой вопрос: возможно ли писать, используя wxWidgets, в QtCreator? Если можно, то как? ...

wxWidgets - деструктор
Добрый день! Имеем: Класс, наследующий от wxFrame, и в этом классе в членах класса объявил свой...

wxWidgets: учебник
Есть ли толковый учебник по wxWidgets на любом языке, лучше на английском? Есть учебник на...

wxWidgets с нуля?
Здравствуйте. Есть человек, который хочет научиться создавать кроссплатформенные приложения с...

wxWidgets и GoogleMaps
Добрый день. Решил написать программу, которая кроме всего прочего загружало бы Google maps....

Изображения в wxWidgets
Доброго времени суток. Ни как не могу понять, как показать в окне wxWidgets изображение. Прочитал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru