سلام به دوستان خوبم.
عیدتون مبارک!
قبلا یه مقاله درباره System Tray گذاشته بودم. که در مورد Shell_NotufyIcon , NOTIFYICONDATA
صحبت شده بود و مثالی که داشته درباره برنامه های Win32 بود. که در link زیر هست:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
خب! این بار در مورد اینکه چطور در MFC ازش استفاده کنیم و چطور بتونیم با مثلا right-click یک منو رو برای
این Icon فعال کنیم صحبت میشه.
روند کار مثل Win32 هست. ابتدا یک متغییر public از NOTIFYICONDATA ایجاد میکنیم.
فرض کنین میخوایم با شروع برنامه , آیکن برنامه در tray قرار بگیره. تابع OnInitDialog رو پیدا میکنیم و بعد ازکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
TODO: Add extra initialization here کد زیر رو در اون مینویسیم:
اگه دقت کنین یکی از property های NOTIFYICON به این شکل تعریف شده:کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ما نیاز داریم وقتی که Mouse و یا Keyboard روی این Icon در Tray قرار میگیره پیغامی رو مبنی بر اینکهکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مثلا الان Mouse روی این Icon هست دریافت کنیم. فرض کنین میخوایم با right-click منو ای رو به نمایش بذاریم
بنابراین با موقیت Mouse رو در Tray به اصطلاح handle کنیم.
به ابتدای فایل Cpp تون این کد رو اضافه کنین:
WM_USER کمک میکنه تا ما بتونیم یک private-message برای برنامه خودمون ایجاد کنیم.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و معولا به این شکل ازش استفاده میشه :
که X یک عدد میتونه باشه.(چون ممکنه در برنامه نیاز به چندین Message باشه.)کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
الان وقتی Mouse و یا Keyborad روی این Icon قرار بگیرند پشت سر هم پیغامی به پنجره برنامه
ما داده میشه. که میتونیم از این Message استفاده کنیم.
یک تابع با این مشخصات ایجاد کنین :
با استفاده از دو آرگومان این تابع میتونیم تمامی Event های Mouse و keyborad رو Handle کنیم.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(برای اطلاعات بیشتر در باره WPARAM , LPARAM به برنامه نویسی تحت Windows مراجعه کنین.)
خب حالا تابعی رو که ایجاد کردیم پیاده سازی میکنیم :
فکر میکنم در مورد کد بالا نیازی به توضیح نباشه. فقط اینکه با استفاده از LPARAM میتونیمکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تک تک Event های
Mouse رو handle کنیم. که در کد بالا برای پیغام right-click آماده شده.
ما نیاز داریم تا هر وقت MYNOTIFY_MESSAGE در صف پیغامهای برنامه ما قرار گرفت تابع
MyNotify رو فعال کنیم. این کار با استفاده از این ماکرو انجام میشه:
الان کافیه این کد رو به برنامه اضافه کنین:کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در آخر هم لازم هست وقتی برنامه بسته میشه Icon ما از Tray خارج بشه که اینکار رو با نوشتن کدکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
زیر در تابه OnDestroy انجام میدیم:
در مورد هر کدوم از توابع قبلا صحبت شده و اگه نیاز به توضیح بیشتر هست بگید.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشین.



جواب بصورت نقل قول
