View Full Version : كد نوشتن براي event يك كنترل بدون وجود فرم
zoncpp
سه شنبه 04 خرداد 1389, 15:52 عصر
در يك برنامه VC مجبور هستم از يك اكتيوايكس بدون استفاده از وجود فرم استفاده كنم. object اكتيوايكس را create مي كنم.
CWnd cw;
myActiveX.Create(NULL, NULL, CRect(0,0,0,0),cw.FindWindow(NULL,NULL), 0);
اين اكتيوايكس يك event دارد كه من به آن احتياج دارم و بايد برايش كد بنويسم. اما ... چطور event براي يك شي كه ID ندارد ؟
ON_EVENT(CDlg, ?, 1 , OnMYevent, VTS_NONE)
لطفا راهنماييم كنيد.
من تا به حال با استفاده از wizard خود VC براي event هاي هر كنترل كدنويسي مي كردم و اما الان نمي توانم؟
پيشاپيش متشكر از راهنماييتون.
zoncpp
چهارشنبه 05 خرداد 1389, 10:35 صبح
يعني هيچ راهي وجود نداره، يا سوال من درست مطرح نشده و قابل فهم نيست؟
شما فرض كنيد كه در يك dll مي خواهيد از يك كامپوننتي استفاده كنيد كه بايد براي event آن كامپوننت كدنويسي نماييد. چطور اين كار را انجام مي دهيد؟
myActiveX.Create(NULL, NULL, CRect(0,0,0,0),cw.FindWindow(NULL,NULL), 0);
object كامپوننت را ايجاد كرده ايد و مي توانيد تمام متدهاي اين كامپوننت را با استفاده از اين object (myActiveX) فراخواني كنيد. براي event تعريف شده اي از اين كامپوننت چطور كد نويسي نمائيم.
در ويزارد برنامه هاي VC و VB و ... با انتخاب اسم كامپوننت ليست تمام متدها و event ها مي آيد كه با كليك بر نام event متدي ايجاد مي شود و ما كد مربوط به آن event را در آن متد مي نويسيم . اما اينجا بدون كمك ويزارد و با ايجاد object كامپوننت (create كردن) به صورت دستي، چطور به متد مربوط به event آن دست پيدا كنيم.
Nima_NF
چهارشنبه 05 خرداد 1389, 13:33 عصر
پارامتر پنجم در متد create شماره ID را می گیرد که صفر قرار دادید، ابتدا یک ID مانند IDR_ACTIVEX در فایل resource تعریف کیند، سپس آن را به جای پارامتر پنج قرار دهید.
برای تعریف Event نیز دقیق همان کدهایی را که Wizard برای شما انجام می دهد را باید دستی انجام دهید، یعنی در فایل .h در بخش Message maps تعریف ها و در فایل cpp در بخش BEGIN_MESSAGE_MAP رویداد مورد نظر.
ضمنا لیست متدها را می توانید از برنامه هایی مانند ActiveX test container مشاهده کنید
جالب این هست که در مقاله زیر هم نکته مورد نظر من را ذکر می کند، یعنی در جایی که به مشکل بر می خورید در یک پروژه روی دیالوگ با wizard کدها را اتومات تولید کنید، سپس از همان ها برای پروژه ای که دستی قرار هست با activex برنامه بنویسید استفاده کنید.
برای اطلاعات بیشتر این مثال را مطالعه کنید (کلیک کنید) (http://www.murrayc.com/learning/windows/useactivex.shtml)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.