Как я модифицирую GUI к существующей программе C?

использовать ваше состояние, как показано ниже

SELECT 
    UserID
FROM [Account].[User] AS [User]
INNER JOIN [Account].[Location] as [Location]
    ON [Location].[LocationID] = [User].[LocationID] 
    where        
    (
     Location.CompanyID IN (123, 344, 444, 565)
     AND Location.LocationTypeID IS NOT NULL
    ) 
     OR 
     (
      Location.CompanyID not IN (123, 344, 444, 565)          
     )
12
задан kajaco 22 December 2008 в 16:37
поделиться

11 ответов

Это походит точно на задание, для которого был разработан Tcl/Tk. Это имеет очень простой API C, который позволяет Вам регистрировать команды в обратном вызове. При использовании команды в программе Tcl она вызовет обратный вызов и обеспечит механизм для преобразования споров между списком Tcl (собственная структура данных) и массивом стиля ARGV char*.

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

  • Регистр управляет в интерпретаторе Tcl
  • Встройте интерпретатор Tcl в свою программу и используйте Tcl в качестве встроенного языка сценариев (возможно включая регистрацию команд и обратных вызовов к Вашей программе)
  • Породите процесс с полнодуплексным каналом и отправьте команды через stdin/stdout (можно также присоединить обработчик событий к каналу, который вызывается, когда данные доступны),
  • Меньше определенных механизмов Tcl, таких как ветвление/должностное лицо или соединение через сокеты.

Книга Ousterhout Tcl и Инструментарий TK немного датированы, но имеют хорошее руководство по API C. Практическое Программирование валлийцев в Tcl/Tk является другой классической книгой Tcl/Tk и обновляется более часто. Существует также несколько других книг и довольно много электронных ресурсов в Интернете. Некоторые хорошие начальные точки: учебное руководство Tcl, учебное руководство TK, сайт поддержки Tcl (могло бы стоить просмотреть, чтобы помочь Вам решить, хотите ли Вы спуститься по этому маршруту), Tcl/Tk Wiki и конечно Stackoverflow.

TK даст Вам простой GUI и очень легок учиться программировать - если немного упрощенный. Это не столь ужасно, как это раньше было, если Вы не торопитесь, чтобы настроить появление или использовать theming механизм, такой как Мозаика.

Как Norman Ramsey указывает (+1), другой альтернативой с простым API C является Lua. У обоих есть преимущества и недостатки. Основные преимущества Tcl являются простым и чисто интегрированным инструментарием TK и хорошей, сформировавшейся поддержкой поддержки со стороны сторонних библиотек (например, Tix). Основная сила Lua состоит в том, что язык намного более хорош, но нет никакого стандартного инструментария GUI, таким образом, UI как приятно не интегрируется. Lua также имеет намного лучшую поддержку поточной обработки в интерпретаторе, разработанном для этого с нуля. Однако при обертывании приложения C/unix прежней версии это вряд ли будет значительной функцией.

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

Если у Вас есть подлинная причина думать, что Ваш проект сценариев превратится в объемное приложение, Вы могли бы рассмотреть Lua. Однако в более широком масштабе Вы в существенный проект разработки, и Python или Ruby начинают становиться жизнеспособными вариантами. Поскольку проект добирается, большее обертывание кодовой базы C будет меньшей частью полной и сторонней поддержки библиотеки проекта, будет большее соображение.

Если Вы идете с Tcl и обнаруживаете, что Ваш проект получает собственную жизнь, рассмотрите встраивание интерпретатора Tcl и переделку приложения как сменный API, в который люди могут сцепить свои собственные сценарии. Дополнительные функции могут быть сделаны как сценарии и возможно всучиться на третьих лиц для обслуживания. Одно из преимуществ системы со встроенным языком сценариев - то, что лично необходимо не обязательно реализовать опции. Люди могут записать свои собственные расширения в языке сценариев или заставить третьих лиц делать это для них.

БОЛЬШОЙ ГЛОТОК разработан для генерации оберток вокруг библиотек. Это анализирует заголовочные файлы и генерирует слой связующего звена, который представляет встроенный API на выходном языке. Для использования его необходимо было бы осуществить рефакторинг программу в библиотеку.

17
ответ дан 2 December 2019 в 04:54
поделиться

Как другие сказали, Tcl/Tk является хорошим выбором. Существует реальный риск, Вы перерастете язык Tcl, но тот риск снижен превосходным питанием и простотой инструментария работы с окнами Tk.

Другим выбором, который я рассмотрел бы, является wxlua. Причины состоят в том, что Lua является языком, который Вы не перерастете. Вы могли бы также предпочесть wxlua, потому что он основан на wxwidgets, который даст Вам GUI собственный стиль. Исходный Tk имел довольно странный и очень несобственный стиль, но вещи намного лучше теперь, таким образом, эта причина не может нести много силы. Вы могли бы просмотреть два инструментария GUI для наблюдения что обращения. Заключительная причина Вы могли бы предпочесть Lua, состоит в том, что легче выставить пользовательские типы данных GUI и сценариям.

Я не рассмотрел бы альтернативы, такие как Python и Gtk + из-за всех альтернатив там, только Tcl и Lua были разработаны от запуска, чтобы быть женатыми на программах C.

Вы также спрашиваете о БОЛЬШОМ ГЛОТКЕ. Хотя это поверхностно привлекательно, я рекомендую избежать его. И Tcl и Lua имеют очень простые API C, и Вы узнаете больше, поймете лучше и будете в лучшем управлении Вашего приложения, если Вы будете учиться использовать встроенный API сами вместо того, чтобы иметь БОЛЬШОЙ ГЛОТОК, генерируют код для Вас.

4
ответ дан 2 December 2019 в 04:54
поделиться

Я использовал tcl/tk для обертывания меньших программ CLI прежде, и он часто хорошо работает для запуска с.

tcl/tk является языком/пакетом сценария, который будет называть и анализировать вывод CLI, таким образом, Вы не должны будете писать новую программу

tcl/tk

3
ответ дан 2 December 2019 в 04:54
поделиться

Я имею к второму Tcl/Tk. Я сделал точно то же самое для программ прежней версии, записанных в Fortran/C/C ++. Так как это очень тривиально для записи DSL в Tcl/Tk, я закончил тем просто, что добавил опцию для программы для вывода DSL (по существу команды Tcl, записанные в procs) для tk программы к оценке. Я сделал это для программы со сделать довольно сложные анимации графика на tk холсте, который имеет опции сохранить часть анимации в mpeg приблизительно за 4 часа. Люди были поражены. Это абсолютно портативно также. Tcl/Tk имеет простые, все же сложные управляемые событиями средства (это является все еще непараллельным в его простоте) записать приложения для GUI. Можно использовать простой канал для взаимодействия через интерфейс с программами прежней версии, пока он может читать из стандартного входа и записать в стандартный вывод.

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

И это приблизительно 10 лет назад. Tk развился/улучшил много с тех пор и получил собственную возможность стиля.

Главный недостаток раньше упаковывал стандартно-один программы Tcl/Tk, который в основном решен теперь также.

Править: DSL обозначает Расширения 'Предметно-ориентированного языка' интерпретатора Tcl, проявляются как новые ключевые слова языка. Tcl имеет довольно базовый синтаксис, таким образом, этот механизм позволяет довольно большой объем для расширения языка. Хороший пример приложения, которое делает это с Tcl, Ожидают.

3
ответ дан 2 December 2019 в 04:54
поделиться

Как насчет Tcl/Tk.. много ресурсов.. такой как это

3
ответ дан 2 December 2019 в 04:54
поделиться

Так как Вы уже знакомы с PyGTK, почему бы не использовать Gtk +? В конце концов, PyGTK являются просто привязкой вокруг Gtk +, который записан в C.

Его межплатформенное, также. Таким образом, если Вы будете использовать Бойкий, то Ваше приложение будет работать почти куда угодно.

1
ответ дан 2 December 2019 в 04:54
поделиться

Любой инструментарий или платформа могут решить Вашу проблему, так как Вы запрашиваете UI, который действует как обертка для Вашего исполняемого файла командной строки. Можно выбрать C#, MFC, VB6, любой инструмент, который Вы хотите. Основанные на.NET языки, такие как C# довольно легки для командной строки обертки UI. wxWidgets, QT или Окончательный ++ может помочь Вам, если Вы хотите сделать это в C++.

Если Вы знаете, как программировать в C, можно сделать это в плоскости Win32 API, хотя необходимо управлять некоторыми вещами, которые обрабатываются автоматически в платформах C++.

0
ответ дан 2 December 2019 в 04:54
поделиться

При необходимости в текстовом режиме UI в программе TxWin является хорошим вариантом.

Другой, TVision клон gool старой Borland TurboVision.

0
ответ дан 2 December 2019 в 04:54
поделиться

Можно использовать любой инструментарий, который Вы любите (tcl/tk или любой другой язык сценариев, Вы довольны этим, имеет возможность GUI), но совет сохранить оригинал как программу CLI (который Ваш GUI затем бежит за собирающимися опциями от пользователя), хорошо. Никакая потребность войти в привязку C и т.д.

0
ответ дан 2 December 2019 в 04:54
поделиться

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

Это означает, что большую часть времени приложение делает что-то вроде этого:

  1. ожидайте события (например, ввод с клавиатуры, истечение таймера, и т.д.)
  2. вызовите некоторую указанную пользователями функцию на основе того события
  3. цикл назад к шагу 1.

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

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

0
ответ дан 2 December 2019 в 04:54
поделиться

Я думаю, что MGUI является вещью, с которой можно пойти!

MGui (Графический интерфейс пользователя ВИШНИ МОРЕЛЬ) является межплатформенным графическим интерфейсом пользователя, записанным в ANSI C, также обеспечивая API C++ через библиотеку кадра. Это состоит из библиотеки, включая все типичные объекты GUI как меню, кнопки, доступные для редактирования поля, списки и т.д.... и инструмент генерации кода (Разработчик MGui), который позволяет пользователю создавать и поддерживать разметки окна приложения с помощью мыши.

MGui позволяет создать приложения для Windows 3.1, Windows 95/98/NT, Unix X Window, DOS (Borland, Watcom и DJGPP) без знания о графике хост-системы API. Можно просто использовать генератор кода Разработчика MGui, чтобы создать разметки окна и написать код для взаимодействия с созданными объектами.

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

Между прочим вот очень хороший список, освобождает.

0
ответ дан 2 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: