كيف يمكنني التحديث واجهة المستخدم الرسومية لبرنامج ج موجود؟

StackOverflow https://stackoverflow.com/questions/385156

  •  23-08-2019
  •  | 
  •  

سؤال

لقد كنت أعمل في مشروع يقوم بتنفيذ برنامج Solaris CL قديم لتشغيل نظام Linux، وحظر بعض مشكلات الأجهزة غير ذات الصلة، والذي انتهى. الآن أريد واجهة المستخدم الرسومية لذلك، لذلك يمكن للمستخدم الاختيار من بين الخيارات المختلفة مع انخفاض الخيارات وخانات الاختيار، بالإضافة إلى بعض مناطق إدخال النص للخيارات التي ليست مقيدة للغاية، مثل اسم الملف. (البرنامج عبارة عن أداة داخلية لتشغيل بعض الطيف وتخزين النتائج كملفات CSV. هذا يعالج كل هذه الخيارات، ويعالج الماسحات الضوئية ويعالج المعلومات ويقوم بتخزينها مع اسم الملف المحدد؛ أريد فقط أن يستخدم شيء أجمل من CL. في

المرة الوحيدة التي رأيت فيها شيء من هذا القبيل من هذا القبيل كان من دواعي الواجهات واجهة المستخدم الرسومية من Pygtk + واجهة المستخدم الرسومية مع ارتباطات بيثون لرمز C (أعتقد أن هذا ما كان عليه؛ كان هذا هو الفصل الدراسي الأول الخاص بي ولم أفهم كثيرا!). هذا أكثر قليلا مما أريد الدخول فيه الآن؛ هل هناك طريقة سهلة نسبيا للقيام بذلك؟ عندما غوغس وجدت أن Swig (http://www.swig.org/index.php.) هل هذه طريقة جيدة للذهاب؟

هل كانت مفيدة؟

المحلول

هذا يبدو وكأنه الوظيفة بالضبط TCL / TK. تم تصميمه ل. يحتوي على API بسيطة جدا C تتيح لك تسجيل الأوامر مع رد الاتصال. إذا كنت تستخدم الأمر في برنامج TCL، فسيحصل على رد الاتصال وتوفير آلية لتحويل الوسائط بين قائمة TCL (بنية البيانات الأصلية) ومجموعة أسلوب Argv من Char *.

تم تصميمه خصيصا لتكون من السهل التحديثية هذا النوع من المجمع لبرامج C مدفوعة سطر الأوامر. هناك أيضا مجموعة متنوعة من الوسائط الأخرى التي يمكنك استخدامها إلى واجهة المترجم أيضا، ومن السهل تضمينها في البرامج ككلغة نصية. من الذاكرة آليات الترابط المتاحة هي:

  • سجل الأوامر في مترجم TCL
  • تضمين مترجم TCL في برنامجك واستخدام TCL ككلغة نصية مضمنة (ربما بما في ذلك تسجيل الأوامر والترشيح إلى برنامجك)
  • تفرخ عملية مع أنبوب مزدوج مزدوج وإرسال الأوامر عبر Stdin / Stdout (يمكنك أيضا إرفاق معالج حدث إلى الأنبوب الذي يتم استدعاءه عند توفر البيانات)
  • أقل آليات محددة TCL مثل FORK / EXEC أو اتصال عبر مآخذ.

كتاب ousterhout TCL و TK Toolkit مؤرخة بعض الشيء ولكن لديه دليل جيد ل API C. ولش البرمجة العملية في TCL / TK هو كتاب TCL / TK الكلاسيكي الآخر ويتم تحديثه بشكل متكرر. هناك أيضا العديد من الكتب الأخرى والكثير من الموارد الإلكترونية على الإنترنت. بعض نقاط البداية جيدة هي: TCL التعليمي, TK التعليمي, موقع TCL الدعوة (قد تكون يستحق الإثارة لمساعدتك في تحديد ما إذا كنت ترغب في النزول في هذا الطريق)، TCL / TK Wiki وبالطبع stackoverflow..

سوف يمنحك TK واجهة المستخدم الرسومية واضحة ومن السهل جدا تعلم البرنامج - إذا كانت التبسيط قليلا. انها ليست كذلك قبيح كما كان عليه إذا كنت تأخذ بعض الوقت ل قرص المظهر أو استخدام محرك تحت الأرض مثل البلاط.

كما نورمان رمزي يشير (+1), ، بديل آخر مع واجهة برمجة تطبيقات بسيطة لوا. لكلاهما مميزات ومساوئ. القوة الرئيسية ل TCL هي دعم TK بسيط ومتكامل بشكل نظيف ودعم دعم ناضج جيد من مكتبات الطرف الثالث (على سبيل المثال تيكس). القوة الرئيسية ل LUA هي أن اللغة أجمل كثيرا ولكن لا توجد مجموعة أدوات واجهة المستخدم الرسومية القياسية، وبالتالي فإن واجهة المستخدم غير متكاملة بشكل جيد. يحتوي LUA أيضا على دعم أفضل بكثير للخيوط في المترجم، بعد أن تم تصميمه لهذه الأرض. ومع ذلك، إذا قمت بتفويل تطبيق L Legacy C / UNIX، فمن غير المرجح أن يكون هذا ميزة مهمة.

WxWidgets أكثر تعقيدا بكثير من المعارف التقليدية ويحمل المزيد من أمتعة وقت التشغيل ولكن لديها مجموعة ميزة أكثر ثراء.

إذا كان لديك سبب حقيقي للاعتقاد بأن مشروعك البرماجي سوف ينمو في تطبيق أكبر قد تفكر في LUA. ولكن على نطاق أوسع، فأنت في مشروع تطوير كبير و بيثون أو روبي البدء في أن تصبح خيارات قابلة للحياة. نظرا لأن المشروع يحصل على تفاف أكبر، فسيكون C CodeBase جزءا أصغر من المشروع العام ودعم مكتبة الطرف الثالث سيكون اعتبارا أكبر.

إذا ذهبت مع TCL واكتشاف مشروعك يحصل على حياة خاصة به، ففكر في تضمين مترجم TCL وإعادة صياغة التطبيق كإمبر واجهة برمجة تطبيقات مسافة البرنامج المساعد التي يمكن للناس ربط البرامج النصية الخاصة بهم. يمكن إجراء ميزات إضافية كبرامج نصية وربما تعثرت على أطراف ثالثة للصيانة. تتمثل إحدى مزايا نظام مع لغة البرمجة النصية المدمجة هي أنك لا تضطر بالضرورة إلى تنفيذ الميزات. يمكن للناس كتابة ملحقاتهم الخاصة في لغة البرمجة النصية أو الحصول على أطراف ثالثة للقيام بذلك لهم.

تم تصميم Swig لتوليد مغلفة حول المكتبات. يقوم بتوزيع ملفات الرأس ويقوم بإنشاء طبقة غراء تقدم API الأصلي باللغة المستهدفة. لاستخدامها، يجب عليك إعادة عامل برنامجك في مكتبة.

نصائح أخرى

كما قال آخرون، TCL / TK هو اختيار جيد. هناك حقيقي المخاطرة سوف تتفوق على لغة TCL, ، ولكن هذا الخطر يتم تخفيفه من قبل الممتاز قوة وبساطة مجموعة أدوات النافذة TK.

الاختيار الآخر الذي أعتبره هو Wxlua.. وبعد الأسباب هي ذلك لوا هي لغة سوف ليس انتفاخ. وبعد قد تفضل أيضا WXLUA لأنه يعتمد على Wxwidgets., ، والتي سوف تعطيك واجهة المستخدم الرسومية نظرة أصلية وشعور. وبعد كان لدى المعارف التقليدية الأصلية نظرة وشعور غير أصلية للغاية، ولكن الأمور أفضل بكثير الآن، لذلك قد لا يحمل هذا السبب الكثير من القوة. قد تنظر فوق مجموعة أدوات واجهة المستخدم الرسومية لمعرفة ما الطعون. السبب الأخير الذي قد تفضل لوا هو ذلك من الأسهل عرض أنواع البيانات المعرفة من قبل المستخدم إلى واجهة المستخدم الرسومية والبرامج النصية.

لن أفكر في البدائل مثل Python و GTK +، بسبب كل البدائل هناك، تم تصميم TCL و LUA فقط من البداية لتكون متزوجة من البرامج.

وانت كذلك اسأل عن Swig.. وبعد على الرغم من أنها جذابة سطحية، إلا أنني أوصي بتجنب ذلك. كل من TCL ولوا لديه بسيطة جدا وسوف تتعلم أكثر، وفهم أفضل، وتكون في سيطرة أفضل على طلبك إذا كنت تعلم كيفية استخدام API الأصلي بنفسك بدلا من وجود رمز SWIJ لك.

لقد استخدمت TCL / TK لفافة برامج CLI أصغر من قبل وغالبا ما تعمل بشكل جيد للبدء.

TCL / TK هي لغة سيناريو / حزمة ستتصل وتحليل إخراج CLI حتى لا تضطر إلى كتابة جديد برنامج

TCL / TK.

ماذا عن TCL / TK .. الكثير من الموارد .. مثل هذه

لا بد لي من TCL / TK الثاني. فعلت بالضبط نفس الشيء للبرامج القديمة المكتوبة في fortran / c / c ++. نظرا لأنها تافهة جدا لكتابة DSL في TCL / TK، فقد انتهى بي الأمر بإضافة خيار للبرنامج لإخراج DSL (أوامر TCL الأساسية المكتوبة في ProCS) لبرنامج TK إلى Eval. لقد قمت بذلك لبرنامج للقيام بالرسوم المتحركة الرسم البياني المعقدة إلى حد ما على قماش TK، يحتوي على خيارات لتوفير جزء من الرسوم المتحركة في MPEG في حوالي 4 ساعات. كان مندهش الناس. انها المحمولة تماما كذلك. يتمتع TCL / TK بتسهيلات بحدث بسيطة ولكنها متطورة (لا تزال لا تزال لا مثيل لها في بساطتها) لكتابة تطبيقات GUI. يمكنك استخدام الأنبوب البسيط للواجهة مع برامج قديمة طالما يمكن أن تقرأ من الإدخال القياسي والكتابة إلى الإخراج القياسي.

تتمثل الميزة الضخمة لهذا النهج في أنه لا تحتاج إلى ربط أي من واجهة المستخدم الرسومية أو مكتبات إضافية مع برامجك القديمة، والتي هي في وقت ما المستحيل. يمكن فصل البرنامج GUI و Legacy بالكامل.

وهذا هو حوالي 10 سنوات. تطور المعارف التقليدية / تحسين الكثير منذ ذلك الحين وأكتسب نظرة أصلية وشعور القدرة.

اعتاد العيب الكبير أن يكون التعبئة والتغليف برامج TCL / TK قياسية، والتي تم حلها إلى حد كبير أيضا أيضا.

تعديل: DSL تقف ل "لغة المجال الخاصة" امتدادات إلى مترجم TCL يتضح أنفسهم ككلمات رئيسية لغة جديدة. يحتوي TCL على بناء جملة أساسي إلى حد ما، لذلك تتيح هذه الآلية الكثير من النطاق لتوسيع اللغة. مثال جيد على التطبيق الذي يفعل هذا مع TCL هو يتوقع.

نظرا لأنك على دراية بالفعل في Pygtk، فلماذا لا تستخدم GTK +.ب بعد كل شيء، Bygtk هي مجرد ربط جولة GTK +، والتي تتم كتابتها في C.

لها منصة عبر، أيضا. لذلك إذا كنت تستخدم غليظ سيتم تشغيل طلبك في أي مكان تقريبا.

يمكن لأي مجموعة أدوات أو إطار حل مشكلتك لأنك تطلب نظام التشغيل UI يعمل كغلاف قابل للتنفيذ لسطر الأوامر. يمكنك اختيار C #، MFC، VB6، أي أداة تريدها. اللغات المستندة إلى .NET مثل C # من السهل جدا على أغلفة سطر الأوامر. يمكن أن يساعدك Wxwidgets أو QT أو Ultimate ++ إذا كنت ترغب في القيام بذلك في C ++.

إذا كنت تعرف كيفية البرنامج في ج، فيمكنك القيام بذلك في واجهة برمجة تطبيقات Win32 Plain، يجب أن تدير بعض الأشياء التي يتم التعامل معها تلقائيا في أطر C ++.

يمكنك استخدام أي مجموعة أدوات تريدها (TCL / TK أو أي لغة نصية أخرى تشعر بالراحة مع وجود إمكانية واجهة المستخدم الرسومية)، ولكن النصيحة للحفاظ على الأصل كبرنامج CLI (الذي يعمل GUI الخاص بك بعد جمع خيارات المستخدم من المستخدم ) جيد. لا حاجة للوصول إلى الروابط C إلخ.

إذا كنت بحاجة إلى وضع النص في البرنامج الخاص بك، txwin. هو خيار جيد.

واحدة أخرى،tvision. استنساخ من جول رأ 'بورلاند توبوفنجن.

دون التوصية في التوصية بمكتبات محددة أو مجموعة أدوات واجهة المستخدم الرسومية، هل تدرك أن معظم واجهات الخمر تعمل على نموذج "مدفوع الأحداث".

هذا يعني أن معظم الوقت يقوم التطبيق بعمل شيء مثل هذا:

  1. انتظر الحدث (مثل إدخال لوحة المفاتيح، انتهاء الصلاحية مؤقتا، إلخ)
  2. اتصل ببعض الوظائف المحددة من قبل المستخدم بناء على هذا الحدث
  3. حلقة العودة إلى الخطوة 1.

إذا كانت الدالة التي يطلق عليها تستغرق وقتا كبيرا من الوقت يجعل برنامجك لا يستجيب.

العمل حول هذا يعني إما أن يتم التعامل مع واجهة المستخدم الرسومية الخاصة بك في مؤشر ترابط آخر، أو القدرة على الوظائف التي تعيش طويلا للعائد أحيانا للتحقق مما إذا كان المستخدم قد حاول إحباطهم.

أظن mgui. هو شيء يمكنك الذهاب معه!

Mgui (واجهة مستخدم Graphic Morello) هي واجهة مستخدم رسومية عبر منصة مكتوبة في ANSI C، وتوفر أيضا API C ++ عبر مكتبة الإطار. وهو يتألف من مكتبة، بما في ذلك جميع كائنات واجهة المستخدم الرسومية النموذجية كقائمة وأزرار الضغط وحقول قابلة للتحريرية، وتسرد، وأداة إنشاء رمز (مصمم Mgui)، والذي يسمح للمستخدم بإنشاء تخطيطات نافذة التطبيق والحفاظ عليها باستخدام الماوس.

يتيح MGUI إنشاء تطبيقات لنظام التشغيل Windows 3.1 و Windows 95/98 / NT و UNIX X-Window و DOS (Borland و Watch و DJGPP) بدون معرفة حول API رسومات النظام المضيف. يمكنك ببساطة استخدام مولد رمز مصمم Mgui لإنشاء تخطيطات النافذة، واكتب التعليمات البرمجية للتفاعل مع الكائنات التي تم إنشاؤها.

بالنسبة لميزاتها، يعد Mgui مفيدا لكل من يريد تحقيق تطبيقات منصة متعددة، مع عدم وجود احتياجات Porting Gui على الإطلاق. إنه مثالي للاستخدام في أنظمة مضمنة على DOS في الوضع الحقيقي و DPMI.

على فكرة هنا هي قائمة جيدة جدا من libs.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top