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

[ تمت الإجابة ]مساعدة في انشاء نافذة بسيطة في Windows

مغلق
بدأه enstien في 21 يناير 2008 · 9 رد · 2,446 مشاهدة · في أرشيف قسم Windows APIs
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أخواني...

أنا مبتدأ في البرمجة على نظام الويندوز ووهذه أول نافذة أقوم ببرمجتها وأجتاازت مرحلة ال COMPILING(أي المترجم لا يصدر خطأ)

إلا أنها ببساطة لا تعمل ويقوم نظام الويندوز بأصدار خطأ

وهذا هو كود النافذة :

# include<windows.h>
char szClassName[]= "HELLO";
LRESULT CALLBACK WindowProcedure(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hThisInstance ,HINSTANCE hPrevInstance,LPSTR lpstr,int nFunsterStil){
	HWND hwnd;
	MSG messages;
	WNDCLASSEX wincl;
	wincl.style=CS_DBLCLKS;
	wincl.hInstance=hThisInstance;
	wincl.lpfnWndProc=WindowProcedure;
	wincl.lpszClassName=szClassName;
	wincl.cbSize=sizeof (WNDCLASSEX);
	wincl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
	wincl.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
	wincl.hCursor=LoadIcon(NULL,IDC_ARROW);
	wincl.lpszMenuName=NULL;
	wincl.cbClsExtra=0;
	wincl.cbWndExtra=0;
	wincl.hbrBackground=(HBRUSH) COLOR_BACKGROUND;
	if(!RegisterClassEx(&wincl))return 0;
	hwnd=CreateWindowEx(0,szClassName,"MY FIRST WINDOWS",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,544,375,HWND_DESKTOP,NULL,h
ThisInstance,NULL);
	ShowWindow(hwnd,nFunsterStil);
	while(!GetMessage(&messages,NULL,0,0)){
	  TranslateMessage(&messages);
	  DispatchMessage(&messages);
		 }
	  return messages.wParam;
		  }
		 LRESULT CALLBACK WindowProcedure(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){
				  switch(msg){
		 case WM_DESTROY:
			 PostQuitMessage(0);
			break;
			 default:
				 return WindowProcedure(hwnd,msg,wParam,lParam);
				  }
				   return 0;
						 }

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 21 يناير 2008 في 01:32

#3

جزاك الله خير أخي Blueteeth :clapping:

أنا عملت مثل ما تفضلت حضرتك

ولكن أيضا يحدث نفس الخطأ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ مع العلم أنني أستخدم :cry: dev-cpp

#4
return WindowProcedure(hwnd,msg,wParam,lParam);

ما معنى هذا السطر ؟؟

المفروض ان الحالة Default بتكون اذا تم استقبال رسالة ليس لها اجراء خاص !

وفي هذه الحالة يتم استدعاء الدالة DefWindowProc ...

أي يجب تحويل السطر السابق الى :

return DefWindowProc(hwnd, msg, wParam, lParam);

جرّب واخبرني بالنتيجة ...

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#5

أيوةةةة صح أخى GamingMaster بارك الله فيك و فى قوة ملاحظتك :D (اللهم لا حسد ههههههههههههههه)

#6

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

ليس لدي اي كومبايلر ولكني سوف اساعدك .

هنالك خطا في تعين hCursor الخاص بالتركيب ويندوز كلاس wincl عليك استبدال السطر التالي

wincl.hCursor=LoadIcon(NULL,IDC_ARROW);

بالسطر

wincl.hCursor = LoadCursor((HINSTANCE) NULL,  IDC_ARROW);

الخطاء الثاني .

استبدل هذا السطر

wincl.hbrBackground=(HBRUSH) COLOR_BACKGROUND;

بالسطر

wincl.hbrBackground = GetStockObject(WHITE_BRUSH);

بعد عرض النافذة عليك باعادة رسمها من جديد

ShowWindow(hwnd,nFunsterStil);
UpdateWindow(hwnd);

استبدل هذا السطر

hwnd=CreateWindowEx(0,szClassName,"MY FIRST WINDOWS",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,544,375,HWND_DESKTOP,NULL,h
ThisInstance,NULL);

بهذا

hwnd=CreateWindowEx(0,szClassName,"MY FIRST WINDOWS",WS_OVERLAPPEDWINDOW,0,0,0,0,0,NULL,h
ThisInstance,NULL);

بعد انشاء النافذة يمكنك عمل resize لها.

كذلك اهم شي هو معالجة الرسالة WM_PAINT ، اذا لم تعالج هذه الرسالة فلن تري نافذة ولن تري اي برنامج وعلي ما اعتقد ان هذا هو الخطاء

الذي تعاني منه.

كذلك عليك عدم معالجة اي خطاء عند جلب الرسائل استخدم هذه الطريقة

int bRet;
 while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
	{ 
		if (bRet == -1)
		{
			// handle the error and possibly exit
		}
		else
		{
			TranslateMessage(&msg); 
			DispatchMessage(&msg); 
		}
	}

تم تعديل هذه المشاركة بواسطة garo في 21 يناير 2008 في 17:00

( _ /)

(='.'=)

(")-(")

#7

والله يا أخوان ما أعرف كيف أشكركم B)

وأخيرا أنشأت أول نافذة والفضل كله لكم

#8

انا اعرف هذه لغة فيجوال سي وهو بطريقة win32 ولكن برمجتها معقدة جداً ولا افهم اي شئ منه

هل يوجد دروس بالنسبه للغة بهذه الطريقة وبالتفصيل؟

#9

لا اعرف لماذا تم نقل الموضوع الي منتدى برمجة الوندوز بالإعتماد على Windows API

فهذا المنتدي (منتدى برمجة الوندوز بالإعتماد على Windows API) يتعارض مع منتدي السي\السي بلس

بشكل غريب ومع غيره من المنتديات الاخري، فالموضوع هذا يقع في صميم برمجة السي بلس ونحن ننشئي برامجنا باستخدام WINAPI .

فالـAPI ليست لها علاقة بلغة برمجة معينة يمكن لاي لغة استخدام الـAPI بشكل او باخر كما انها ليست لغة او شئ يمكن شرح احدي نقاطه

بدون استخدام احدي لغات البرمجة ،هل يتم نقل موضوع مشابه لهذا الموضوع

(كيفية انشاء نافذة) مثلا اذا كتب في منتدي الفيجوال بيسيك ،لا بكل تاكيد فهذا من صميم عمل لغة الفيجوال بيسيك ،وهذا يسري علي كل اللغات الاخري.

نتمني من ادارة المنتدي ان تفطن الي هذا الشي وان تقوم بمعالجة هذا التعارض وازالة منتدي برمجة الوندوز بالإعتماد على Windows API

من خارطة منتديات الفريق العربي للبرمجة.

كما ان هذا المنتدي ليس به نشاط كثيف وذلك نتيجة السبب السابق ،فمجموع مواضيع منتدى برمجة الوندوز بالإعتماد على Windows API

لا تصل الي 100 موضوع والمشاركات فيه قليلة جدا .

( _ /)

(='.'=)

(")-(")

#10

السلام عليكم أخي garo,

للأسف أن هذا القسم مخصص لبرمجة windows و أرى أن وجهة نظرك صحيحة نسبياً,

إذا أردتم يمكنني إرجاعه و اعتماد برمجة windows تحت ++C/C لتصبح في قسم ++C مباشرة,

تحياتي ,,

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

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

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

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

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

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