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

После долгого перерыва решил снова заняться разработкой для Windows Mobile – доработать программу-переводчик, использующую Google Translate. В программе используется wxChoice cо списком языков. Так как поддерживаемых языков довольно много, то общая высота списка 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; }
В результате получаем вот такой результат:
Еще интересные посты о программировании для мобильных устройств:
1 Comment
Make A CommentComments RSS Feed TrackBack URL
August 16th, 2009 at 23:56
Да. С этой проблемой я тоже сталкивался. Дело в том, что параметр height в WM используется для определения высоты dropdown’а, а высота самого контрола всегда остаться неизменной. Проблемму решил корректировкой исходного кода wxChoice.
P.S. Также заметил: если использовать сайзеры, wxComboBox всегда находиться в верхнем левом углу экрана, т.е. координаты всегда равны нулю. Возможно эта проблема есть только в моей версии wxWidgets 2.8.10. Другие версии я пока не пробывал.