понедельник, 2 июля 2018 г.

00.03.01 Пример Hello World! Часть первая. Настройка.

Рассказ о том, как создать очень простое приложение.
Основной источник: http://docs.wxwidgets.org/trunk/overview_helloworld.html.


Запускаем MS VS, создаем пустой проект VisualC++:


Получили пустое решение wxHelloWorld с пустым проектом wxHelloWorld.


В свойствах проекта указываем "Набор символов: Использовать набор символов Юникода":

В свойствах проекта указываем: Linker->System->Subsytem: Windows.
Для конфигурации "WinXP": C/C++->Language->Confirmation mode: No.


Добавляем к проекту файл wxHelloWorld.cpp.

Теперь в свойствах проекта стала доступна ветка "Свойств конфигурации-С/С++".
В свойствах проекта, в опции "Свойств конфигурации-С/С++-Предварительно откомпилированные заголовки" указываем "Создать (Yc)" и выбрать файл stdafx.h.


Добавим в проект новый файл stdafx.h. 
Добавим в файл stdafx.h строчку. 
#include <wx/wxprec.h>

Добавим в класс wxHelloWorld.cpp строчку:
#include "stdafx.h"

Пробуем откомплировать проект. Скорее всего, не получится: 
fatal error C1083: Не удается открыть файл включение: wx/wxprec.h: No such file or directory.

Значит, нужно сделать доступной библиотеку wxWidgets. Можно  прямо указать место, можно включить библиотеку в переменную Path операционной системы. Можно создать макроопределение с путем, и везде использовать это макроопределение.
Создадим макроопределение: Меню-Вид-Диспетчер свойств.
Создаем новую страницу свойств с именем WxDir:


Видим, что во все конфигурации проекта добавилась новая страница WxDir. 

Добавим в нее пользовательский макрос WXWIN, указав в качестве значения макроса путь к библиотеке WxWindows, например: D:\Cpp\Lib\wx:


Теперь этот макрос можно использовать.
Следует на странице свойств для целевых конфигураций (например, для Debug | Win32 и Release | Win32) в разделе Общие свойства- Каталоги С++ указать значения для включаемых каталогов и каталога библиотек:
$(WXWIN)\include;$(WXWIN)\include\msvc;$(IncludePath)
и
$(WXWIN)\lib\vc_lib;$(LibraryPath)
соответственно:

В дальнейшем страницу свойств можно использовать в других проектах WxWidgets.
...
Все, можно компилировать!
..."ошибка"...:
1>LINK : fatal error LNK1561: точка входа должна быть определена
Все верно, точка входа должна быть определена. Да и вообще не написано ни строчки полезного кода.

В wxWidgets, точка входа ("main") реализована в макросе wxIMPLEMENT_APP(), который создает экземпляр класса приложения и запускает цикл обработки событий GUI.
Просто в конец файла wxHelloWorld.cpp добавим строчку 
wxIMPLEMENT_APP (wxHelloWorld);
Класс приложения (здесь - wxHelloWorld) должен наследоваться от класса  wxApp.
В наследнике нужно лишь переопределить виртуальный метод wxApp :: OnInit (), в котором программа может быть инициализирована, например, путем создания и показа нового главного окна. И так, объявляем класс. В итоге wxHelloWorld.cpp должен выглядеть так: 


#include "stdafx.h"

class wxHelloWorld : public wxApp
{
public:
 virtual bool OnInit() { return true;};
};

wxIMPLEMENT_APP(wxHelloWorld);
Код компилируется, приложение собирается, но пока от него толку совсем немного.
Нужно добавит окно и показать его.

Добавляем окно (продолжение).

Комментариев нет:

Отправить комментарий