مطلب امروز در مورد پنجره های Modless هستش.
شايد بگيد يعنی چی !!!
اگه دقت کرده باشيد معمولا پيغامهای خطا يا هشدار دهنده به شکلی هستند که وقتی نمايش داده ميشوند ديگه نمی تونيد به پنجره برنامه اصلی دسترسی داشته باشيد و غير فعال می شود تا زمانی که به اون پيغام خطا يا هشدار يه جواب مناسب (حالا از OK گرفته تا Yes و No ) بدهيد. به اينگونه نمايش يه پنجره (همون پيغام خطا خودش يه پنجره هستش ديگه) روش Modal ميگن.
حالا بعضی مواقع نياز داريد که پنجره هايی رو نشون بديد که همزمان نياز باشه که هم روی پنجره اصلی برنامه و هم روی اين پنجره جديد نمايش داده شده کار شود (يه مثال خوب و روشن برای اين نوع ياهو مسنجر هستش که اين صفحه اصلی رو در ابتدا داريد و به ازای هر PM که باز می کنيد يا به شما داده ميشه يه پنجره باز ميشه که بايد بتونيد روی هرکدوم که خواستيد کار کنيد ) به اين نوع نمايش پنجره Modless ميگن.
کار خيلی راحت و کوتاه هستش.
اول که خب بايد ديالوگتون و کد های مربوط رو بنويسيد!
هر موقع خواستيد از يه ديالوگ يه ديالوگ ديگه رو نمايش بديد کافی هستش که چند خط زير رو بنويسيد :
CDialog *MyDlg=new CDialog();
MyDlg->Create(IDD_ABOUTBOX,0);
MyDlg->ShowWindow(true);
IDD_ABOUTBOX مربوط به ID ديالوگ اصلی شما ميشود که حالا اينجا من برای سادگی کار خواستم ديالوگ About که بصورت پيش فرض ساخته ميشه رو نشون بدم !
اگه دقت کنيد تابع Create از شما ۲ تا پارامتر می خواد که با اولی آشنا شديد. اما دومی چيه ؟! بايد بگم اگه دومی رو مقدار ۰ يا همون NULL قرار بديد فرض ميکنه که پدر ديالوگی که ميخواهيد نمايش بديد اون ديالوگی هستش که از اون قصد نمايش اين ديالوگ جديد رو داريد و يکم با اينکه يه ديالوگ مستقل باشه فرق ميکنه (مثلا اگه ديالوگ اصلی رو مينيمم کنيد اين هم همراه اون مينيمم ميشه و اگه اين جديد رو مينيمم کنيد ديگه روی TaskBar ديده نميشه و مثل پروژهای MDI انگار که ديالوگ اصلی شما برنامه Container اصلی باشد ديالوگ جديد به همون شکل مينيمم ميشه ! حالا تست کنيد بهتر دستگيرتون ميشه!). اما اگه بخواهيد عين صفحه PM در YAHOO! Messeneger وقتی ديالوگ جديد رو نمايش ميديد بر روی TaskBar هم ديده بشه بايد يه اشاره گر به Desktop بهش بديد که با تابع GetDesktopWindow که هيچ پارامتر ورودی هم نياز نداره اين کار ميسر ميشه.
شايد بگيد يعنی چی !!!
اگه دقت کرده باشيد معمولا پيغامهای خطا يا هشدار دهنده به شکلی هستند که وقتی نمايش داده ميشوند ديگه نمی تونيد به پنجره برنامه اصلی دسترسی داشته باشيد و غير فعال می شود تا زمانی که به اون پيغام خطا يا هشدار يه جواب مناسب (حالا از OK گرفته تا Yes و No ) بدهيد. به اينگونه نمايش يه پنجره (همون پيغام خطا خودش يه پنجره هستش ديگه) روش Modal ميگن.
حالا بعضی مواقع نياز داريد که پنجره هايی رو نشون بديد که همزمان نياز باشه که هم روی پنجره اصلی برنامه و هم روی اين پنجره جديد نمايش داده شده کار شود (يه مثال خوب و روشن برای اين نوع ياهو مسنجر هستش که اين صفحه اصلی رو در ابتدا داريد و به ازای هر PM که باز می کنيد يا به شما داده ميشه يه پنجره باز ميشه که بايد بتونيد روی هرکدوم که خواستيد کار کنيد ) به اين نوع نمايش پنجره Modless ميگن.
کار خيلی راحت و کوتاه هستش.
اول که خب بايد ديالوگتون و کد های مربوط رو بنويسيد!
هر موقع خواستيد از يه ديالوگ يه ديالوگ ديگه رو نمايش بديد کافی هستش که چند خط زير رو بنويسيد :
CDialog *MyDlg=new CDialog();
MyDlg->Create(IDD_ABOUTBOX,0);
MyDlg->ShowWindow(true);
توضيحات :
IDD_ABOUTBOX مربوط به ID ديالوگ اصلی شما ميشود که حالا اينجا من برای سادگی کار خواستم ديالوگ About که بصورت پيش فرض ساخته ميشه رو نشون بدم !
اگه دقت کنيد تابع Create از شما ۲ تا پارامتر می خواد که با اولی آشنا شديد. اما دومی چيه ؟! بايد بگم اگه دومی رو مقدار ۰ يا همون NULL قرار بديد فرض ميکنه که پدر ديالوگی که ميخواهيد نمايش بديد اون ديالوگی هستش که از اون قصد نمايش اين ديالوگ جديد رو داريد و يکم با اينکه يه ديالوگ مستقل باشه فرق ميکنه (مثلا اگه ديالوگ اصلی رو مينيمم کنيد اين هم همراه اون مينيمم ميشه و اگه اين جديد رو مينيمم کنيد ديگه روی TaskBar ديده نميشه و مثل پروژهای MDI انگار که ديالوگ اصلی شما برنامه Container اصلی باشد ديالوگ جديد به همون شکل مينيمم ميشه ! حالا تست کنيد بهتر دستگيرتون ميشه!). اما اگه بخواهيد عين صفحه PM در YAHOO! Messeneger وقتی ديالوگ جديد رو نمايش ميديد بر روی TaskBar هم ديده بشه بايد يه اشاره گر به Desktop بهش بديد که با تابع GetDesktopWindow که هيچ پارامتر ورودی هم نياز نداره اين کار ميسر ميشه.