স্ট্যান্ডার্ড পাঠ্য এলসিডি মেনু সিস্টেম


10

কোনও পাঠ্য এলসিডির জন্য সিতে একটি সাধারণ মেনু সিস্টেমের জন্য কি কোনও প্যাটার্ন রয়েছে। আমি সাধারণ পাঠ্য এলসিডি মেনুগুলি হ্যান্ডল করার জন্য নিজেকে পুনরায় লেখার কোডটি দেখতে পাই।

আমি দেখতে পাই বেশিরভাগ সিস্টেমে একটি প্রধান মেনু এবং কিছু উপ-মেনু থাকে যা নির্বাচিত হলে আপনাকে কিছু ন্যূনতম এবং সর্বাধিক মানের মধ্যে একটি পরামিতি সেট করার অনুমতি দেয়।

আদর্শভাবে এই মেনু সিস্টেমটি 4 টি সাধারণ কী যেমন এন্টার, বাতিল, উপরে এবং নীচে নেভিগেট করা যেতে পারে।

আমার অ্যাপ্লিকেশনটিতে আমি একটি 2 লাইন এক্স 16 অক্ষরের পাঠ্য এলসিডি ব্যবহার করছি যদিও একটি আদর্শ সমাধান কোনও এনএক্সএম ডিসপ্লেতে প্রয়োগ করতে সক্ষম হওয়া উচিত।


বৈদ্যুতিন ডিজাইনের সাথে কিছুই করার নেই! প্রশ্ন বন্ধ হয়ে যাবে।
লিওন হেলার

5
আমি এম্বেড থাকা সিস্টেমে প্রয়োগ করে যদি তারা এখানেও জিজ্ঞাসা করতে পারে তবে আমি ইমপ্রেশন প্রোগ্রামিং প্রশ্নগুলির মধ্যে ছিলাম। হতে পারে আমি ভুল ছিলাম ...
mjh2007

আমিও একইরকম ছাপে ছিলাম। সে সম্পর্কে কোনও অফিসিয়াল নোট আছে?
AndrejaKo

FAQ অনুসারে কেবল খুব নিম্ন-স্তরের স্টাফ। এই প্রশ্নটি ইউজার ইন্টারফেস সম্পর্কে।
লিওন হেলার

3
+1 আমিও আগ্রহী হব ... আমি সবসময় তাদের হাতে তৈরি করি। আপনি কি কোন কনসোল আউটপুট বা কোনও এনএক্সএম চরিত্র প্রদর্শন ব্যবহার করছেন .... তা নয় যে আমার একটিরও উত্তর আছে :) বেশ কয়েকটি এম্বেড করা 2xN ডিসপ্লে সিস্টেমগুলিতে, আমি এন্টার / বাতিল সংযুক্ত দুটি বোতাম ইন্টারফেস প্রয়োগ করেছি এবং এর পরেরটি যা একটি রিং বাফার করে এবং উপরে / পরবর্তী এবং নীচে / পিছনের প্রয়োজনীয়তা দূর করে।
কেনে

উত্তর:


5

সি তে মেনু সিস্টেমগুলির জন্য আমি যে প্যাটার্নটি ব্যবহার করি তা হ'ল:

struct menuitem
{
  const char *name; // name to be rendered
  functionPointer handlerFunc; // handler for this leaf node (optionally NULL)
  struct menu *child; // pointer to child submenu (optionally NULL)
};

struct menu
{
  struct menu *parent; // pointer to parent menu
  struct **menuitem; // array of menu items, NULL terminated
};

আমি তারপরে menuপ্রত্যেকটি menuitemগুলি এবং childসাবমেনাসে পয়েন্টার যুক্ত একটি অ্যারের ঘোষণা করি । বর্তমানে নির্বাচিত গুলিগুলির অ্যারে দিয়ে উপরে এবং নীচে সরানো হয় menuitemparentমেনুতে ফিরে যান এবং অগ্রসর / নির্বাচন করুন হয় একটি childসাবমেনুতে চলে আসে বা handlerFuncএকটি লিফ নোডের জন্য কল করে ।

একটি মেনু রেন্ডারিং এর আইটেমগুলির মাধ্যমে পুনরাবৃত্তি জড়িত।

এই স্কিমটির সুবিধাটি হ'ল এটি সম্পূর্ণ ডেটা চালিত হয়, মেনু স্ট্রাকচারগুলি রেন্ডার এবং হ্যান্ডলার ফাংশনগুলি থেকে পৃথকভাবে রমে ঘোষিত হতে পারে।


2

টবির উত্তর একটি খুব ভাল সূচনা পয়েন্ট। উল্লিখিত কাঠামোগুলি ধরে নিয়েছে যে মেনুগুলি স্থির এবং আপনি কেবল সেগুলি দিয়ে চলাচল করেন।

আপনি যদি ডাইমনিক মেনুগুলি চান (যেমন নির্দিষ্ট মানগুলি যেমন তাপমাত্রা, সময় ইত্যাদি প্রদর্শন করে), তবে আপনাকে এটি তৈরি করতে সক্ষম হতে হবে।

একটি উপায় হতে পারে আপনার স্ট্রিংটি তৈরি করতে কোনও ফাংশনটি নিবন্ধভুক্ত করা।

struct menuitem
{
  const char *name; // name to be rendered
  const char * (*builderFunc)( const char *name );  // callback to generate string, if not null.
  functionPointer handlerFunc; // handler for this leaf node (optionally NULL)
  struct menu *child; // pointer to child submenu (optionally NULL)
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.