Aug
16

Странности с dropdown-окном в wxComboBox/wxChoice в Windows Mobile

Google Buzz

После долгого перерыва решил снова заняться разработкой для Windows Mobile – доработать программу-переводчик, использующую Google Translate. В программе используется wxChoice cо списком языков. Так как поддерживаемых языков довольно много, то общая высота списка wxChoice получается много больше чем высота экрана КПК. В результате получаем что-то подобное:

Ошибка в вычислении размера dropdown-окна в wxComboBox/wxChoice

После долгих поисков на форуме wxWidgets понял что с этой проблемой уже сталкивались неоднократно другие разработчики, но решения рабочего явно не было.

Перепробовав разные комбинации SetSize()/SetInitialSize()/SetMinSize()/SetMaxSize() нашел вот какое решение:

Если установить размер клиентской области для wxChoice после появления окна, то изменения применяются и получаем нормальный размер выпадающего списка. Если это делать при создании формы, то изменения не применяются.

bool wxGoogleTranslateClientApp::OnInit()
{
        wxGoogleTranslateClientMainFrame* mainWindow = new wxGoogleTranslateClientMainFrame( NULL );
        mainWindow->Show(true);
        // Очень плохое решение, но только оно и работает
        mainWindow->m_SourceLanguageChoice->SetClientSize(
                mainWindow->m_SourceLanguageChoice->GetClientSize().GetWidth(), 120);
        mainWindow->m_ResultLanguageChoice->SetClientSize(
                mainWindow->m_ResultLanguageChoice->GetClientSize().GetWidth(), 120);
    return true;
}

В результате получаем вот такой результат:
wxComboBox/wxChoice Dropdown Size Problem Fixed

Еще интересные посты о программировании для мобильных устройств:

1 Comment

Make A Comment
  • a gravatardeniman Said:

    Да. С этой проблемой я тоже сталкивался. Дело в том, что параметр height в WM используется для определения высоты dropdown’а, а высота самого контрола всегда остаться неизменной. Проблемму решил корректировкой исходного кода wxChoice.

    P.S. Также заметил: если использовать сайзеры, wxComboBox всегда находиться в верхнем левом углу экрана, т.е. координаты всегда равны нулю. Возможно эта проблема есть только в моей версии wxWidgets 2.8.10. Другие версии я пока не пробывал.

Comments RSS Feed   TrackBack URL

Leave a comment

Please leave these two fields as-is:
Магазин Овечка рукоделие журналы. Все для вышивания ; кабельные муфты соединительные

top