MFC: is dead или еще нет?

Тема в разделе "WASM.HEAP", создана пользователем HH9, 19 июн 2008.

  1. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Уж лучше wxLua. И меньше по объему и быстрее по быстродействию. Имхо конечно.
     
  2. perez

    perez Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    502
    Адрес:
    Moscow city
    >> Уж лучше wxLua. И меньше по объему и быстрее по быстродействию. Имхо конечно.

    Я про питон сказал, потому что wxPython - по-моему самая полноценная реализация скриптового языка в wxWidgets.
    Есть конечно и wxPerl, wxDotNet (не помню как точно) и др.
    А про поддержку луа - я хз. На питоне там можно реально полноценные вещи творить.
    Примеры, входящие в поставку меня впечатлили.

    P.S. Ритон здесь используется не как встраеваемый язык, а как полноценный язык с мощьной объектно - ориентированной архитектурой.

    Вот полноценная прога (17 строк), показывающая окно с текстовым полем, в котором отображаются координаты мыши при движении:

    #################################################
    #!/bin/env python
    import wx
    class MyFrame(wx.Frame):

    def __init__(self):
    wx.Frame.__init__(self, None, -1, "My Frame", size=(300, 300))
    panel = wx.Panel(self, -1)
    panel.Bind(wx.EVT_MOTION, self.OnMove)
    wx.StaticText(panel, -1, "Pos:", pos=(10, 12))
    self.posCtrl = wx.TextCtrl(panel, -1, "", pos=(40, 10))

    def OnMove(self, event):
    pos = event.GetPosition()
    self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y))

    if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MyFrame()
    frame.Show(True)
    app.MainLoop()
    #################################################
     
  3. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    http://wxlua.sourceforge.net/

    вот тут еще посмотреть можно
    http://lua-users.org/wiki/LibrariesAndBindings

    на пример - примером (взято с головной страницы сайта)
    Код (Text):
    1. frame = wx.wxFrame(wx.NULL, wx.wxID_ANY, "wxLua Minimal Demo",
    2.                    wx.wxDefaultPosition, wx.wxSize(450, 450),
    3.                    wx.wxDEFAULT_FRAME_STYLE)
    4.  
    5. -- create a simple file menu
    6. local fileMenu = wx.wxMenu()
    7. fileMenu:Append(wx.wxID_EXIT, "E&xit", "Quit the program")
    8. -- create a simple help menu
    9. local helpMenu = wx.wxMenu()
    10. helpMenu:Append(wx.wxID_ABOUT, "&About",
    11.                 "About the wxLua Minimal Application")
    12.  
    13. -- create a menu bar and append the file and help menus
    14. local menuBar = wx.wxMenuBar()
    15. menuBar:Append(fileMenu, "&File")
    16. menuBar:Append(helpMenu, "&Help")
    17. -- attach the menu bar into the frame
    18. frame:SetMenuBar(menuBar)
    19.  
    20. -- create a simple status bar
    21. frame:CreateStatusBar(1)
    22. frame:SetStatusText("Welcome to wxLua.")
    23.  
    24. -- connect the selection event of the exit menu item to an
    25. -- event handler that closes the window
    26. frame:Connect(wx.wxID_EXIT, wx.wxEVT_COMMAND_MENU_SELECTED,
    27.               function (event) frame:Close(true) end )
    28. -- connect the selection event of the about menu item
    29. frame:Connect(wx.wxID_ABOUT, wx.wxEVT_COMMAND_MENU_SELECTED,
    30.         function (event)
    31.             wx.wxMessageBox('This is the "About" dialog of the Minimal wxLua sample.',
    32.                             "About wxLua",
    33.                             wx.wxOK + wx.wxICON_INFORMATION,
    34.                             frame)
    35.         end )
    36.  
    37. -- finally, show the frame window
    38. frame:Show(true)
    делает окно с менюхой и статусбаром. По эбаут выкидывает месажбох, по ехит выходит.

    Вот тут еще примеры: http://wxlua.cvs.sourceforge.net/wxlua/wxLua/samples/
     
  4. perez

    perez Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    502
    Адрес:
    Moscow city
    Спасибо, заценю.
     
  5. Mozart

    Mozart New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2008
    Сообщения:
    8
    QT мне понравился практически всем. Мощный, простой, удобный. Единственно, что сильно расстроило - размер исполняемого файла, слинкованого статически. 10 метров ХеллоВорлд весит! После сжатия upx-ом стало занимать 3 метра, но зато в оперативке 17 метров ))) Эх, еслиб не это, вообще было бы идеальное средство разработки.
     
  6. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    Mozart
    хех..... не понимаю чем людям не нравится джавик: кроссплатформа, достаточно быстрый и разумные размеры кода:)))
    кстати, ты попробуй сделать более функциональную гую, чем хеловолд, если размер будет в ту же десятку метров, то жить можно.
     
  7. z_x_spectrum

    z_x_spectrum New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    145
    не понимаю, чего можно столько напихать в 10 метров....

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

    Во всем этом чувствуется нездоровый дух Линукса...
    Вобще, кроссплатформенность и эффективность кода не совместимы.
     
  8. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    z_x_spectrum
    в борьбе эффективности кода и разработки всегда выигрывает разработка:)) ибо человек ленив и жаден:)
     
  9. Mozart

    Mozart New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2008
    Сообщения:
    8
    Не, естественно, пустая форма хеловорда и форма с наворотами и кучей диалогов по размеру отличатся будут на пару кб.
    Такой размер, повторяю, только при СТАТИЧЕСКОЙ линковке. Слинковать можно и динамически, тогда все программы будут занимать не более 20 кбайт. Естественна, нужно иметь где-то необходимые dll-ки, прописанные в path. Поклонникам java - пару либ на 15 метров это гораздо меньшая цена, чем громоздкая java машина. Также проги на с++ думаю, более быстрые чем явовские. И еще - в яве можно использовать функции WinAPI? Если нет - это тоже серьезный минус

    Кстате, только что пересобрал QT с другими параметрами, исполняемый статически слинкованый файл стал весить "всего-лиш" 7 метров. )) (при сжатии upx-ом 2.5 метра).
     
  10. z_x_spectrum

    z_x_spectrum New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    145
    В случае с QT это переходит все границы. 10М хелловорлд - это просто издевательство над здравым смыслом...

    Кто-нибудь обьяснит, ЧТО должно быть в хелловорлде, чтобы он столько весил?
     
  11. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    Mozart
    громоздкая??? там не только гуя, но и куча либ на разные темы.
    z_x_spectrum
    солидность там, товарищ....... солидность:))
     
  12. Mozart

    Mozart New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2008
    Сообщения:
    8
    Ну дык... В кутовских либах тоже не только гуя. Кстати по поводу неповортливости Qt - ничего подобного, работает она очень шустро и без проблем. По мойму, Опера (браузер) написана с помощью Qt.
    Че там обьяснять... QtCore4.dll в хело ворде ) Он столько и занимает. Ище раз повторю, если эту либу поместить куда-нибудь и прописать ее в Path, проги будут занимать по 20 кб. Но этот маленький кутовский недостаток с двумя головами окупается ее достоинствами.
     
  13. z_x_spectrum

    z_x_spectrum New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    145
    А что там такого в этой QtCore4.dll?

    Ее все равно с прогой таскать, так что это ничего не меняет..

    А какие у нее реальные достоинства, кроме возможности работать в ничтожном Линуксе?
     
  14. perez

    perez Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    502
    Адрес:
    Moscow city
    Не пойму, как можно сравнивать тот же QT с явой то??
    Объем большой - так это просто линкуется вся либа. Можно длл-ками таскать.
    Код то твоей проги (алгоритм) все равно сишный. Тоесть без всяких интерпретаторов и тд.
    Тоесть по скорости не уступит обычному консольному приложению, откомпилированному на том же компиляторе.
    Я скорость выполнени я алгоритмов говорю.
    А скорость гуи? На порядок меньше жрет память и по скорости намного выигрывает перед явой.
    Имхо не надо сравнивать слишком разные вещи.

    Опять же. Я удивлен, что не обсуждается wxWidgets. Екзешники намного меньше, достаточно мощный фреймворк.
    P.S. Скорость гуи (wxWidgets) опять же быстрее при использовании существующих окон графической подсистемы вместо отрисовки. Хотя не думаю что это слишком актуально с нынешними мощностями. Хотя иногда заметно.
     
  15. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    perez
    Вообщето обсуждалось, а скорость выше по очевидным причинам. Но эта скорость может ограничеть в будующем мультиплатформеность
     
  16. Johnikum

    Johnikum Member

    Публикаций:
    0
    Регистрация:
    6 июн 2003
    Сообщения:
    97
    в целом в qt: http://doc.trolltech.com/extras/qt43-class-chart.pdf - это только малая доля того что там есть.
    + кросплатформенность,
    + мало кода, у троллей девиз: "меньше кода - больше дела"
    минусом вижу только то, что для комерческого использования, библиотека достаточно дорого стоит
    wxWidgets по-большей части это только gui. MFC, QT - это библиотека классов на все(большинство) случаев жизни
    именно. Opera на QT3
    qt обычно применяется для более сложных проектов
    взять туже оперу: ее бинари, зависимые и использующие qt ~ 5 метров
     
  17. perez

    perez Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    502
    Адрес:
    Moscow city
    Не, Вы неправы.
    В wxWidgets есть классы для работы с очень многими вещами. Имхо богаче чем МФС.
    Вот список классов http://docs.wxwidgets.org/trunk/classes.html

    Навскидку: удобная поддержка сети (в синхронном и асинхронном режимах), работа с файлами, файловой системой, удобная система логирования,
    работа с БД, работа с изображениями и видео, кодировками текста, xml, синхронизация процессов и тредов и тд.

    З.Ы. И самое главное, что мне лично нравится, она активно развивается и совершенно бесплатна. Также много биндов под разные скриптовые языки и кроссплатформенность выше чем у QT.
     
  18. Mozart

    Mozart New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2008
    Сообщения:
    8
    Да собственно, все остальное. Исчерпывающая отлично написанная документация, простота разработки, которая сочетается с богатыми возможностями, отсутствие всяких интерпретаторов (как следствие - быстрый код и запуск приложения). Четкая структура классов... Кроссплатформенность... Наконец, актуальность. Видно, что проект развивается, можно найти кучу свежей литературы по QT4. А вы попробуйте найти что-то про, скажем, MFC. Самый максимум - это книги десятилетней давности, где целые главы посвящаются выбору между Win16 и Win32.
    З.Ы. Тоже не понимаю, как можно сравнивать какую-то там интерпретируемую яву с чистым С++ ))
     
  19. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    Есть подозрение, что система не-оконных классов в QT более стройна и продумана, чем в wxWidgets. Но это только подозрение, да и ничего удивительного в этом не было бы.
     
  20. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    rei3er
    =)
    Этот реализация списка была первым, что меня когда-то в ядре озадачило. Но разобравшись я понял, что C рулит так, как я не представлял себе раньше.
    kaspersky
    Слегка оффтоп, но раз уж вспомнилось: мне очень нравится конструкция
    Код (Text):
    1. ptr[-1] = бла-бла-бла;
    =)
    Но это ладно. С list_head'ами в большинстве ситуаций именно так и происходит. Есть указатель на поле типа struct list_head, который уменьшают на некоторую величину, чтобы получить указатель на объект. Другое дело, что никакой путаницы там не возникает, ввиду того, что ООП назвало бы "сокрытием данных". В одних ситуациях скрыт указатель на объект и на руках лишь указатель на его поле, в других именно с указателем на объект и идёт работа. И вся адресная арифметика зарыта в list.h.
    А твой пример -- это по-моему, показатель качества кода, в котором ты ковырялся. Такие трюки, должны быть видны сразу. И по-возможности, вынесены куда-нибудь в inline функции, макросы, и естественно, они должны быть описаны в виде кучки struct. Причём весь остальной код должен быть примером правильного использования этих самых функций, макросов и структур.

    z_x_spectrum
    Ты с чем сравниваешь? Это я к тому, что достоинство -- это вроде как преимущество, которое познаётся лишь в сравнении. С MFC? Ну это же совсем разного уровня поделки. Я честно говоря давно задаюсь вопросом: почему под венду до сих пор пишут используя mfc, win32api, vcl и проч. Когда есть gtk, qt, wxWidgets, которые:
    - очень неплохие возможности предоставляют. Возможности рисования окошек в win32, по-моему уровнем ниже. MFC -- те же яйца, вид сбоку.
    - позволяют писать реально кроссплатформенный код. (тебя не интересует не-win32? А win64? Или как-там называется грядущая виндовс? windows 7?)
    - они opensource, и посему гораздо проще: не надо пользоваться классами, которые на все случаи жизни, если кому-то не хватит функциональности класса, он без проблем глядя в сорцы класса как в пример, напишет свой за несколько часов. Причём это не "открытость" библиотек java (по-крайней мере в том виде, в котором я её видел), здесь код реально компилируется и доступен для отладки (чем не способ изучения?). А большинству вполне хватит стандартных для библиотеки возможностей, и не придётся разбираться с двумя десятками лишних методов класса.