Поиск:

Ответ в темуСоздание новой темы Создание опроса
> wxFrame проблемы Iconize Maximize Move SetSize, должно работать, но не работает 
:(
    Опции темы
JavaCraft
  Дата 3.11.2008, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 8.2.2007

Репутация: нет
Всего: 1



В родительском окне нужен плавающий фрейм с кнопками wxMINIMIZE(=wxICONIZE), wxMAXIMIZE и восстановление, но без кнопки wxCLOSE
Исходное состояние №1 фрейма = wxICONIZE и заданные координаты X0,Y0

Двойной клик по заголовку должен перевести его из начального состяния в состояние №2 с заданным размером(во всю ширину экрана и по высоте примерно 1/5) и другими заданными координатами X1,Y1 в нижней части экрана.

Состояние №3 это видоизмененное состояние №2 с большей высотой окна фрейма. Для пошагового изменения высоты во фрейме созданы специальные кнопки.

Двойной клик по заголовку в состояни №2 или №3 должен перевести его в состояние №4 wxMAXIMIZE
Двойной клик по заголовку в состоянии №4 должен перевести его в исходное состояние №2 или №3 в зависимости от предыдущего

Клик по кнопке wxMINIMIZE должен минимизировать фрейм в состяние №1 с исходными координатами.

Для этого Создаю Фрейм в родительском окне.
Код

class InfoFrame: public wxFrame
{...
InfoFrame( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("Information Window"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 1280,140 ), long style = wxCAPTION|wxFRAME_FLOAT_ON_PARENT|wxFRAME_TOOL_WINDOW|wxICONIZE|wxMAXIMIZE_BOX|wxMINIMIZE|wxMINIMIZE_BOX|wxRESIZE_BORDER|wxSTAY_ON_TOP );
...
}


Код

InfoFrame* fr1 = new  InfoFrame(this);
fr1->Show();


Проблема сразу - Фрейм создается без кнопок в заголовке, так что нет возможности его Минимизировать(Иконизировать).
Кнопки появляются только вместе с wxCLOSE, в стиле обычного окна(несколько окон в панели задач) и с включенным системным меню.
Всё это мне не нужно.

Тогда добавил во фрейм свои кнопки, выполняющие эти функции, но они работают крайне странно. Независимо от команд, они только максимизируют окно, даже по команде Iconize(). Вот обработчики этих кнопок.
Установить флаги во время исполнения также не получилось. Кнопки либо зависают, либо только максимизируют фрейм.

Код

void InfoFrame::OnMin( wxCommandEvent& event )
{
//Maximize(false);

   Iconize(true);
   Move(500,500);

//SetWindowStyleFlag(GetWindowStyleFlag()|wxMINIMIZE|wxICONIZE);
//Refresh();
//SendSizeEvent();
}

void InfoFrame::OnMax( wxCommandEvent& event )
{
  Maximize(true);
//   long S = this->GetWindowStyleFlag();
//  SetWindowStyleFlag(GetWindowStyleFlag()|wxMAXIMIZE);
//  SendSizeEvent();
//  Refresh();
}

void InfoFrame::OnMinView( wxCommandEvent& event )
{

            Maximize(false);
        SetSize(1280,140);
        Move(0,860);
/*
            int h = m_parent->GetRect().height;
            int w = m_parent->GetRect().width;
            int y = m_parent->GetRect().y;

            SetSize(w,140);
            Move(0,y+h-140);
            Refresh();

*/
}

void InfoFrame::OnNormal( wxCommandEvent& event )
{
    Maximize(false);
    SetSize(1280,245);
    Move(0,755);

    /*
        int h = m_parent->GetRect().height;
        int w = m_parent->GetRect().width;
        int y = m_parent->GetRect().y;
            Maximize(false);
        SetSize(w,245);
        Move(0,y+h-245);
        Refresh();
   */

}



Туплю уже второй день. В интернете всё безоблачно, в документации ничего на этот счет не нашел.
PM MAIL   Вверх
JavaCraft
Дата 3.11.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 8.2.2007

Репутация: нет
Всего: 1



Еще можно добавить, что Максимизация надежно работает только при двойном клике по заголовку.
В разных попытках у меня не работала функция Maximize(), как и все прочие, но заголовок работал почти всегда.

Windows 2000, Code::Blocks 8.02, wxWidgets 2.8.9
PM MAIL   Вверх
t_rex
Дата 3.11.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 11.10.2006
Где: Украина, г. Запор ожье

Репутация: 2
Всего: 7



Можешь демо-проект целиком выложить? Попробую помочь.

Это сообщение отредактировал(а) t_rex - 3.11.2008, 19:19
--------------------
Жизнь не MultiEdit. Undo не сделаешьКросс-платформенное программирование с wxWidgetsБлог о программировании для мобильных устройтсвGoogle Android для программистов и пользователей
PM MAIL WWW ICQ Skype GTalk   Вверх
JavaCraft
Дата 3.11.2008, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 8.2.2007

Репутация: нет
Всего: 1



Проблема была связана со стилем WXFRAME_TOOL_WINDOW и без WXSYSTEM_MENU, да еще на других платформах косяки могли вылезти.
Подумал над этими трудностями и решил всё упростить и кардинально изменить концепцию.

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

Пришел к выводу, что правильнее будет согласится с дефолтными стилями и не использовать фреймы в качестве подписей к объектам.
Создаю один фиксированный фрейм внизу экрана, с дефолным стилем и флагами запрещающими отображать его в панели задач.
Разрешаю отображение и использование wxCLOSE_BOX, т.к. в новой версии это окно будет создаваться по нажатии на подпись объекта на изображдении, если оно отсутсвует, и в него будет загружаться актуальная информация. Подписи реализую не фреймами, а на основе чего-нибудь более подходящего.

В общем, так и вышел из положения.

Стиль фрейма
Код

wxDEFAULT_FRAME_STYLE|wxFRAME_FLOAT_ON_PARENT|wxFRAME_NO_TASKBAR




PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.