كيفية جعل نافذة الطفل MDI البقاء على رأس أشقائها؟

StackOverflow https://stackoverflow.com/questions/594375

  •  09-09-2019
  •  | 
  •  

سؤال

هذا السؤال يتعلق بلدي السابق.

لدي تطبيق MDI MFC (VC6) الذي يحتوي على العديد من نوافذ MDI للأطفال يتصرفون كآراء مختلفة لمستند واحد.

هل من الممكن تعيين أحد هذه الإطارات للبقاء على رأس الآخرين؟
لقد حاولت الاتصال

SetWindowPos(
   &GetParentFrame()->wndTopMost,
   0, 0, 0, 0,
   SWP_NOMOVE | SWP_NOSIZE);

و

ModifyStyleEx(0, WS_EX_TOPMOST);

من cmdichildwnd ولكن لا يبدو أنه يعمل.

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

المحلول

في فئة cmdichildwnd (عادة cchildframe)، أضف ثابتا HWND m_hTopWnd. وبعد حددها تساوي HWND من الطفل الذي تريد أن تكون دائما في الأعلى.

مقبض WM_WINDOWPOSCHANGED في CChildFrame. وبعد في المعالج، تحقق مما إذا كان هذا m_hWnd == m_hTopWnd. وبعد إذا لم يكن كذلك، اتصل

::SetWindowPos(m_hTopWnd, HWND_TOP, 0, 0, 0, 0, 
    SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);

بهذه الطريقة كلما تم تعيين موضع أي نافذة MDI الطفل، سيتم دفع نافذة "دائما أعلى" إلى الأعلى.

أيضا التعامل معها WM_CLOSE وعندما تغلق النافذة العلوية، قم بتعيين m_htopwnd = null.

أنظر أيضا: CodeProject المادة و MSDN Knowledgebase.

نصائح أخرى

هل أنت متأكد من أن تصميم واجهة المستخدم الجيد للحفاظ على نافذة الطفل على رأس الآخرين؟ ألا ينبغي أن يصبح هذا إطارا أكثر تفصيلا؟ أو شريط التحكم؟

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