كيفية تضمين نموذج Windows في واجهة المستخدم الرسومية ATL غير المدارة؟

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

  •  22-07-2019
  •  | 
  •  

سؤال

ولدي عنصر تحكم نموذج مستخدم Windows التي يتم إجراؤها COM مرئية. الآن أريد أن تضمين هذه السيطرة إلى واجهة المستخدم الرسومية الحوار ATL.

وهذا المشروع ATL (غير المدارة C ++) يجب فقط الحصول على معرف البرنامج من winform وخلق ديناميكية وتضمين ذلك في وقت التشغيل.

هل هذا ممكن وإذا كان الأمر كذلك، كيف أفعل ذلك؟

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

المحلول 2

وأنا أحسب وسيلة للحصول على عمل.
التعليمات البرمجية التالية يستخدم يسمى CWnd m_Control التي يتم إجراؤها لاستضافة winform عبر نسخة موثقة القليل من CreateControl. يبدو أن تعمل بشكل جيد حتى الآن. إذا كان أي شخص يرى أي عيوب، يرجى التعليق أو الرد عليها.

AfxEnableControlContainer();
Microsoft::VisualC::MFC::CControlCreationInfoEx i;
i.Init(System::Type::GetTypeFromProgID(gcnew System::String(sProgID)),
       CControlCreationInfo::ReflectionType);
i.m_clsid = CLSID_WinFormsControl;
POINT pt;
pt.x = pt.y = 0;
SIZE sz;
sz.cx = sz.cy = 100;
m_Control.CreateControl(i, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,
                        &pt, &sz, CWnd::FromHandle(m_hWnd), ID_CONTROL);

نصائح أخرى

وأنا لست متأكدا من ATL ولكن هذا يمكن القيام به بسهولة في MFC باستخدام الفئات CWinFormsView وCWinFormsControl.

وأعتقد أن هناك أي دعم bulitin لاستضافة تحكم WinForm في إطار ATL ولكن اعتقد انه يمكن القيام بذلك عن طريق بسيطة الحصول على HWND السيطرة winform ووضع مراقبة ATL الخاص الأصل. وهذا قد يكون الطريق صعبا بالرغم من ذلك.

ويبدو أن هذا نوع مماثل من الشيء. I have not لاختبار نفسي بالرغم من ذلك.

رابط

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