Второе окно в программе Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Второе окно в программе

Post by midisa »

Как правильно мне сделать? Мне нужно чтобы из главного окна можно было вызвать другое окно (настроек программы).

Скажите последовательность моих действий.

Непонятны такие моменты:
1. Нужно сделать другой проект или добавить новое окно к текущему проекту?
2. Создал например я второе окно. Это будут другие исходные файлы ... как мне вызывать отображение одного окна из другого?
3. Если окна разные ... как передавать события из одного окна в другое. В винде я создавал свои события и отлавливал события дочернего окна в основном окне. А как тут это дело происходит? Покажите простой пример (если такое возможно)
Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Re: Второе окно в программе

Post by Mojo »

midisa wrote:Как правильно мне сделать? Мне нужно чтобы из главного окна можно было вызвать другое окно (настроек программы).

Скажите последовательность моих действий.

Непонятны такие моменты:
1. Нужно сделать другой проект или добавить новое окно к текущему проекту?
2. Создал например я второе окно. Это будут другие исходные файлы ... как мне вызывать отображение одного окна из другого?
3. Если окна разные ... как передавать события из одного окна в другое. В винде я создавал свои события и отлавливал события дочернего окна в основном окне. А как тут это дело происходит? Покажите простой пример (если такое возможно)
Нужно решить, окно будет фреймом или диалогом.
Другой проект добавлять не нужно.
В папке samples, есть примеры приложений на эту тему.
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Re: Второе окно в программе

Post by midisa »

Mojo wrote:
midisa wrote:Как правильно мне сделать? Мне нужно чтобы из главного окна можно было вызвать другое окно (настроек программы).

Скажите последовательность моих действий.

Непонятны такие моменты:
1. Нужно сделать другой проект или добавить новое окно к текущему проекту?
2. Создал например я второе окно. Это будут другие исходные файлы ... как мне вызывать отображение одного окна из другого?
3. Если окна разные ... как передавать события из одного окна в другое. В винде я создавал свои события и отлавливал события дочернего окна в основном окне. А как тут это дело происходит? Покажите простой пример (если такое возможно)
Нужно решить, окно будет фреймом или диалогом.
Другой проект добавлять не нужно.
В папке samples, есть примеры приложений на эту тему.
Я нашел какие то семплы у себя на компе, но там вообще не в тему. Дайте пожалуйста ссылку на примеры.
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa »

Я разобрался как создать второе окно в программе.
Как из главного окна, которое отображено дать команду отображения другого окна которое еще не отображено.

Делаю так:
void FrmPass::m_bp_create_uid_click( wxCommandEvent& event )
{
FrmSetup dlg;
dlg->Show(true);
}

А ему не нравится! Как правильно сделать? Не сочтите за труд, дайте ссылку на примеры или бросьте его куда нибудь.
Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo »

midisa wrote:Я разобрался как создать второе окно в программе.
Как из главного окна, которое отображено дать команду отображения другого окна которое еще не отображено.

Делаю так:
void FrmPass::m_bp_create_uid_click( wxCommandEvent& event )
{
FrmSetup dlg;
dlg->Show(true);
}

А ему не нравится! Как правильно сделать? Не сочтите за труд, дайте ссылку на примеры или бросьте его куда нибудь.
dlg это не указатель, поэтому через стрелку нельзя, нужно типа dlg.Show();

Поищу у себя пример, если найду подходящий кину.
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo »

вот пример.... был как говорится "под носом" в меню этого форума "wxWidgets tutorial" http://zetcode.com/tutorials/wxwidgetstutorial/dialogs/ смысл думаю будет понятен.

Ток диалог заменить фреймом.
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa »

Mojo wrote:вот пример.... был как говорится "под носом" в меню этого форума "wxWidgets tutorial" http://zetcode.com/tutorials/wxwidgetstutorial/dialogs/ смысл думаю будет понятен.
Ток диалог заменить фреймом.
Смотрел я этот текст. Вообще не понятен смысл.
Вот класс окна который создан:
#include "gui.h"
/** Implementing FrmSetup */
class FormSetup : public FrmSetup
{
public:
/** Constructor */
FormSetup( wxWindow* parent );
};

Как я должен дать команду, чтобы отобразить это окно?
Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo »

midisa wrote:
Mojo wrote:вот пример.... был как говорится "под носом" в меню этого форума "wxWidgets tutorial" http://zetcode.com/tutorials/wxwidgetstutorial/dialogs/ смысл думаю будет понятен.
Ток диалог заменить фреймом.
Смотрел я этот текст. Вообще не понятен смысл.
Вот класс окна который создан:
#include "gui.h"
/** Implementing FrmSetup */
class FormSetup : public FrmSetup
{
public:
/** Constructor */
FormSetup( wxWindow* parent );
};

Как я должен дать команду, чтобы отобразить это окно?
вот код из примера minimal что в каталоге samples

Code: Select all


// 'Main program' equivalent: the program execution "starts" here
bool MyApp::OnInit()
{
    // call the base class initialization method, currently it only parses a
    // few common command-line options but it could be do more in the future
    if ( !wxApp::OnInit() )
        return false;

    // create the main application window
    MyFrame *frame = new MyFrame(_T("Minimal wxWidgets App"));

    // and show it (the frames, unlike simple controls, are not shown when
    // created initially)
    frame->Show(true);

    // success: wxApp::OnRun() will be called which will enter the main message
    // loop and the application will run. If we returned false here, the
    // application would exit immediately.
    return true;
}
В функции "main" (в данном случае OnInit() ) мы создаем динамически фрейм MyFrame *frame = new MyFrame(_T("Minimal wxWidgets App"));
Если главное окно должно быть диалоговым, то создаем не фрейм, а диалог. Если кроме главного фрейма есть еще и диалоги, то так же динамически создаем и диалоги.

Затем по мере необходимости вызываем Show(true) для фрейма (понятно, что если фрейм главное окно, то показываем его сразу при запуске frame->Show(true); ) или же если для диалога, то ShowModal() или "НеМодал", то бишь просто Show().

Более подробно, все обовсем этом рассказывается тут:
http://docs.wxwidgets.org/stable/wx_helloworld.html
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa »

Делаю так:
#include "Setup.h"
....
FormSetup *frame = new FormSetup(wxT("Minimal wxWidgets App"));
frame->Show(true);

При сборке пишет ошибку:
FrmPwd.cpp: In member function ‘virtual void FrmPass::m_bp_add_click(wxCommandEvent&)’:
FrmPwd.cpp:188: error: no matching function for call to ‘FormSetup::FormSetup(const wchar_t [22])’

Чего то не получается у меня .... что не правильно делаю, что понять не могу.

Уточняю. Мне нужно открыть окно настроек из главного окна.
Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo »

midisa wrote:Делаю так:
#include "Setup.h"
....
FormSetup *frame = new FormSetup(wxT("Minimal wxWidgets App"));
frame->Show(true);

При сборке пишет ошибку:
FrmPwd.cpp: In member function ‘virtual void FrmPass::m_bp_add_click(wxCommandEvent&)’:
FrmPwd.cpp:188: error: no matching function for call to ‘FormSetup::FormSetup(const wchar_t [22])’

Чего то не получается у меня .... что не правильно делаю, что понять не могу.

Уточняю. Мне нужно открыть окно настроек из главного окна.

Окно настроек, как правило является диалогом, т.е. открыть нужно не другой фрейм а диалог.

Следовательно, сначала нужно объявить диалог а потом его вызвать через Show() или ShowModal()
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
midisa
Earned some good credits
Earned some good credits
Posts: 113
Joined: Tue Jun 22, 2010 4:15 pm
Contact:

Post by midisa »

Mojo wrote:
midisa wrote:Делаю так:
#include "Setup.h"
....
FormSetup *frame = new FormSetup(wxT("Minimal wxWidgets App"));
frame->Show(true);
При сборке пишет ошибку:
FrmPwd.cpp: In member function ‘virtual void FrmPass::m_bp_add_click(wxCommandEvent&)’:
FrmPwd.cpp:188: error: no matching function for call to ‘FormSetup::FormSetup(const wchar_t [22])’
Чего то не получается у меня .... что не правильно делаю, что понять не могу.
Уточняю. Мне нужно открыть окно настроек из главного окна.
Окно настроек, как правило является диалогом, т.е. открыть нужно не другой фрейм а диалог.
Следовательно, сначала нужно объявить диалог а потом его вызвать через Show() или ShowModal()
Вся моя проблема, что я не знаю английский язык и отказываюсь читать текст на английском языке.

После того как я внимательно посмотрел ошибку (вы ее тоже процитировали) строка 188, он говорит, что там нет ни какого текстового параметра. Он просит передать в функцию не текст, а идентификатор главного окна. т.к. мы отображаем модальное окно, то в качестве идентификатора можно передать NULL.
После этих простых операций все отлично пошло.
т.е. все было правильно, только нужно было убрать текст:

FormSetup *frame = new FormSetup(NULL);
frame->ShowModal();
или
frame->Show();
одинаково.
Post Reply