سلام.
با عرض عذرخواهی از m3hrz4d به خاطر کنجکاوی من
و کسب اجازه از ایشون ، بابت پاسخ دادن به سوالات.
1- برنامه های Dialog based فاقد کلاس CMainframe هستند.
اگه دقت کردن باشین در برنامه های SDI , MDI شما ، شمای پروژه که همون فریم اصلی برنامه هست رو
در Resource ها نمیبینین. دلیلش اینه که این پنجره به صورت Run-Time ایجاد میشه.
(با استفاده از WNDCLASS structure)
CMainFrame برای نگه داری منو و نوار ابزار و نوار وظیفه استفاده میشه.
2- فرض میکنیم شما یک پروژه ی Dialog based دارید.
در کلاس Dialog و در فایل Cpp اون بخش زیر رو پیدا کنین :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بخشی از کد رو که با رنگ قرمز مشخص کردم مربوط به بررسی پیغام ها در کلاس Dialog هست.
و خطی که با رنگ آبی مشخص کردم محل قرار گرفتن کدی هست که دوستمون گذاشتن.
و اما یه توضیح مختصر :
همونطر که میدونین اساس کار ویندوز بر پردازش پیام هایی که از کاربر دریافت میکنه قرار داره.
مثلا وقتی شما روی یک Button کلیک میکنین پیغامی به پنجره مورد نظر فرستاده میشه. این پیغام یک
عدد میتونه باشه. وقتی مترجم پیغام ها (TranslateMessage) به این عدد میرسه اونرو با استفاده از ماکروهایی
مثل ON_MESSAGE ، به تابعی که باید در هنگام دریافت عدد مورد نظر فعال بشه ، فرمان اجرا شدن رو میده.
(البته من به صورت کلی عرض کردم و جزییات پیچیده تر و کمی متفاوت تر هست)
برای اینکه منظور من رو بهتر متوجه بشین ، Button ی رو به برنامه اضافه کنین و برای استفاده از اون
روش دوبار کلیک کنین. بلافاصله به MassgeMap مراجعه کنین. کد زیر به اون اضافه میشه :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یعنی وقتی که Button1 فشرده شد ، تابع OnBnClickedButton1 رو فراخوانی کن.
و همین طور در مورد قرار گرفتن موس بر روی Tray
3-
کافیه یه پروژه ی SDI و یا MDI ایجاد کنین و برگه Resource رو باز کنین. حتما با IDR_MAINFRAME
مواجه میشین. که شامل ID آیکن برنامه و همینطور منو و شتاب دهنده ی اون هست.
دوستمون برای اینکه از آیکن خود برنامه استفاده کنن ، نیاز به handle خود برنامه دارن. با استفاده از
AfxFindResourceHandle این handle رو استخراج کردن و سپس با رد کردن اون به تابع loadimage ، آیکن
اصلی برنامه رو در اختیار گرفتن.