Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [wx] Параметры окна (фрейма)


Автор: SolRus 30.8.2011, 02:21
подскажите, как в wxWidgets:
1) заставить создаваться главное окно(фрейм) не посередине экрана?
создается так:
WindowMain * frame = new WindowMain(NULL, -1, _("Первое окно"), wxPoint(150,50),wxSize(400,300));

пересмотрел вроде как полностью весь класс и не понял :(
вот к примеру (кстати накой их две делать было?)
Код

void Center(int dir = wxBOTH)
void Centre(int dir = wxBOTH)

/*  centering into frame rather than screen (obsolete) */
#define wxCENTER_FRAME          0x0000
/*  centre on screen rather than parent */
#define wxCENTRE_ON_SCREEN      0x0002
#define wxCENTER_ON_SCREEN      wxCENTRE_ON_SCREEN

enum wxOrientation
{
    /* don't change the values of these elements, they are used elsewhere */
    wxHORIZONTAL              = 0x0004,
    wxVERTICAL                = 0x0008,

    wxBOTH                    = wxVERTICAL | wxHORIZONTAL,

    /*  a mask to extract orientation from the combination of flags */
    wxORIENTATION_MASK        = wxBOTH
};


я понимаю что можно после создания можно поставить через SetPosition. но как во время создания?

2) пересмотрел все что есть и не нашел метода который бы возвращал (и устанавливал) все переменные (в объекте) данные окна, т.е. на шрифты курсоры положение ,  размер на экране, свернуто развернуто и т.п. Можно сказать на все приватные данные.... или такого не бывает? простое присвоение кидает ошибку.
 smile 

Автор: Amp 30.8.2011, 19:39
А твой MainWindow передает параметры position и size в конструктор базового класса (wxFrame)? И к сведению - то, что ты указываешь окну позицию и размер, носит рекомендательный характер. В какое место и с какими размерами поместить окно решает менеджер окон операционной системы, которую ты используешь.

Шрифты там стандартные, получаешь через wxSystemSettings, позицию курсора через wxGetMousePosition, для прочего IsIconized/IsMaximized/IsFullScreen и т.п.

Автор: SolRus 30.8.2011, 20:06
Amp,
1. конструктор
Код

class WindowMain : public wxFrame 
{
public:
    WindowMain( wxWindow* parent, wxWindowID id, const wxString& title, 
        const wxPoint& pos, const wxSize& size, 
        long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );
};
позиция только после создания можно изменить.. во время создания не хочет. к чему здесь менеджер окон то?

2. а нету такого метода чтоб сразу все это получить? (позиция курсора не обязательно, а вот остальное связанное с настройкой окна нужно - внешний вид, но без хендлов и т.п.). я понимаю что можно все методы переискать и присвоить, хотелось бы один метод, как бы сериализация объекта.

Автор: Amp 30.8.2011, 20:25
SolRus, декларация конструктора для меня бесполезна smile Нужна реализация - убедись, что она выглядит примерно так:
Код

WindowMain(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxFrame(parent, id, title, pos, size, style)
{
 ....
}

т.е., что pos и size передаются в конструктор базового класса. Про менеджер окон я сказал просто к сведению.

Нет, все сразу не получишь. На моей памяти единственный контрол в wxWidgets, который позволял сериализовать/десериализовать настройки своего вида в строку - это wxAuiManager (методами Load/SavePerspective).

Автор: SolRus 30.8.2011, 20:38
Amp, да инициализация фрейма такая как ты и написал. оно  почему то центрирует его
использую версию 2.9.1 может ошибка из-за того что не релизная?  smile 

Цитата(Amp @ 30.8.2011,  20:25)
Нет, все сразу не получишь. На моей памяти единственный контрол в wxWidgets, который позволял сериализовать/десериализовать настройки своего вида в строку - это wxAuiManager (методами Load/SavePerspective).

это печально :( и прискорбно)

Автор: Amp 30.8.2011, 21:01
Цитата(SolRus @  30.8.2011,  20:38 Найти цитируемый пост)
да инициализация фрейма такая как ты и написал. оно  почему то центрирует его
использую версию 2.9.1 может ошибка из-за того что не релизная?

Если можешь - выложи минимальный пример кода, который можно собрать и проверить.

Автор: SolRus 30.8.2011, 21:38
блин ой я дурень. вощем создавал через wxFormBuilder и незаметил что я наклацал для главного окна 
this->Centre( wxBOTH );
а когда писал мин код руками получилось все правильно
Код

#include <wx/wx.h>
class MyApp : public wxApp
{
public:
   virtual bool OnInit();
};

class WindowMain : public wxFrame 
{
public:
    WindowMain( wxWindow* parent, wxWindowID id, const wxString& title, 
        const wxPoint& pos, const wxSize& size, 
        long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );
    ~WindowMain();
};

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
    if (!wxApp::OnInit() ) return false;
    WindowMain * frame = new WindowMain(NULL, wxID_ANY, _("Первое окно"), wxPoint(150,50),wxSize(400,300));
    frame->Show(); 
     return true;
}

WindowMain::WindowMain( wxWindow* parent, wxWindowID id, const wxString& title, 
                    const wxPoint& pos, const wxSize& size, long style )
                        : wxFrame( parent, id, title, pos, size, style ) {}
WindowMain::~WindowMain() {}

Вообщем учитывая что сразу получить нельзя все свойства окна, то тема ичерпана.
ps: тебе спасибо  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)