View Full Version : تفاوت AfxMessageBox با MessageBox
IMANAZADI
شنبه 07 خرداد 1390, 14:02 عصر
با سلام خدمت دوستان گرامی
میخواستم تفاوت دستور AfxMessageBox با MessageBox را بدونم ؟
و در چه جاهایی باید از کدوم استفاده کنم ؟
alpotkin
شنبه 07 خرداد 1390, 15:36 عصر
سلام
اولی در mfc استفاده میشه و دومی در win32
زیاد فرق ندارن فقط اولی عنوان نمیگیره ...
IMANAZADI
یک شنبه 08 خرداد 1390, 21:50 عصر
دوست گرامی ولی فکر کنم بر عکس گفتی اولی در WIN32 و دومی در MFC استفاده میشه
یعنی دیگه هیچ فرقی نداره
r00tkit
یک شنبه 08 خرداد 1390, 23:02 عصر
برعکس نگفته اولی تو MFC هستش
فرقش
AfxMessageBox is a modal dialog of the calling CWnd; MessageBox with a NULL hwnd is a modal dialog of the desktop. Hence, AfxMessageBox will always stay on top of your app, but MessageBox can be hidden by other windows. You can force MessageBox to have the same behavior by using m_hWnd for the first parameter.
IMANAZADI
جمعه 13 خرداد 1390, 09:37 صبح
دوست عزیز طبق فرمایشات جنابعالی من یک فرم با دو کلید روی اون ساختم و روی کلید اول کد نشون دادن یک پیام به MessageBox را گذاشتم و روی کلید دوم کد یک پیام دیگه رو با دستور AfxMessageBox گذاشتم و برنامه رو اجرا کردم و در حالت اجرای کلید اول و دوم دو پیام به صورت MODAL نشون داده شد و هیچ فرقی با هم نداشتند جز اینکه با AfxMessageBox فقط یک آیکون Warning کنار پیام نشون میده و هیچ فرقی دیگه ایی نداره
mehdi.mousavi
پنج شنبه 19 خرداد 1390, 13:41 عصر
زیاد فرق ندارن فقط اولی عنوان نمیگیره ...
هیچ فرقی با هم نداشتند جز اینکه با AfxMessageBox فقط یک آیکون Warning کنار پیام نشون میده و هیچ فرقی دیگه ایی نداره
سلام.
بستگی به کاری که میخواهید انجام بدید، این دو متود تفاوت های زیادی با هم دارن. در متود AfxMessageBox، ابتدا CWinApp * گرفته میشه (اشاره گر به پنجره اصلی برنامه). اگر اشاره گر مزبور NULL باشه، متود CWinApp::ShowAppMessageBox صدا زده میشه (در غیر اینصورت، ابتدا متود CWinApp::DoMessageBox صدا زده میشه تا بعنوان پارامتر اول بتونه this رو به همون متود CWinApp::ShowAppMessageBox پاس بده). متود ShowAppMessageBox حاوی Signature ای به شکل زیره:
int CWinApp::ShowAppMessageBox(CWinApp *pApp, LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt)
که تفاوت اصلی بین ::MessageBox و AfxMessageBox در پیاده سازی این متود نهفته شده. در متود فوق، ابتدا پنجره های زیری در صورتیکه پنجره اصلی برنامه شما، یک CFrameWnd باشه، disable میشه. سپس، Parent Window فعال میشه تا پس از بسته شدن MessageBox، پنجره پدر Focus رو بگیره.سپس Help Context در صورت نیاز Set میشه، Icon مناسب (بر اساس پارامترهای داده شده) انتخاب میشه، App Name استخراج میشه (تا بشه Title پنجره MessageBox رو Set کرد) و در نهایت MessageBoxA یا MessageBoxW صدا زده میشه. پس از بسته شدن پنجره نیز Context های قدیمی دوباره Activate میشن و اجرای برنامه ادامه پیدا میکنه. علاوه بر این، AfxMessageBox یک Overload هم داره که پارامتری به اسم nIDPrompt می گیره. در نتیجه می تونید به سادگی و بدون نوشتن کد، با دادن یک ID، رشته مزبور رو از string table بارگذاری کنید و نمایش بدید (که بسیار به خوانایی کد کمک میکنه).
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.