الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أنشئ فورم بــ CodeBlocks خاص c++

مغلقمُجاب
بدأه karikaaaa في 18 يناير 2014 · 5 رد · 1,244 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

أنا بستخدم المحرر المرئى CodeBlocks وطبعا بشتغل على الدوس بس عايز كود أنشاء فورم ارجو ان الكود يكون بسيط ..

−1
#2 أفضل إجابة

code blocks يستخدم غالباً مع مكتبة wxwidgets عن طريق مصمم توفره البيئة (هذا مثال على استخدامه).

 

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

 

هذا شرح سريع لـwxwidgets مع مثالين إن شاء الله يساعدك للبدء.

 

أولاً wxwidgets مكتبة لإنشاء البرامج الرسومية، ميزاتها عن باقي المكتبات الرسومية أنها تغلف الدوال الرسومية للنظام (في لينكس تستخدم gtk)، فالبرنامج الذي تكتبه سيظهر طبيعياً كما لو كتبته باستخدام دوال win32 في لينكس أو cocoa في ماك، باقي المكتبات إما تظهر برامجها بشكل مختلف أو أنها غير منقولة. بالإضافة لسهولة المكتبة وعدم تعقيدها، بدأت أستخدمها منذ أشهر مع بايثون وأحياناً مع c++ ولم أجد مشاكل معها.

 

أبسط برنامج يمكنك كتابته فيها:

#include <wx/wx.h>

class Application : public wxApp {
  bool OnInit() {
    wxFrame *frame = new wxFrame(NULL, wxID_ANY, "مثال على استخدام wxWidgets");
    frame->SetLayoutDirection(wxLayout_RightToLeft);
    frame->Maximize();
    frame->Show();
    return true;
  }
};

wxIMPLEMENT_APP(Application);

كل برنامج رسومي يلزم أن يرث الفئة wxApp حيث تمثل البرنامج وفيها مجموعة من الوظائف أهمها الوظيفة OnInit (ورثتها wxApp من wxAppConsole) والتي تستدعى عند اكتمال تحميل البرنامج، هنا يمكنك عمل ماتريد مثل إنشاء نافذة وغيرها، يجب أن تعيد true لإكمال البرنامج، أو false لإغلاقه فوراً كعند حصول مشكلة مثلا.

 

دخل OnInit أنشأ البرنامج نافذة باستخدم  wxFrame (هناك أنواع أخرى من النوافذ مثل wxDialog)، وتمثل واجهة البرنامج، النافذة رئيسية لا أب لها مررنا NULL مكان الأب، ومعرف النافذة لايهم مررنا wxID_ANY وقيمته -1 ووضعنا عنوان للنافذة، ثم جعلنا استجاهها من اليمين لليسار، ثم كبرها وعرضها .

 

wxIMPLEMENT_APP تخفي عملية إنشاء الدالة الرئيسية main فقط مرر لها فئة البرنامج وهي تتولى إنشاء الدالة الرئيسية وباقي الأمور.

 

برنامج أكبر عن كيفية إدارة الأحداث:

#include <wx/wx.h>

class MainFrame : public wxFrame {
  enum {
    ID_BUTTON_CLICKME // معرف الزر، مهم لإستدعاء الدالة عند الضغط على الز
  };
  wxPanel *panel;
  wxButton *button;

public:
  MainFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title) {
    SetLayoutDirection(wxLayout_RightToLeft);
    panel = new wxPanel(this);
    // زر
    button = new wxButton(panel, ID_BUTTON_CLICKME, "إضغطني", wxPoint(10, 10));
  };

private:
  // دالة ستستدعى عند إغلاق البرنامج لتأكيد
  void OnClose(wxCloseEvent& event) {
    if( wxMessageBox("هل تريد إغلاق البرنامج؟", "إغلاق",
        wxYES_NO | wxICON_QUESTION | wxNO_DEFAULT, this) == wxYES ) {
      Destroy();
    }
  }
  // دالة ستنفذ عند الضغط على الزر
  void OnClickMe(wxCommandEvent& event) {
    wxMessageBox("السلام عليكم :)", "رسالة", wxOK, this);
  }

  wxDECLARE_EVENT_TABLE();
};

// ربط الدوال التي ستستدعى عند حصول أي من هذه الأحداث
wxBEGIN_EVENT_TABLE(MainFrame, wxFrame)
  EVT_CLOSE(MainFrame::OnClose) // عند إغلاق البرنامج
  EVT_BUTTON(MainFrame::ID_BUTTON_CLICKME, MainFrame::OnClickMe) // عند الضغط على الزر
wxEND_EVENT_TABLE()

class Application : public wxApp {
  MainFrame *frame;
  bool OnInit() {
    frame = new MainFrame("مثال على استخدام wxWidgets");
    frame->Maximize();
    frame->Show();
    return true;
  }
};

wxIMPLEMENT_APP(Application);

أنشأنا نافذة خاصة عن طريق وراثة wxFame ووضعنا فيها لوح بدل الفراغ الرمادي ثم أنشأ زر wxButton إبن للوح ووضع له معرف وكلمة "إضغطني" ثم جعل موقعه عند 10، 10.

 

wxBEGIN_EVENT_TABLE و wxEND_EVENT_TABLE مسؤولة عن إدارة الإحداث وربطها بالدوال، حيث ربط حدث EVT_CLOSE إغلاق النافذة بالدالة MainFrame::OnClose. ثم ربطنا حدث EVT_BUTTON الذي يمثل ضغط زر، والذي معرفه MainFrame::ID_BUTTON_CLICKME ، بالدالة MainFrame::OnClickMe.

 

ستجد الكثير من التفاصيل في وثائق المكتبة.

 

بالتوفيق.

5
#3

شكراّ لك أخى الكريم على المساعدة


ولكن فية مشكلة اثناء تشغيلىwxwidgets


واليك الصورة للتوضيح


197445136.jpg


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


#4

للرفع ........أخى ارجو ان اجد الاجابة

#5

أخى العزيز

 

هذة الرسالة تخبرك بأن المجلد الذى تشير إلية لا يحتوى على ملفات مكتبة wxWidgets .

أعلم أخى العزيز إذا لم نقوم بعمل Compiling لمكتبة wxWidgets, لابد أن تقوم بعمل Compiling لمكتبة wxWidgets أولا حتى تنتج ملفات مكتبات lib التى سوف تستخدمها فى تطبيقاتك

 

يمكنك رؤية هذة الفيديوهات التالية لعلها تفيدك.

الفيديو الاول يبدأ معك بدأ من عمل Compiling لمكتبة wxWidgets وحتى إنشاء تطبيق بسيط

https://www.youtube.com/watch?v=QuPiZ86EFhQ
https://www.youtube.com/watch?v=PzbMEe6xCPI

 

 

وهذا بحث فى موقع Youtube, يوجد بة كل الفيديوهات التعليمية المرتبطة بمكتبة wxWidgets.

إضغط هنا

تم تعديل هذه المشاركة بواسطة مستر برمجة في 19 يناير 2014 في 17:07

1

||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||


egypt_coa.gif


||||||||||||||||||||||||||||||||||||


||||||||||||||||||||||||||||||||||||

#6

شكراّ أخى الكريم..أنا عاجز عن الشكر ...

وبعد البحث رأيت هذا الرابط كان مفيد جداّ لسؤالى

كيف انشئ لبرنامجي واجهة رسومية؟
−1

هذا الموضوع مغلق.

مواضيع مشابهة