امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
برنامه ها چگونه کار میکنند
نویسنده پیام
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #1
برنامه ها چگونه کار میکنند
با سلام
مطلبی که امروز می خواهم بگم ارتباطی با زبان برنامه نویسی خاص نداره! ولی یک Windows Application کار باید این مطلب را بدونه.
تا بحال از خودتان پرسیدید وقتی داخل ویندوزبا برنامه ها کار میکنید چه اتفاقاتی می افته؟ مثلا این فرم از کجا می فهمه زمانی که رویدکمه Close کلیک کنیم باید فرم را ببندد و چطور این اجرا مثل دکمه و ادیت با هم ارتباط برقرار میکنن؟
بگذارید در ابتدا برخی کلمات اختصاصی در سطح ویندوز را شرح دهم(نه در سطح یک برنامه نویس، چون با هم کمی تفاوت می کند)

BUTTON، EDIT، COMBOBOX، LISTBOX، STATIC و... همگی به عنوان پنجره شناخته می شوند.
البته دلفی کارها با اکثر پنجره هایی که بالا گفتم آشنا هستند ولی برای کلی شدن مطلب برای تمام برنامه نویسان برخی از پنجره های بالا را شرح می دهم.

Edit که در بعضی زبانها به عنوان TextBox شناخته میشوند، کار آن دریافت و نمایش اطلاعات هست.
STATIC که در اکثر زبانها با نام Lable شناخته می شه، کار آن نمایش یک متن هست.
در ویندوز هر پنجره ای که ایجاد می شه یک عدد 32 بیتی منحصر به فردی به آن اختصاص داده می شه. که این عدد را با نام Handle می شناسیم.

زمانی که ما به طور مثال کلیدی را فشار می دهیم، درایور کیبرد آن کلید را تبدیل به Messageیی می کنه و میفرسته به صف Message های سیستم. پس از آن صف Message های سیستم آن را به Thread پنجره مربوطه میده، در Thread پنجره مربوطه یک حلقه وجوود داره که به طور دائم Message ها را دریافت می کند و بر اساس اون Message تصمیم می گیره که چه باید بکند(به اصطلاح، اگر Messageیی را پردازش کنیم می گوییم Message را Handle کردیم).
خوب گفتیم درایور Message یی ارسال می کند، چطور؟؟؟ در API - Application Programming Interface ویندوز متدی وجود داره به نام SendMessage که درایور با کمک آن این پیام را ارسال می کند.
ببینیمپارامترهای SendMessage چی هست :
کد:
LRESULT SendMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
SendMessage هست که به ترتیب توضیح می دهم. پارامتر اول hWnd هست، درواقع Handle پنجره ای که می خواهیم به آن Message را ارسال کنیم هست. پارامتر دوم یعنی Msg که کاملاً معلومه Message یی هست که می خواهیم به پنجره مربوطه ارسال کنیم. راجع به Message این رو باید بگم که Message در واقع یک عددی هست که در ویندوزاکثراً آن را با یک نام می شناسن که ابتدای آن WM شروع می شود. مخفف WindowMessage هست. مثلا عدد 201 (در مبنای 16) را به نام WM_LBUTTONDOWN می شناسند و زمانی که دکمه چپ ماوس پایین رفته باشد درایور ماوس این Message را ارسال می کند.

اگر به جای Handle عدد FFFF را ارسال کنیم که به عنوان HWND_BROADCAST آن را می شناسیم برای تمام پنجره ها این Message ارسال می شود.

2 تاپارامتر wParam و lParam اطلاعات اضافی یک Message می تواند باشد مثلاً در Message یی که در بالا گفتم wParam آن اگر کلید ترکیبی مانند Control یا Shift یا Alt یا ... فشرده شده باشه را مشخص می کند.
و همچنین در ناحیه بالایی lParam مقتصات x و در ناحیه بالایی lParam مقتصات y قرار می گیرد.
البته Message هایی هم هستند که ممکنه فقط از یکی از این دو پارامتر استفاده کنند یا اصلا از این دو استفاده نکنند.

اگه یادتون باشه گفتیم در Thread پنجره مربوطه که یک حلقه هست به طور مرتب Message ها را دریافت می کند، درواقع این کار با استفاده از متد GetMessage انجام می شود.
ببینیم پارامتر های GetMessage چی هست :
کد:
BOOL GetMessage(
LPMSG lpMsg, // address of structure with message
HWND hWnd, // handle of window
UINT wMsgFilterMin, // first message
UINT wMsgFilterMax // last message
);
ما معمولا فقط با پارامتر اول این متد کار داریم یعنی lpMsg که در واقع Message یی هست که برای این پنجره ارسال شده است.
۲۰-تير-۱۳۸۷, ۱۵:۰۹:۱۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : Darg, far_222000, Di Di, t3r!p3000, EleRam, amirjan, hamed_Arfaee, ajlajlajl, HoseinVig
EleRam آفلاین
کاربر با تجربه
****

ارسال‌ها: 518
موضوع‌ها: 52
تاریخ عضویت: تير ۱۳۸۶

تشکرها : 423
( 588 تشکر در 140 ارسال )
ارسال: #2
RE: برنامه ها چگونه کار میکنند
لرد جان! من همیشه تو کف این بودم که تو این همه اطلاعات و از کجات میاری! :d

[تصویر:  banner_moharram-21.png]
روزها عاقلترينم شامها ديوانه ام...

www.EleRam.com :: نرم افزار هاي فارسي (رايگان)
www.PhotoImpact.blogfa.com :: آموزش کامل فتوايمپکت
۲۴-تير-۱۳۸۷, ۰۳:۳۶:۵۶
وب سایت ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  چگونه یک وب سایت بسازیم ؟ fzahrab 7 8,833 ۰۷-آبان-۱۳۹۱, ۱۲:۲۰:۳۹
آخرین ارسال: ramin6
  چگونه ايميل هاي گوگل يا همان جميل را از طريق outlook 2003 sarbandi 1 4,071 ۱۴-بهمن-۱۳۸۴, ۱۰:۱۷:۴۷
آخرین ارسال: C_DPlus

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS