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

[ تمت الإجابة ]مشكله مع System Menu

مغلق
بدأه GHOST2010 في 3 مايو 2009 · 31 رد · 3,802 مشاهدة · في أرشيف قسم Windows APIs
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أنا عندى استفسار بسيط لو تكرمتم لأنى مش ضليع فى الـ API

أنا عملت فورمة ولغيت منها الـ ControlBox ورسمت ControlBox بالشكل اللى أنا عايزه وكل حاجة تمام

السؤال هو:

ازاى لما المستخدم يضغط كليك يمين على البرنامج فى الـ TaskBar تظهر الـ SystemMenu مع انه مفيش ControlBox زى برنامج الياهو ماسنجر كده أو برنامج الـ Active Skin اللى كنا بنستخدمه فى الفيبى زمان؟؟؟؟؟؟

وعايز رد بسرعة وإلا....... :angry:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#2

لم افهم المشكلة بالضبط ، صححني لو اخطأت الفهم ..

تريد window بدون titlebar لكن تريد مكان وهمي اذا ضغط المستخدم عليه تظهر الـmenu ؟

مثل هذا :

post-101943-1241371988_thumb.png

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#3

ما أريده GM هو كما قلت لكن المينيو التى ستظهر هى System Menu المعروفة (Restore - Move - Size...ect)

كما فى الياهو ماسنجر وكما تفعل برامج الـ Skins مثل ActiveSkin و SkinCrafter وغيرها كما قلت

إذا كان السؤال مازال غير واضحا فالسؤال بطريقة أخرى

كيف أظهر قائمة عند ضغط المستخدم على البرنامج فى شريط المهام؟؟؟؟؟؟؟

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#4

أنا قعدت اجرب امبارح بس ال menu مظهرتش مش عارف ليه بس الفكره انك هتستخدم الداله GetSystemMenu علشان تجيب ال menu وبعد كده تظهرها في المكان اللي انت عايزه بالداله TrackPopupMenuEx وعيش انت بقى :D

أفتنا يا GM :D

#5

كما قال حازم .

اعمل handling للرسالة WM_CONTEXTMENU ثم TrackPopupMenu و مرر الـHwnd الخاص بالـSystemMenu عن طريق GetSystemMenu .

ليس لدي وقت لعمل مثال كامل الان لكن جرّب وسنتابع معك .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#6

ماشى ياعم زووووم

ياعم الحاج ماهو انا اول مافكرت فى الموضوع جربت الطريقة دى

المشكلة ياجماعة ان مفيش أصلا SystemMenu للفورم علشان اعملها Track

شوفووووووو الياهووووووو ماسنجررررررررر :angry:

عندى سؤال ياعم جى إم :blush:

بمناسبة ان المعلم حازم جاب السيرة

لما باستخدم TrackPopupMenu المينيو بتظهر لكن لما اضغط على اى عنصر فيها مش بينفذ مهمته ليه؟ :wacko:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#7
اقتباس
عندى سؤال ياعم جى إم

بمناسبة ان المعلم حازم جاب السيرة

لما باستخدم TrackPopupMenu المينيو بتظهر لكن لما اضغط على اى عنصر فيها مش بينفذ مهمته ليه؟

علشان لا انت عملت handling للـWM_COMMAND/WM_SYSCOMMAND القادم من المنيو بعد الضغط عليه ولا مررت الرسالة للـdefault handler .

TrackPopupMenu

Return Value

If you specify TPM_RETURNCMD in the uFlags parameter, the return value is the menu-item identifier of the item that the user selected. If the user cancels the menu without making a selection, or if an error occurs, then the return value is zero.

If you do not specify TPM_RETURNCMD in the uFlags parameter, the return value is nonzero if the function succeeds and zero if it fails. To get extended error information, call GetLastError.

يبقى الحل بسيط يا معلم في الحالة دي :

case WM_CONTEXTMENU:
if ((HWND)wParam == hWnd)
{
	INT miId;
	POINT point;
	GetCursorPos(&point);
	miId = TrackPopupMenu(GetSystemMenu(hWnd, FALSE), TPM_LEFTALIGN | TPM_RETURNCMD, point.x, point.y, 0, hWnd, NULL);
	if (miId)
	{
		SendMessage(hWnd, WM_SYSCOMMAND, miId, 0);
	}
}
break;

اقتباس
المشكلة ياجماعة ان مفيش أصلا SystemMenu للفورم علشان اعملها Track

ليه طيب ؟ اعمل enable للـSystemMenu وعمل Disable للـTitleBar وشوف النتيجة .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#8

شكرا ياجي انا ماكنتش باستخدم SendMessage فى الآخر

اقتباس
اعمل enable للـSystemMenu وعمل Disable للـTitleBar وشوف النتيجة .

ازاى اعمل كده؟؟

فى الفيبى بمجرد انى الغى الـ TitleBar المينيو تتلغى معاه على طووووووول

معلش واحدة واحدة عليا علشان انا دماغى مقفلة :blink: :S :wacko: :wacko:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#9

مش انت بتستخدم Visual Studio ؟

هتلاقيه في الـProperties الخاصة بالديالوج .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#10

أظن سؤال مهدي هو: هل لو قمنا بإلغاء ال title bar وكذلك أغينا ظهور الفورم في ال task bar هل تبقى ال system menu كخاصيه ونستطيع الحصول عليها بدالة GetSystemMenu أم تختفى باختفاء مناطق ظهورها ولن نستطيع اظهارها؟

#11

لا اظن انه سيتم انشاء SystemMenu مرتبط بالديالوج اصلا وعليك انشاؤه بنفسك .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#12

تمام زى ماحازم قال

يعنى مفيش مينيو أصلا.... :blink:

عموما هاجرب كده وراجعلك ياجى بس بلاش تتعصب علينا ياعم :angry:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#13

اتعصب عليكم ازاي يا عم الحاج ، ده حتى العين متعلاش عن الحاجب :wub:

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#14
GamingMasteR كتب:
اتعصب عليكم ازاي يا عم الحاج ، ده حتى العين متعلاش عن الحاجب :wub:

أحيانا تعلى لو ورمت :wacko:

اه

جى

نفسى أسألك من زمان عن الصورة الرمزية الخاصة بيك ,, هى ايه دى؟؟؟؟؟؟؟؟؟ :blink:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#15

ده تقريبا راس طور عفش محروقة وواخدة خرطوش بين العينين :D

محضرتش انت الصورة الرمزية القديمة دي :

post-101943-1241603659_thumb.jpg

وده صداغه (خدوده يعني) كانت بتعبر عن حالة الورم اللي انا وناس كتير عايشينها :D

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#16

كلنا في الورم سوا :D

بص يا مهدي اعمل implementation للـ form move بالأحداث (يدوي يعني) ونفس القصه مع الـ close وريح دماغك.

#17
اقتباس
بص يا مهدي اعمل implementation للـ form move بالأحداث (يدوي يعني) ونفس القصه مع الـ close وريح دماغك.

ياعم حازم أنا مش عايز دى ,,, :S

على فكرة يا جى انت قلت انى ابنى المينيو بنفسى ,, ممكن تقولى ازاى؟؟؟؟؟؟؟؟؟؟

ومعلش استحملنا شوية :blink:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#18
#define ID_MENU_RESTORE  1
#define ID_MENU_MOVE	 2
#define ID_MENU_SIZE	 3
#define ID_MENU_MINIMIZE 4
#define ID_MENU_MAXIMIZE 5
#define ID_MENU_CLOSE	6

INT_PTR CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId;
	static HMENU hSysMenu;

	switch (message)
	{
	case WM_INITDIALOG:
		hSysMenu = CreatePopupMenu();
		AppendMenu(hSysMenu, MF_STRING, ID_MENU_RESTORE, TEXT("Restore"));
		AppendMenu(hSysMenu, MF_STRING, ID_MENU_MOVE, TEXT("Move"));
		AppendMenu(hSysMenu, MF_STRING, ID_MENU_SIZE, TEXT("Size"));
		AppendMenu(hSysMenu, MF_STRING, ID_MENU_MINIMIZE, TEXT("Minimize"));
		AppendMenu(hSysMenu, MF_STRING, ID_MENU_MAXIMIZE, TEXT("Maximize"));
		AppendMenu(hSysMenu, MF_STRING, MF_SEPARATOR, NULL);
		AppendMenu(hSysMenu, MF_STRING, ID_MENU_CLOSE, TEXT("Close"));
		break;
	case WM_CONTEXTMENU:
		if ((HWND)wParam == hWnd)
		{
			POINT point;
			GetCursorPos(&point);
			TrackPopupMenu(hSysMenu, TPM_LEFTALIGN, point.x, point.y, 0, hWnd, NULL);
		}
		break;
	case WM_COMMAND:
		if (LOWORD(wParam) == 0)
		{
			wmId = LOWORD(wParam);
			switch (wmId) // Menu Identifier
			{
			case ID_MENU_RESTORE:
				// add your code here
				break;
			case ID_MENU_MOVE:
				// add your code here
				break;
			case ID_MENU_SIZE:
				// add your code here
				break;
			case ID_MENU_MINIMIZE:
				// add your code here
				break;
			case ID_MENU_MAXIMIZE:
				// add your code here
				break;
			case ID_MENU_CLOSE:
				// add your code here
				break;
			default:
				return false;
			}
		}
		break;
	case WM_CLOSE:
		DestroyWindow(hWnd);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return false;
	}
	return true;
}

تم تعديل هذه المشاركة بواسطة GamingMasteR في 7 مايو 2009 في 11:57

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#19

جى

حصلت مشكلة غريبة

انا استخدمت SetWindowLong مع GWL_WNDPROC علشان اعمل هوك للرسائل واتحولت الرسايل للميثود بتاعتى عادى جدا الكلام ده فى تحميل الفورم Form.Load لكن بعد مايخلص تحميل الفورم يقفل البرنامج خالص

عندك فكرة ليه؟؟؟؟؟؟؟؟؟؟ :o

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#20

ايه ياعم جى

انت اختفيت فيييييييييين

عموما عندى مشكلة كمان

لما جربت المينيو بتظهر لما اضغط كليك يمين على شريط العنوان أنا كمان عايزها تظهر لو ضغطت على البرنامج كليك يمين فى شريط المهام :cry: :tantrum:

معلش انا عارف انى تعبتك معايا :angry:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#21

جى :angry:

طيب أى حد يعبرنا علشان جى مل مننا :wacko:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#22

اعذر GamingMasteR عشان اليومين دول يومين امتحنات وكده .

With method and logic one can accomplish anything.

— Agatha Christie, Poirot Investigates, 1924

مدونتى

#23
اقتباس
انا استخدمت SetWindowLong مع GWL_WNDPROC علشان اعمل هوك للرسائل واتحولت الرسايل للميثود بتاعتى عادى جدا الكلام ده فى تحميل الفورم Form.Load لكن بعد مايخلص تحميل الفورم يقفل البرنامج خالص

اكيد خطأ في الكود عندك تلاقيك نسيت وبدلت return true بــfalse في جزئية او العكس او شئ مشابه ،، انظر اكثر او ارفق الكود كي نرى .

زي مايكون شكله VB ؟؟

اقتباس
لما جربت المينيو بتظهر لما اضغط كليك يمين على شريط العنوان أنا كمان عايزها تظهر لو ضغطت على البرنامج كليك يمين فى شريط المهام

مش فاهم انت ليه مش عايز تخلي الـSysMenu الافتراضية موجودة ليه :):)

اظن حل المشكلة عن طريق تتبع الـMouse Input ،، فيه باب كامل في MSDN عن الـMouse Input اقرأه اكيد هتلاقي الحل فيه ،، اسف يا زميلي كان نفسي ادوّر بنفسي بس زي ما قال عبد الله :

اقتباس
اعذر GamingMasteR عشان اليومين دول يومين امتحنات وكده .

:D

ســــــــلام

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#24

ربنا يوفقك يا جى

معلش انا مش عارف موضوع الامتحانات ده ,, اعذرنى :P

ربنا يوفقك :blush:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#25

معلش ياجى نسيت أرد على سؤالك

اقتباس
ش فاهم انت ليه مش عايز تخلي الـSysMenu الافتراضية موجودة ليه

أنا عايز أوصل للشكل ده

post-47088-1242562899_thumb.jpg

ده الكنترول بوكس بتاع الياهو

هو ده اللى انا عايزه :blush:

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

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

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

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

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

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

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