سؤال

الخلفية:لدي القليل من لعب الفيديو التطبيق مع واجهة المستخدم مستوحاة من المكرم Sasami2k فقط تحديث لاستخدام VMR9 (أيDirect3D9 مع DirectShow) و تكون أقل غير مستقرة.حاليا هي C++ التطبيق باستخدام الخام Win32 خلال ضرورة:أيا من مختلف مجموعات الأدوات يستحق اللعنة.WPF ، على وجه الخصوص ، لم يكن ممكنا بسبب الأجواء قيود.

حسنا, الآن D3DImage موجود قد تكون مجدية إلى مزيج المباراة D3D/VMR9/ديريكتشو WPF.بالنظر إلى الماضي الإحباط مع Win32 هو inextensibility, هذا يبدو وكأنه شيء جيد.

ولكن أتعلمين, أنا الوقوع في العقبة الأولى هنا.

مع Win32 لقد خلق (بسهولة جدا) حدود نافذة يمكن تغيير حجم, حجم نسبيا, ينجذب إلى حواف الشاشة ، يستغرق الشاشة بأكملها (بما في ذلك شريط المهام المنطقة) عند أقصى حد.إنه فيديو التطبيق ، لذلك هذه كلها جميلة الخصائص المرغوبة.

حسنا, كيف أن تفعل الشيء نفسه مع WPF?

في Win32, يمكنني استخدام:WM_GETMINMAXINFO للسيطرة على تحقيق أقصى قدر من السلوك WM_NCHITTEST للسيطرة على تغيير الحدود WM_MOVING للسيطرة على المفاجئة إلى الشاشة حواف WM_SIZING للسيطرة على تغيير نسبة العرض إلى الارتفاع

ومع ذلك ، تبحث في WPF يبدو أن الأحداث المختلفة تصل متأخرا إلا أنني سوء فهم الوثائق ؟

على سبيل المثال, أنا لا أعرف متى أنا في منتصف التحرك ، LocationChanged يقول انها تطلق إلا مرة واحدة في نافذة انتقلت (الذي هو في وقت متأخر جدا).وبالمثل يبدو أن StateChanged فقط حرائق مرة النافذة استعيد/تكبير (عندما كنت في حاجة إلى المعلومات السابقة إلى أقصى حد ، لنقول النظام الصحيح في تعظيم حجم).

و يبدو أنني تماما تطل فيها نظام يحكي لي عن تغيير حجم.كما ضرب الاختبار.

لذا أنا في عداد المفقودين شيء هنا أو هل لدي أي خيار سوى أن الانخفاض يعود إلى تركيب wndproc من هذا الشيء ؟ يمكنني أن أفعل ما أريد دون تركيب WndProc?

إذا لا بد لي من استخدام WndProc ربما عصا مع القائمة تعليمات البرمجة الأساسية;أريد أن يكون أبسط نظافة واجهة المستخدم رمز و الابتعاد عن WndProc الأساسي هذا.

إن كان علي أن ربط WndProc علي أن أتساءل ... لماذا?Win32 وقد حصلت التحجيم/الحجم ، نقل/نقل ، poschanging/poschanged نافذة الرسائل وكلها مفيدة.لماذا لا WPF تكرار نفس الأحداث ؟ يبدو غير ضروري الفجوة في الأداء الوظيفي.

بالإضافة إلى ذلك ، فإنه يعني أن WPF هي مرتبطة معين USER32 التي تعتمد على التنفيذ.هذا يعني أن مايكروسوفت لا يمكن (في ويندوز 7 أو 8 ، يقول) عكس عرض الطبقة WPF "الأم" و محاكاة HWNDs و WndProcs عن تطبيقات قديمة--على الرغم من أن هذا هو بالضبط ما MS ينبغي أن تفعل.

هل كانت مفيدة؟

المحلول

و يبدو أنني تماما تطل فيها نظام يحكي لي عن تغيير حجم.كما ضرب الاختبار.

من أجل تغيير حجم أنك في الواقع في عداد المفقودين SizeChanged هذا الحدث.AFAIK هناك للأسف لا OnSizeChanging, OnLocationChanging و OnStateChanging الحدث على نافذة في .صافي


رأيت أن واحد ، ولكن بقدر ما أستطيع أن أقول إلا الحرائق بعد حجم تغيرت ، بينما أنا في حاجة إلى الحدث لإطلاق النار خلال تغيير الحجم.إلا إذا أنا في قراءة المستندات و فعلا الحرائق باستمرار ؟

لا النار بشكل مستمر ولكن ربما يمكنك استخدام ResizeBegin و ResizeEnd الأحداث تكون قادرة على القيام بذلك.


أليس كذلك WinForms الأحداث ؟

همم, أنت على حق.

نصائح أخرى

حسنا الإجابة على سؤالي, كنت في عداد المفقودين Adorners (لم يعودوا أبدا في أي من عمليات البحث فعلت حتى لا يبدو أنهم المعروف على نطاق واسع كما أنها ربما ينبغي أن يكون).

يبدو أنها أكثر تعقيدا من WndProc يتجاوز للأسف ولكن أعتقد أنه يجب أن يكون من الممكن أن احملك لهم في فعل ما أريد.

في التعليمات البرمجية يمكنك تعيين WindowStyle الملكية إلى "لا شيء" و WindowsState إلى "أقصى حد"

ايم ليس متأكدا ما Xaml ستبدو.

يمكنك ربما تجاوز ArrangeOverride و/أو MeasureOverride إلى تعويض تلك تغيير الأحداث ؟ قياس الأولى تمر ، ويحدث عند تخطيط يحتاج إلى ضبط الحجم الجديد, حتى انها نوع من مثل تغيير حجم الحدث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top