PDA

نسخه کامل مشاهده نسخه کامل : System Tray



someone
22-09-2006, 23:21
سلام.
حتما تا حالا برنامه هایی رو دید که وقتی اونها رو اجرا میکنید در حافظه Resident یا مقیم میشن.
مثل آنتی ویروسها.وقتی این برنامه ها فعال هستند میشه اونها رو از SystemTray یا Status Area
اجرا کرد.به این صورت که اینها یه صورت یه Icon در Status Area قرار میگیرند.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
این کا رو میشه با یک API انجام داد که اسمش هست Shell_NotifyIcon .
این تابع یک Message به سیستم عامل میفرسته که میتونه این Icon رو اضافه یا کم یا تغییر داد.
در نظر داشته باشید که Windows بر اساس گرفتن یا فرستادن این Message ها فعالیت میکنه.
در ضمن برای این کار از یک structure هم استفاده میشه به نام NOTIFYICONDATA که اطلاعات لازم رو برای پردازش Message هایی که از Status Area دریافت میشه در اختیار سیستم قرار میده که در Shell32.Dll قرا داره وفایل h لازم به نام ShellApi.h هست.
NOTIFYICONDATA دارای Property های زیر هست.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

1- size این structure هست.
2- Handle پنجره ای هست که Message ها از Status Area بهش میرسه.
3- یه Identifier از آیکن Status هست.
4- شامل سه Flag هست برای مشخص کردن درستی hIcon , uCallbackMessage , szTip
NIF_ICON و NIF_MESSAGE و NIF_TIP
5- اینMessage وقتی که Mouse بر روی Icon در StatusArea قرار میگیره به Window مورد نظر که Handle اون رو ما انتخاب میکنیم فرستاده میشه.
6- یکHandle به Icon ی که میخوایم ازش استفاده کنیم هست.
7-وقتی که Mouse روی این Icon قرار بگیره یه TipTool ظاهر میشه.

تابع Shell_NotifyIcon هم دارای 2 آرگومان هست.
1-Message ی هست که برای اضافه یا کم یا تغییردادن این Icon به کار میره.
NIM_ADD و NIM_DELETE و NIM_MODIFY
2-یهPoinetr به ساختار NOTIFYICONDAT هست.

خب حالا میریم سر یه مثال که بهترین راه برای یادگیری این مطالب هست.
در ضمن هم میتونیم از MFC استفاده کنیم وهم از Windows SDK که من دومی رو انتخاب کردم.
هیچ فرقی هم در استفاده از این دو روش نیست وMFC راحت تر هست.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اين يه برنامه Win32 هست.هر وقت پنجره رو Minimize كنيد يه Icon در System Tray قرار ميگيره.
هر جا در كد نياز به توضيح داشت اطلاع بديد.
بازم ميگم كه سعي ميكنم خلاصه ومفيد توضيح بدم. اگه خوب توضيح ندادم ببخشيد.
ممنون.