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

كيف أظهر نافذة أخرى موجودة في المشروع

مغلق
بدأه eias في 7 أكتوبر 2005 · 13 رد · 900 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم..

أعرف ستقولون أكثرت الأسئلة..بس الحقيقة لا أقدر أن أقاوم مغريات ال++C.

السؤال كيف أظهر نافذة أو Form أخرى موجودة في المشروع مثلا عندي Form بعنوانIDD_EIAS حاولت إظهارها بالكود :

GetDlgItem(IDD_EIAS)->ShowWindow(3);

ولكن حصل خطأ (الكود واضح خاطىء)..ما هي الطريقة لإظهار النافذة في الحالتين ..

النافذة الرئيسية مفعلة و غير مفعلة (أي Modal كما في لغة vb)

سؤالين جانبيين: هل الIDD هذه ضرورية قبل اسم الForm

كيف أجعل نافذة ما من المشروع هي الرئيسية أي التي تظهر في بداية الRun

وشكرا لكم :lol:

#2

بدل إظهار النافذة بهذه الطريقة من الأفضل أن تتخذ الطريقة التقليدية في ذلك , وهي بأن تقوم بعمل include للهدر الخاص بالقورم الجديد داخل الملف الذي تريد أن تستدعي منه الفورم الجديد ,

وبعد ذلك تعرف object من نوع class الفورم الجديد , وتقوم بإستدعاء الدالة المشهورة DoModal()

مثلا ,,, الفورم الجديد إسمه Play , ستكون أسماء ملفي ال header وال cpp الخاص بهما هو ,

Cplay.h

Cplay.cpp

ليكون كودك في صفحة الإستدعاء كالتالي :

#include "cplay.h"


void YourClass::CallingFunction()
{
CPlay p;
p.DoModal();
}

ال

IDD مهمة في التعامل بطريقة المعرفات , و GetDlgItem أصلا تأخذ برمترات لمعرفات يمكن أن تكون أي تحكم فرعي في النافذة , أمثال الأزرار وغيرها ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

أخي الكريم HGBشكر لك..

طبقت الطريقة ولكن تجاوزت الClass و كتبت الكود بشكل مباشر ..

void CALShamrTestDlg::OnButton9()

{

Eias p;

p.DoModal();

}

الحقيقة لم أعرف الهدف من الClass..؟؟

وشكرا لك

#4
اقتباس
الحقيقة لم أعرف الهدف من الClass

الهدف منه هو تكوين كلاس موروث من الفورم

void CALShamrTestDlg::OnButton9() 
{
Eias p;
p.DoModal();
}

الكلاس Eias يجب ان يكون موروث من فورم

#include"EiasH.h"
public _gc class CPlay : public System::Windows::Forms::Form
{
...
..
private: System::Void ButtonName_Click(System::Object *  sender, System::EventArgs *  e)
{
Eias *pEias=new Eias;
pEias->Show();
}
....
}

طريقة اخرى بالوندوز فورم

السلام عليكم

تم تعديل هذه المشاركة بواسطة ahmed_3d في 8 أكتوبر 2005 في 15:42

"خيركم من تعلم العلم وعلمه". ..........استغفر الله. ........ اللهم صلي وسلم على سيدنا محمد

احمد عبد الحميد ابوغرارة

CodeGuru CodeProject CGTalk

#5

الحقيقة أخي الكريم ahmed_3d أكذب عليك لو قلت لك إني فهمت قصدك ..موروث ..هل هنا مكان للوراثة أيضا ..الحقيقة أنا الكود لم يتوضح عندي كثيرا ..

على فكرة يا شباب نسيتو الأسؤال الفرعي الثاني..و إذا ما فيها تثقيل.. طريقة فتح الForm بدون Modal يعني النافذتين مفعلات..

وشكرا لكم ^.^

#6

اعتقد اياس يستخدم دوال فقط ..

انا ما فهمت السؤال مظبوط واكذب عليك لو قلت لك فهمت 100% :)

لكن :

اولا ID لايلزم ان تبدأ به . لكن هذا تقليد ممتاز ... اعتدنا عليه .

IDD

ID .. ثم الحرف الثاني يوضح نوع المعرف مثلا DIALOG تاخذ اول حرف ويصير IDD .. ايقونة ICON تاخذ اول حرف IDI ..

مؤشر ماوس IDC ,,,, يعني كل مافي المسألة تقليد ... حتى يسهل عليك فهمه .. من هنا وطالع .. سمها eias_Dialog :)

ثانيا :

اظهار النافذة ..

الطريقة الواضحة السهلة ..

ShowWindow(HWND,1)

او بدل االرقام تكتب ثوابت مثلا

ShowWindow(HWND,WS_SHOW)اظهار
ShowWindow(HWND,WS_HIDE)اخفاء

البارمتر الاول تكتب مقبض نافذتك التي تريد .. سواء زر .. نافذة الام .. مربع حوار .. اداة صندوق النص ... اي نافذة .

كيف أجعل نافذة ما من المشروع هي الرئيسية أي التي تظهر في بداية الRun

الامر سهل ..

ولايحتاج الا ان تعرف كيف يسير برنامجك ..

بعد ان تبني النافذة ..

HWND hwnd = CreateWindow(....) 

HWND hwnd2 = CreateWindow(..)

الان اظهر اي نافذة تريد

ShowWindow(hwnd2 ,1);
ShowWindow(hwnd ,0);

فانت انشأت نافذتين .. واخترت احدهما لتظهر ,,,,,

ولكن .. هناك استثناءات .. فيما يتعلق باظهار النوافذ .. احيانا قد لاتملك مقبض لنافذة ما ... يعني سويتها عن طريق الموارد Resource ..

هنا نلجأ لدوال اخرى .. او رسائل SendDlgItemMessage

راجع باMSDN مواضيع مشابهة مثل

Dialog Box Functions

Window Functions

..

ودوال مثلا

ShowOwnedPopups

IsWindowVisible

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#7

على فكرة اعدت قراءة السؤال مرة ثانية

..

على فكرة يا شباب نسيتو الأسؤال الفرعي الثاني..و إذا ما فيها تثقيل.. طريقة فتح الForm بدون Modal يعني النافذتين مفعلات..

وشكرا لكم ^.^

واعتقد ان ردي في وادي بعيد شوي .. : )

اذا كان قصدك شيء اخر وضحه .. بعيدا عن مصطلحات الفيبي :)

اذا كنت تقصد بدون فئة ... WNDCLASS .. مثلا .. يعني صندوق حوار .. ؟؟!!

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#8

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

شيق و أعجبني و تابعت دروسك فيه..ولكن الحقيقة أنا أستعمل مشروع من نوع Dialog أي MFC ...و تعلم ..لا يسمح لي بهذه

الأشياء ..يعني لم أجد الCreatWindow و حتى ال ShowWindow يجب أن تضع المقبض ولكن كيف ستعرف ماهو اسم

المقبض ..هل هوياسم النافذة نفسها مثل IDD_EIAS يكون مقبضها EIAS..

أما بالنسبة

---------------------------

اذا كنت تقصد بدون فئة ... WNDCLASS .. مثلا .. يعني صندوق حوار .. ؟؟!!

---------------------------

تماما

يا ريت في WNDCLASS كان الموضوع أسهل..

أما بالنسبة للطلب الثاني أنا قصدت أن تظهر النافذة الثانية بدون أن تطغى على الأولى يعني لا تلغي تفعيل الأولى..الحقيقة لم أجد

إلا تعبيرات فيجوال بيكسية للتعبير عنها ^.^.

الحقيقة في الآونة الأخيرة اكتشفت..أن MFC هي مجرد دوال فقط.

وشكرا

#9
اقتباس
أما بالنسبة للطلب الثاني أنا قصدت أن تظهر النافذة الثانية بدون أن تطغى على الأولى يعني لا تلغي تفعيل الأولى..الحقيقة لم أجد

ظهور الثانية لا يلغي ظهور الاولى الا اذا برمجت انت ذلك

اقتباس
شيق و أعجبني و تابعت دروسك فيه..ولكن الحقيقة أنا أستعمل مشروع من نوع Dialog أي MFC ...و تعلم ..لا يسمح لي بهذه

الأشياء ..يعني لم أجد الCreatWindow و حتى ال ShowWindow يجب أن تضع المقبض ولكن كيف ستعرف ماهو اسم

المقبض ..هل هوياسم النافذة نفسها مثل IDD_EIAS يكون مقبضها EIAS..

؟؟

اذا اردت التعامل مع دوال ال WIN32 فتستطيع ذلك بمعرفتك للفصائل ومتغيراتها ودوالها

النافذة تتكون بتعريفك لكلاس موروث من dialog حيث انك تتعامل معه

ولتتعامل مع الدوال الموجودة في هذا الكلاس يجب ان تكون object لهذا الكلاس ومنه يمكنك ان تستخدم الدوال والمتغيرات الموجودة في الكلاس الذي كونته زائد الدوال والمتغيرات المعرفة على انها protected or virtual من الكلاس الذي ورثت منه

مصمموا الفيجوال سي++ سهلوا عليك تكوين الفورم بتوفيرهم لدوال ومتغيرات تساعد في تكوين الفورم وما عليك الا معرفة كيف تتعامل مع هذه المتغيرات والدوال

اقتباس
الحقيقة في الآونة الأخيرة اكتشفت..أن MFC هي مجرد دوال فقط

هي عبارة عن classes وهي اختصارا ل Microsoft foundation Classes

كل كلاس يحتوي على دوال ومتغيرات

نصيحة : لو تراجع السي++ جيدا سيمكنك بعدها التعامل مع ال vc++ بيسر وسهولة

السلام عليكم

تم تعديل هذه المشاركة بواسطة ahmed_3d في 10 أكتوبر 2005 في 18:52

"خيركم من تعلم العلم وعلمه". ..........استغفر الله. ........ اللهم صلي وسلم على سيدنا محمد

احمد عبد الحميد ابوغرارة

CodeGuru CodeProject CGTalk

#10

أخي الكريم Ahmed_3D

الحقيقة أنا لم يكن قصدي إلغاء ظهور و إنما إلغاء تفعيل(لاحظ الفرق) يعني مثلا لو كان عندك بالنافذة الأولى زر او صندوق نص

فأنه عند ظهور النافذة الثانية لن تستطيع أن تنقر على الزر لأن النافذة الأولى تم إلغاء تفعيلها أو تجميدها (كما يحدث عند ظهور

MessageBox ) يعني Disable.. إذا حاليا لا طريقة للحصول على المقبض إلا بالSPY++

ولكن لحظة ..أنا أعرف ان هناك Visula C++ و Borland C++ ولكن ماهذه ال++C هل هي لغة أخرى او مترجم آخر

غير هؤلاء..و ما الفرق إذا كانت اللغات الثلاثة هي لغة واحدة و هي++C ذات الcout وال cin نفسها..

وشكرا لك

#11
اقتباس
فأنه عند ظهور النافذة الثانية لن تستطيع أن تنقر على الزر لأن النافذة الأولى تم إلغاء تفعيلها

هذا يحدث اذا قمت بأنشاء ال Dialog Box على اساس انه Modal

DialogInstance->DoModel();

هذا النوع من صناديق الحوار لا يمكنك من خلاله الا ان تتخاطب معه فقط وبعد اغلاقه سيمكنك التعامل مع ال Parent dialog box

النوع الثاني هو Modeless dialog box وهو الذي مكنك من التعامل معه ومع اي dialog box اخر

يمكنك استخدام هذه الطريقة

كون 2 dialog boxes طبعا كل واحد له كلاس خاص به

في الكلاس الخاص بال dialog box الاول والذي تريد ان تنتقل منه الى الثاني قم بتضمين الكلاس الثاني بطريقة ال composition

#include"DialogBox2Header.h"
class Dialog1 : CDialog
{
DialogBox2CLASS *pDB2;
..
};

في ال Constructor الخاص بال dialog box الاول قم بالاتي

pDB2=new DialogBox2CLASS();

الان في المكان الذي تريد فيه ان تنفذ عملية اظهار النافذة الثانية قم بالاتي

pDB2->Create(IDD_DIALOG2,this);
pDB2->ShowWindow(SW_SHOW);

كما يمكنك ان تنشيء دالة لمسح المؤشر عند عدم الحاجة له

كما ان المتغير الاول للدالة Create هو مقبض للنافذة الثانية والتي تريد اظهارها وهذه الدالة تقوم بتكوين النافذة ولا تظهرها ولاظهارها تستخدم الدالة التي تحتها وهي تأخذ عدد من ال messages يمكنك الاطلاع عليها في ال help

اقتباس
ولكن ماهذه ال++C

هي اقوى لغة برمجة بعد السي

اقتباس
ولكن لحظة ..أنا أعرف ان هناك Visula C++ و Borland C++ ولكن ماهذه ال++C هل هي لغة أخرى او مترجم آخر

غير هؤلاء..و ما الفرق إذا كانت اللغات الثلاثة هي لغة واحدة و هي++C ذات الcout وال cin نفسها..

يمكنك معرفة ما هي الفيجوال سي++ بالنظر الى اسماء المشاريع التي تستطيع تكوينها في الفيجوال ستوديو اما بالنسبة للبورلاند فلم اتعامل معها من قبل كما ان المتدى قد ناقش هذا الموضوع عدة مرات

نصيحتي مرة اخرى ان تدرس السي++ قبل ان تبرمج بأستخدام الفيجوال سي++ لانك منها ستعرف معاني عدد كبير من المصطلحات وما هي البرمجة كائنية المنحنى OOP

تم تعديل هذه المشاركة بواسطة ahmed_3d في 11 أكتوبر 2005 في 10:25

"خيركم من تعلم العلم وعلمه". ..........استغفر الله. ........ اللهم صلي وسلم على سيدنا محمد

احمد عبد الحميد ابوغرارة

CodeGuru CodeProject CGTalk

#12

أخي الكريم شكرا لك..

بس الحقيقة تسمياتك ضيعتني لم أعد أعرف إذا كانت من اللغة أم أنها أسماء نوافذ ^.^

يعني النافذة التي أريد إظهارها اسمها

IDI_EIAS

ولكن الحقيقة خجلان منك ..لأني لم أتعلم هذه المصطلحات بعد يعني ما هو الcomposition

أين هو ال Constructor الخاص بالنافذة.وشكرا

#13

بارك الله فيك اخي ahmed_3d على هذا الشرح الوافي

اقتباس
ولكن الحقيقة خجلان منك ..لأني لم أتعلم هذه المصطلحات بعد يعني ما هو الcomposition

أين هو ال Constructor الخاص بالنافذة.وشكرا

اقتباس
نصيحتي مرة اخرى ان تدرس السي++ قبل ان تبرمج بأستخدام الفيجوال سي++

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…