كيف يمكنني الحصول على HWND لعنصر تحكم ActiveX بعد أن تم initialised سيطرة / تفعيلها؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا خلق عنصر تحكم ActiveX استنادا ATL 8.0 في C ++ باستخدام Visual Studio 2008. ولست بحاجة إلى إنشاء إطار الفرعية وإرفاقه تحكم ActiveX.

وكيف يمكنني الوصول إلى HWND التي يملكها عنصر تحكم ActiveX؟

وأي وظيفة ATL يمكنني تجاوز من أجل استخدام HWND بعد إنشاء نافذة التحكم؟

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

المحلول 2

وبعد التجربة والخطأ، ولقد وجدت الجواب كنت بعد.

في منشئ تحكم ActiveX ATL الخاصة بك لإضافة السطر التالي من التعليمات البرمجية:

m_bWindowOnly = true;

ويؤدي هذا الإطار من أجل السيطرة ليتم إنشاؤه (بدلا من مجرد إعادة استخدام HWND من الإطار الأصل). بعد هذا عضو m_hWnd من فئة عنصر التحكم يمكن استخدامها للوصول إلى HWND لنافذة التحكم.

نصائح أخرى

واكتف من شأنها أن تسمح لك لتحديد الطرق الخاصة بك على واجهة الخاصة بك (لمعالجة برينس افتراض)، ولكن هذا ليس من المرجح أن تساعد هنا. قد يكون جيدا إنشاء عنصر تحكم ActiveX بواسطة مكون آخر. ATL هو أيضا غير ذي صلة - انها مكتبة قالب C ++ التي يلتف اجهات COM

وظيفة ما تحتاجه هنا هو IOleWindow :: GetWindow. لست متأكدا ما تعنيه ب "تجاوز وظيفة ATL لاستخدام HWMD". وبمجرد الانتهاء من استرداد HWND، يمكنك نقله إلى أي وظيفة يستخدم HWND. على سبيل المثال، حيث أن الأصل في SetParent (الطفل، الأم)

[الإفصاح الكامل]: أنا لست على دراية اكتف أو ATL، ولكن آمل أن يكون هذا هو على الأقل مفيدة إلى حد ما

إذا يسمح اكتف لك لتحديد الأساليب التعسفية على وجوه الخاص بك، في محاولة لفضح وظيفة التي يمكنك استدعاء من شأنها أن يعود ببساطة قيمة HWND لك (السيطرة يعرف يكاد يكون من المؤكد الخاصة HWND به). وبهذه الطريقة يمكنك الاتصال GetActiveXHwnd() للحصول على مقبض اللازمة، والتي سوف ثم استخدم لمزيد من التلاعب.

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