Как и обещалось ранее в предыдущем посте о создании простейшего приложения для Windows Mobile, в этот раз речь пойдет о том, как быстро создать пользовательский интерфейс приложения для Windows Mobile с помощью DialogBlocks. Описывать подробно все аспекты пользования дизайнером пользовательских интерфейсов DialogBlocks я не буду, зато опишу последовательность действий, которая поможет начать пользоваться этим инструментом.

Итак, запускаем DialogBlocks и создаем новый проект (File -> New Project…)

В мастере указываем название проекта и каталог, в котором будет создан файл проекта.

На вкладке настройки параметров класса приложения указываем имя класса приложения, а также задаем имена файлов, в которые будет записан код класса приложения.

На вкладке настройки кодировки проекта указываем кодировки для файла проекта, файлов исходного кода и файлов ресурсов. Лучше всего указать <System>.

Отлично, проект создан и в него добавлен класс приложения. Теперь необходимо создать главное окно приложения. Для этого на панели инструментов жмем кнопку Element и в выпадающем меню выбираем пункт Add Frame.

В окне настройки параметров новой формы указываем имя класса формы и задаем имена файлов исходного кода для новой формы.

Теперь нам необходимо указать классу приложения, какая форма является главной. Для этого в дереве структуры проекта выбираем класс приложения и в окне настройки параметров в свойстве Main window указываем созданную ранее форму.

Теперь можно приступить к добавлению компонентов на форму. Добавляем вертикальный сайзер, в него панель, на нее еще вертикальный сайзер, в него многострочное текстовое поле. Затем на форму добавляем строку меню, на нее меню, в меню пункт меню Open, разделитель и пункт меню Exit

После того как компоненты добавлены, можно приступить к настройке их параметров.

В дереве структуры проекта выбираем панель, в окне свойств панели переходим на вкладку Styles и выставляем флаг wxNO_BORDER.

Переходим на вкладку Sizer, выставляем значение свойства Stretch factor в 1, поле Border в 0 и убираем флажки напротив свойств wxLEFT, wxRIGHT, wxTOP, wxBOTTOM. После всех этих манипуляций наша панель будет занимать все свободное пространство на форме.

В дереве структуры проекта выбираем текстовое поле, в окне свойств текстового поля переходим на вкладку Main и свойству Member variable name задаем значение m_MyTextCtrl.

Переходим на вкладку Sizer и свойство Stretch factor выставляем в 1. Этим мы указываем что текстовое поле должно занимать все свободное место на панели.

В дереве структуры проекта по очереди выбираем пункты меню Open и Exit и для каждого из них на вкладке Event handlers добавляем обработчик события wxEVT_COMMAND_MENU_SELECTED. Это событие выбора пункта меню.

Далее переходим на вкладку cpp и пишем код обработчиков событий для пунктов меню.

void MyMainFrame::OnEXITClick( wxCommandEvent & event )
{
    Close();
}

void MyMainFrame::OnOPENClick( wxCommandEvent & event )
{
    wxFileDialog dlg(this);
    if(dlg.ShowModal() == wxID_OK)
    {
        m_MyTextCtrl->LoadFile(dlg.GetPath());
    }
}

На этом работа непосредственно в DialogBlocks для нас закончена. Сохраняем все и открываем Visual Studio. Создаем новый проект (о том как это сделать я писал ранее) и добавляем в него файлы с исходным кодом, которые были созданы с помощью DialogBlocks.

Настраиваем свойства проекта и все, можно собирать.

Да, тут вот еще какая штука. DialogBlocks отображает создаваемые окна так, как они выглядят в ОС, в которой ведется работа. Т.е. если вы работаете в десктопной версии Windows, то, например, строка меню будет находиться вверху формы, в то время как в Windows Mobile строка меню будет размещаться внизу. Это своего рода неудобство, но со временем на него перестаешь обращать внимание, т.к. строка меню не мешает размещению остальных компонентов на форме и никак на них не влияет.

Вот так выглядит созданная нами форма в дизайнере DialogBlocks.

А вот так она выглядит на устройстве.


Ну вот, собственно, и все.

Previous ArticleNext Article
Технический директор IT-Dimension, компании-разработчика кросс-платформенного программного обеспечения

This post has 17 Comments

17
  1. Увы, что-то я наверное не так сделал(( Выдал:

    1>LINK : warning LNK4068: /MACHINE not specified; defaulting to X86

  2. мм.. посмотри в habrasnake в настройках линкера на последней вкладке там внизу дополнительные параметры линкера. Надо чтобы были такие же.
    Или сделай скринов всех настроек компилятора и линкера и выложи куда-нибудь, может подскажу чего.
    А вобще надо просто чтбы у wxWidgets и твоего проекта настройки были одинаковые.

  3. “А вобще надо просто чтбы у wxWidgets и твоего проекта настройки были одинаковые.”

    Ну смотри: в предыдущей “серии” ты рассказал, как можно сотворить приложение, используя собранную библиотеку wxWinCE, пользуясь только руками(т.е. только VSC++). И у меня все собралось на УРА))
    Конечно если ничего не поможет, то wxWinCE пересоберу(может и впрямь накосячил)

    “посмотри в habrasnake”
    Пардон за серось… ГДЕ??)))

  4. Так… Поковырялся и теперь выводит 16 ошибок вида:

    1>wx_monod.lib(imagjpeg.obj) : error LNK2019: unresolved external symbol jpeg_resync_to_restart referenced in function “void __cdecl wx_jpeg_io_src(struct jpeg_decompress_struct *,class wxInputStream &)” (?wx_jpeg_io_src@@YAXPAUjpeg_decompress_struct@@AAVwxInputStream@@@Z)

  5. По поводу HabraSnake я думал это я тебе отвечал со ссылкой на нее
    https://sourceforge.net/projects/habrasnake/

    По поводу последнего поста, это надо wx_jpeg собрать. Или там у тебя в wxApp::OnInit добавляются handler’ы для форматов изображений, в том числе и для JPEG, вот удали те строчки и этой ошибки не будет.

  6. да, с JPEGом я разобрался(все собрал и подсунул линкеру). Теперь осталось разобраться с

    1>LINK : warning LNK4068: /MACHINE not specified; defaulting to X86

  7. Сравнил по коммандной строке линкера ХабраКобры и МоегоПроекта. Отличия минимальны:
    – в Хабре больше ЛИБов прикручено
    – в доп.опциях у хабры было дописано “/machine:ARM”

    Подправил у себя проектик. Теперь такое:

    1>coredll.lib(COREDLL.dll) : fatal error LNK1112: module machine type ‘THUMB’ conflicts with target machine type ‘ARM’

    P.S. у меня не скомпилировался ни проект по твоей ссылке, ни тот, что у тебя в след. статье =((

  8. ну вот, говорю ж, в настройках линкера на последней вкладке “Command Line” в проекте библиотеки wx_mono посмотри там текстовое поле сдополнительными параметрами. Там и архитектура указана. Вот эту строку скопируй на то же место себе в проект. там по умолчанию другая стоит.

  9. >coredll.lib(COREDLL.dll) : fatal error LNK1112: module machine type ‘THUMB’ conflicts with target machine type ‘ARM’
    Эээ.. а у тебя точно wx под 2003ю WM собрана? и проект тоже под 2003ю? А то для WM5 там другие настройки.

    В общем наверное наделай скринов настроек проекта своего раздел С/С++, Preprocessor, Advanced, Command Line, в линкере General, Input, Command Line

  10. 1>coredll.lib(COREDLL.dll) : fatal error LNK1112: module machine type ‘THUMB’ conflicts with target machine type ‘ARM’

    Та же ошибка. wxWidgets и приложение собрано под WinMob 6, как устранить конфликт?

  11. проверить чтобы в настройках линкера в разделе Advanced было указано что это ARM и в разделе Command Line было то, что и у библиотеки wx_mono

  12. Видимо я не допонимаю, у библиотеки wx_mono нет линкера, есть librarian. В Librarian->Command Line строка другая. Что в разделе Command Line линкера приложения должно быть таким же как у библиотеки wx_mono? wxwidgets 2.8.10

  13. Да, именно так. То что в Librarian ->Command Line у библиотеки, должно быть в Linker->Command Lineу приложения

  14. В Librarian->Command Line только одна строка:
    /OUT:”..\..\lib\evc_armv4t_lib\wx_monod.lib” /NOLOGO
    Ее добавление в Linker приложения ничего не меняет. Остается ошибка 1>coredll.lib(COREDLL.dll) : fatal error LNK1112: module machine type ‘THUMB’ conflicts with target machine type ‘ARM’
    Сравнил строку линкера своего приложения со строкой линкера HabraSnake, то же самое. Может что с библиотекой не так? Свою строку Librarian написал выше.

  15. Вроде разобрался, все работает, только с меню опять проблема. Не работают пункты, особенно выход. Возвращаюсь в тему про первое приложение на WinMobile.

  16. Не работают меню… 2.8.10? Это баг в wx. Где-то в комментариях было как пофиксить. Если лень, то перейти на 2.8.9

Leave a Reply

Your email address will not be published. Required fields are marked *

M.

Mobile Application Blocks new Community Drop (05-21-2009) доступен для скачивания

На CodePlex доступна новая версия библиотеки Mobile Application Blocks.

Из нововведений:

  • Поддержка SQL Server CE 3.5 SP1
  • Утилита ConfigSectionEncrypt для шифровки конфигов
  • Проекты для .NET CF 3.5 и 2.0
  • Улучшения в ContainerModel Block
Н.

Ну почему? Visual Studio 2010 Beta 1 не поддерживает разработку для мобильных устройств

Microsoft делает странное. Самая ожидаемая IDE – Visual Studio 2010 Beta 1 не поддерживает Smart Device Project! И хотя в Microsoft говорят, что работа над Windows Mobile 6.5 уже завершена, ни эмулятора WM6.5 ни средств разработки в новой версии IDE нет. Все это очень странно… в то время как разработка для Google Android и даже для iPhone (для владельцев Mac’ов, естественно) бесплатна, инструментарий от Microsoft можно установить только если есть платная версия Visual Studio, а в новой версии вобще о мобильных устройствах забыли. И это после того, как недавно был анонсирован Windows Marketplace for Mobile, что должно было только увеличить интерес разработчиков.