Почему я стал программировать на wxWidgets

November 23rd, 2009 Begemot Posted in Программирование

Уже не первый раз задают этот вопрос, решил написать развернутый ответ, возможно в немного вольном стиле, вечер, после релиза, однако.

Выбор это я сделал 2 с копейками года назад. Почему именно wxWidgets? Знаете какой был самый распространенный ответ в нашем вузе на вопрос “а как ты попал в ХАИ?” – “Случайно”:) Вот почти так же и я выбрал wxWidgets.

Тогда я писал на MFC и уже давно, сношений опыта с другими фреймворками не имел. Все вокруг говорили что MFC, или уже умер или умрет буквально сегодня-завтра. Вот и побудило меня это задуматься, на тему поиска новых библиотек. К тому же на мфц я писал уже давно и долго, руки чесались – хотелось чего-то новенького. Плюс к тому времени произошел, первый скачек перехода от количественных изменений к качественным в моей карьере, я еще не совсем понимая что есть хороший код, уже понимал, что все что я писал до этого это  – ужас, и легче переписать проекты с нуля чем довести их до ума. В общем нужен был новый толчок и  я решил поискать на чем бы их переписать.

  • WINAPI – я сразу отбросил ввиду низкоуровневости. Я на нем не писал, но слышал много страшилок.
  • ATL\WTL – вроде как идеально подходил для моего класса утилит, и я думал его попробовать, хотя и смущала низкоуровневость, но руки не дошли.
  • MFC – уже был пройденный этап
  • QT – его все хвалили, но лицензия… это потом он стал бесплатным, а тогда стоил более чем приличных денег. Сейчас уже можно использовать почти свободно, но все равно остаются проблемы с ненативностью, скоростью и размером, в общем для моих продуктов не подходит.
  • HTMLLayout – наверное весьма приятная и перспективная штука, по крайней мере многие хвалят. Но css для меня темный лес и даже хуже, писать _красивые_ интерфейсы на хтмл я тоже с роду не умел, даже не стал смотреть.
  • Delphi – хоть  его все и хвалили, в свете применимости для шаровары, в качестве средства для быстрого написания быстрых шароварок, но ведь это не наш путь, правда?:) Есть у меня один проект на дельфи, в общем, я его не выбрал.
  • Python – мне всегда заочно нравился и нравится сейчас, я даже опять вернулся к идее его использовать, буквально вчера скачал и установил, буду пробовать. Но опять же для моего класса продуктов он не подходит.
  • Java – всегда мне заочно не нравилась. Заочно, потому что я на ней никогда не писал и её не знаю, но вот не нравится, и все тут.
  • NET – для меня, в принципе тоже самое что и джава. Как по мне так тормоз тормозом, а мне надо было что-то быстрое…

Ну вот оставалась еще wxWidgets, подкупала нативность, скорость, похожесть на мфц, легкое переобучение, ну и новизна, ее мало кто использовал и в этом был положительный момент, подогревающий интерес. Ну и конечно большой плюс кроссплатформенность.  Кроссплатформенность так до сих пор и осталась мифическим преимуществом, поскольку пока за пределы винды я не перешагнул. Но теоретически могу в любой момент – и это приятно согревает душу 🙂 Надеюсь скоро все-таки начну портировать продукты на другие платформы, я уже почти вплотную подошел к этому.

Я скачал, попробовал, получилось, понравилось. В принципе, это почти тоже MFC, только с потенциальной кроссплатформеностью, к тому же открытое – это иногда помогает. Хотя мфц все-таки более вылизанная, меньше глюков.

Что в итоге? У меня есть несколько продуктов написанных на wxWidgets clipboar manager, quick notes, blogspreading. И несмотря на то что есть определенные недовольства wxWidgets, я все-таки доволен. В принципе, считаю что даже если отбросить кроссплатформенность и писать только под винду, то все равно достойный выбор – работать можно. Как говорит мой друг, миссионер wxWidgets “на вкус и цвет, фломастеры разные” кому-то нравится мфц, кому-то вх, кто-то вообще полностью все пишет свое с нуля (зачем спрашивается?),  а кто-то и на php программит и доволен, прости господи 🙂

Related:

42 Responses to “Почему я стал программировать на wxWidgets”

  1. 1. ТОЛЧОК, -чка; м.
    1.
    Резкий короткий удар, производимый движением от себя; тычок, пинок

  2. Благодарю!

  3. Годный пост. А чем это тебе WTL низкоуровневой кажется? Имхо достаточно развитой фреймворк, вот pure WinAPI это блин что-то, когда проект переваливает за Икс тысяч строк кода – я как-то разок на такое напарывался, и оценил возможности WTL именно после этого.

  4. Да, почему wx – насущный вопрос =) У меня в дипломе даже глава на эту тему есть, если интересно могу выложить =)

  5. Завидую я все-таки макинтошникам. У них целая дюжина стандартных видов кнопок! 🙂 А в кроссплатформенных библиотеках их обычно максимум 2-3 вида… И wxWidgets
    в этом смысле не исключение. 🙁

  6. Эээ… А нафига такое извращение?
    Немного не по теме, но:
    Мне вообще часто хочется придушить авторов с энтузиазмом рисующих гламурные фейсы. В программе главное внутренности, а не форма кнопочек и когда прога выбивается по лук-анд-филу из всей остальной системы – лично я это ну никак не могу отнести к плюсам.
    Конечно, все эти дюжины кнопок для макоси нативные, это же всё равно получается зоопарк – в одном приложении одни кнопочки используются, в другом – другие… А если ещё и разные кнопки внутри одного приложения… Представить страшно.

  7. Alatar:
    Эээ… А нафига такое извращение?

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

    А сами кнопки можно посмотреть, например, здесь. По-моему, никакого извращения:

    http://nadeausoftware.com/articles/2008/11/mac_java_tip_how_create_aqua_single_and_segmented_buttons

  8. Ну да, все эти кнопочки более менее в одном стиле, но всё-таки, ИМХО, это в любом случае несколько усложняет жизнь программисту…
    Вообще, мой наезд преимущественно относится не к МакОСи, а к виндовым программерам, которые страстно любят писать кастом-интерфейсы.

  9. 2Alatar:
    выложи плз главу на тему “почему wx насущный вопрос” – любопытно. Все таки у Николая пост получился не про “почему wx”, а “почему НЕ все остальное”. А хотелось бы покопаться, понять что удобно, что нет, какие плюсы от использования wx, какие минусы, сиюсекундные и в перспективе…

  10. >какие плюсы от использования wx,
    Работает, несложно учить, нормально писать, опен соурс – если чо можно посмотреть в исходники – помогает, есть ряд вкусностей.

    >какие минусы, сиюсекундные
    Ну все-таки не стандарт как мфц, есть свои кривости, менее вылизанная чем тот же мфц, есть баги которые не правятся месяцами, но учитывая опен соурсе – можно поправить самому, меньше third-party компонентов\классов

    >и в перспективе…
    Кроссплатформенность 🙂

  11. 1) А как насчет доступа к нативному API и соответственно достучаться до нативного контрола из wx-кода? Чтобы не было потом мучительно больно, а то ходишь в школу, ходишь… бац! вторая смена?

    2) Что с поддержкой DatabaseEngine в wx? Есть ли? Если да, то какие движки поддерживаются?

  12. Carc: 1) А как насчет доступа к нативному API и соответственно достучаться до нативного контрола из wx-кода? Чтобы не было потом мучительно больно, а то ходишь в школу, ходишь… бац! вторая смена?

    Запросто, вот у меня в Clipdiary работа с буфером обмена полностью на винапи, не подошли мне средства вх…

    Carc: 2) Что с поддержкой DatabaseEngine в wx? Есть ли? Если да, то какие движки поддерживаются?

    Это ты сейчас чо имеешь ввиду? Есть Датабайс лайер который поддерживает много чего… я его юзаю для склайт и доволен, если чо – перейду на файрберд.

  13. 1) А как вообще представлен доступ к нативному API? А ля Qt? Типа макрос, включаем хедер из SDK и понеслась напрямую или как-то иначе?

    2) А ткни какой-нить ссылкой плз на это Датабасе Лаейр – чтобы вообще прикинуть в целом что за штуковина…

  14. Ну у меня тоже, преимущественно “почему НЕ всё остальное” – специфика сравнения такая – проще сначала отбросить всё лишнее и плясать от того, что осталось =) Для меня wx просто оказался золотой серединой.
    Если интересно, выложил тут – http://gremlinable.livejournal.com/13806.html

  15. Carc: 1) А как вообще представлен доступ к нативному API? А ля Qt? Типа макрос, включаем хедер из SDK и понеслась напрямую или как-то иначе?

    Просто берешь и вызываешь ::OpenClipboard(); или UnregisterHotKey(1);
    Иногда надо еще конечно инклюдить нужный хедер, но как правило уже все есть.

    Carc: 2) А ткни какой-нить ссылкой плз на это Датабасе Лаейр – чтобы вообще прикинуть в целом что за штуковина…

    А чо гугл уже отменили?:)
    Вот http://wxcode.sourceforge.net/components/databaselayer/

    Alatar, спасибо за развитие темы:)

  16. да не за что, мне не влом =) Тем более, что похоже тема действительно оказалась интересной – 10 комментов за сутки, (не считая моих) – это рекорд для моего блога =)

  17. Борис Says:

    Я вообще не проф. Пишу для себя и товарищей когда просят. Взял wx еще в 2006 из-за обепа (Buider заставили убить).

    >>2) Что с поддержкой DatabaseEngine в wx? Есть ли? Если да, то какие движки поддерживаются?

    Тут хотелось бы уточнить. Никакого Engine в wx для БД я не нашел (ну Engine я как понимаю связка Layera и контролов чтобы вписал sql запрос на select update и insert и готово) нет это и есть основной минус (для меня опять таки) wx. Правда, к dataBaseLayer’у что-то такое написали.

  18. Alatar:
    да не за что, мне не влом =) Тем более, что похоже тема действительно оказалась интересной – 10 комментов за сутки, (не считая моих) – это рекорд для моего блога =)

    ой как на тебя обиделись студийники и дельфисты с бьюлдерастами 🙂

  19. Sergey: ой как на тебя обиделись студийники и дельфисты с бьюлдерастами

    Попрошу без обидных слов. У меня почти все продукты написаны на C++Builder.

  20. Кстати, о птичках. Delphi официально планируют в скором времени сделать кроссплатформенным.

  21. Ага, как только юникод научаться поддерживать :))

  22. Begemot:
    Ага, как только юникод научаться поддерживать )

    Delphi научился поддерживать юникод с версии 2009 (все контролы юникодные), а после нее уже вышла версия 2010.

  23. хм, не знал, беру свои слова обратно 🙂

  24. Алексей Винидиктов: Кстати, о птичках. Delphi официально планируют в скором времени сделать кроссплатформенным.

    Шо, опять?

  25. Ippi: Шо, опять?

    Вы будете смеяться, но да, опять. 🙂

  26. 2Бегемот: спасибо за ссылку! А гугол да, у меня его отменили :)… Просто не хотелось попасть не в те дебри, датабасе-лайерс понятие растяжимо-натяжимое.

    Про Delphi: дык был же какой Кулих или как его там и вроде как на уровне исходников оно был как раз совместимо Win-Linux? С этим что? (я кагбе не дельфист вовсе, “читаю и перевожу со словарем” и только, поэтому спрашиваю безо всяких там)

    Про Бильдер: говорят они хотят в 2010-ом сделать ребрендинг и выпустить продукт под новым названием “Хлоп, шлёп и поехали 2010″… Это правда?
    (ну ща начнется :))))

  27. Да, был такой Kylix, основанный на Qt, но насколько я понял, на этот раз будет что-то другое. Что именно, не знаю.

    Про переименование Бильдера не слышал.

    Кстати, вот откуда я узнал о планах сделать Delphi/C++Builder кроссплатформенными:
    http://www.theregister.co.uk/2009/06/12/embarcadero_codegear_tools_future/

    “Embarcadero is now betting on cross-platform for Delphi and its partner C++ Builder, which shares many of the same libraries. “The most important thing is native cross-platform, Mac and Linux. Some of our biggest customers have moved completely to Mac. Internationally we don’t hear as much Mac interest, but Linux is really strong,” Williams said.”

    В отличие от Kylix в новом Delphi будет кросскомпиляция (думаю, как в REALbasic).

    “Wasn’t this tried before, at least on Linux, with a 2001 product called Kylix, which nobody bought?”

    “Two big differences,” according to Williams, at least. “First, that wasn’t a cross-compile approach. People are fine developing on Windows. I need to be able to debug against a remote machine, but I don’t need the whole IDE over there. The other difference [is] they were too early as far as Linux goes, and from a visual standpoint now Mac matters. I’ve never been so sure about an opportunity.”

    Кросс-платформенность теперь имеет даже более высокий приоритет, чем поддержка 64 бит.

    “Williams says cross-platform is now a higher priority than a 64-bit compiler, though both are planned, and that we will see the first cross-platform release next year.”

  28. Алексей Винидиктов: Попрошу без обидных слов. У меня почти все продукты написаны на C++Builder.

    Я это, любя. Без всяких обидных мыслей. И сам в свое время были делфистом и бьюлдерастом 🙂

  29. А вы в курсе про эту GUI библиотеку:

    http://www.tecgraf.puc-rio.br/iup/

    Использует нативные контролы, кроссплатформенная (GTK+, Motif, Windows), более компактная чем wx.

  30. C Programmer:
    А вы в курсе про эту GUI библиотеку:
    http://www.tecgraf.puc-rio.br/iup/
    Использует нативные контролы, кроссплатформенная (GTK+, Motif, Windows), более компактная чем wx.

    а как же Mac?

  31. Вопрос как знатоку wxWidgets: а wxWidgets поддерживает какой-нить несложный WYSYWIG HTML-редактор?

    Аккурат тут понадобилось изваять одну помоешную тулзу для редактирования HTML – аналоги или уж сложны, или уж быстрее написать самому чем пароль от кредитки вводить.Ну и соответственно возник вопрос, а не попробовать ли wxWidgets…

  32. Я вроде о таком незнаю.

    И вообще с каких это пор WYSYWIG HTML-редактор – стал простой штукой, которую написать, раз плюнуть???

  33. И э-э-эх, жаль! Ну а редактор по сути задачи там простой как пилорама: 5-6 тегов да перекодировка нужная, на MFC\WTL делов-то на 15 минут,

  34. ну текстовый редактор есть и под вх, есть также майкрософтовский ричэдит, есть wxHTML – но он достаточно простой, есть собственный ричконтрол (два года назад был весьма писец, но потом судя по логам – много правили, но я не смотрел)

  35. Carc: Вопрос как знатоку wxWidgets: а wxWidgets поддерживает какой-нить несложный WYSYWIG HTML-редактор?

    🙂 до чего программеры обленились…

  36. Помоему не обленились, а как раз наоборот – раз считают что WYSYWIG HTML-редактор – плевое дело 🙂

  37. Ха, не вижу связи между трудолюбием и мнением, что написать что-то – плевое дело

  38. 2Sergey:
    1) А причем тут лень?

    2Бегемот: ну я прям так не сформулировал что HTML-редактор плевое дело. Меня как раз и интересовал вопрос, есть ли в wx для этого какой-то движок. Там у меня по сути задачи работа несложная – пяток тегов, картинки да гиперссылки поддержать. Остальное уже дело техники. То что я пробовал в MFC мне не показалось каким-то уж архисложным… Я в этом контексте говорил что задачка плевая, почему бы не попробовать на ее примере бы и поизучать другие фреймворки… Варум нихт?

  39. есть wxHTML который может отображать ограниченное подмножество хтмля, отображать – но не редактировать. Есть интеграция броузера в твое приложение – но опять же не редактирование. А что ты в мфц пробовал, скажи имя ?

  40. Хех, но мне то нужен именно редактор HTML, причем WISYWIG иначе как я там гиперссылки пропишу? Не-е, конечно написать несложный движок подобного редактора на базе какого-нить RichEdit в общем-то не очень сложно, нечто похожее делал. Но как-то огород городить не хочется…

    Дык в MFC все просто: хостим IE, переводим его в режим редактирования ну и дописать немного кода через IHTML-интерфейсы… По идее ничего сложного же в этом нет.

  41. Carc: 2Sergey:
    1) А причем тут лень?

    Это было обычное старческое брюзжание “до чего нынешняя молодежь испортилась” и ничего более 🙂

  42. Sergey: Это было обычное старческое брюзжание “до чего нынешняя молодежь испортилась” и ничего более

    Какая ж мы молодежь? Из нас же уже песок сыпется… 🙂