Page 1 of 1

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

Posted: Thu Aug 12, 2010 5:52 am
by midisa
Как правильно мне сделать? Мне нужно чтобы из главного окна можно было вызвать другое окно (настроек программы).

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

Непонятны такие моменты:
1. Нужно сделать другой проект или добавить новое окно к текущему проекту?
2. Создал например я второе окно. Это будут другие исходные файлы ... как мне вызывать отображение одного окна из другого?
3. Если окна разные ... как передавать события из одного окна в другое. В винде я создавал свои события и отлавливал события дочернего окна в основном окне. А как тут это дело происходит? Покажите простой пример (если такое возможно)

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

Posted: Thu Aug 12, 2010 6:54 am
by Mojo
midisa wrote:Как правильно мне сделать? Мне нужно чтобы из главного окна можно было вызвать другое окно (настроек программы).

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

Непонятны такие моменты:
1. Нужно сделать другой проект или добавить новое окно к текущему проекту?
2. Создал например я второе окно. Это будут другие исходные файлы ... как мне вызывать отображение одного окна из другого?
3. Если окна разные ... как передавать события из одного окна в другое. В винде я создавал свои события и отлавливал события дочернего окна в основном окне. А как тут это дело происходит? Покажите простой пример (если такое возможно)
Нужно решить, окно будет фреймом или диалогом.
Другой проект добавлять не нужно.
В папке samples, есть примеры приложений на эту тему.

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

Posted: Thu Aug 12, 2010 9:02 am
by midisa
Mojo wrote:
midisa wrote:Как правильно мне сделать? Мне нужно чтобы из главного окна можно было вызвать другое окно (настроек программы).

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

Непонятны такие моменты:
1. Нужно сделать другой проект или добавить новое окно к текущему проекту?
2. Создал например я второе окно. Это будут другие исходные файлы ... как мне вызывать отображение одного окна из другого?
3. Если окна разные ... как передавать события из одного окна в другое. В винде я создавал свои события и отлавливал события дочернего окна в основном окне. А как тут это дело происходит? Покажите простой пример (если такое возможно)
Нужно решить, окно будет фреймом или диалогом.
Другой проект добавлять не нужно.
В папке samples, есть примеры приложений на эту тему.
Я нашел какие то семплы у себя на компе, но там вообще не в тему. Дайте пожалуйста ссылку на примеры.

Posted: Thu Aug 12, 2010 3:31 pm
by midisa
Я разобрался как создать второе окно в программе.
Как из главного окна, которое отображено дать команду отображения другого окна которое еще не отображено.

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

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

Posted: Thu Aug 12, 2010 4:01 pm
by Mojo
midisa wrote:Я разобрался как создать второе окно в программе.
Как из главного окна, которое отображено дать команду отображения другого окна которое еще не отображено.

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

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

Поищу у себя пример, если найду подходящий кину.

Posted: Fri Aug 13, 2010 3:37 pm
by Mojo
вот пример.... был как говорится "под носом" в меню этого форума "wxWidgets tutorial" http://zetcode.com/tutorials/wxwidgetstutorial/dialogs/ смысл думаю будет понятен.

Ток диалог заменить фреймом.

Posted: Sat Aug 14, 2010 12:12 pm
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 );
};

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

Posted: Sat Aug 14, 2010 1:15 pm
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

Posted: Sat Aug 14, 2010 3:15 pm
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])’

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

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

Posted: Sun Aug 15, 2010 2:32 pm
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()

Posted: Mon Aug 16, 2010 5:14 am
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();
одинаково.