ورود

View Full Version : مشکل با hide کردن یک دیالوگ در win32



m-taheri
پنج شنبه 05 فروردین 1389, 01:31 صبح
توی این کد وقتی که منو ID_FILE_HIDE_DIALOG انتخاب میشه قاعدتا باید dialog پنهان شود ولی این اتفاق رخ نمیده. کسی میدونه ایراد این کد از کجاست؟




static bool dialog = false;
///
//
//

case ID_FILE_SHOWDIALOG:
if(!dialog)
{
myDialogH = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1),
hWnd, MyDialog);
if(myDialogH != NULL)
{
ShowWindow(myDialogH, SW_SHOW);
}
else
{
MessageBox(hWnd, TEXT("CreateDialog returned NULL"), TEXT("Warning!"),
MB_OK | MB_ICONINFORMATION);
}
dialog = true;
}
break;
case ID_FILE_HIDE_DIALOG:
if(dialog)
{
ShowWindow(myDialogH, SW_HIDE);
dialog = false;
}
break;

Nima_NF
پنج شنبه 05 فروردین 1389, 02:24 صبح
چند نکته به ذهنم می رسد:

- myDialogH باید static باشد

- وقتی از CreateDialog استفاده می کنید یعنی دیالوگ modeless می سازید، پس باید کدهای مورد نیاز برای پردازش دیالوگ Modeless را در قسمت دریافت پیام های در اواخر تابع main درست نوشته باشید تا پیام ها به درستی دریافت شود چون همزمان هست.

- از debugger استفاده کنید در خط بعد از ID_FILE_HIDE_DIALOG یک break قرار دهید، سپس بررسی کنید که چه کدی اشتباه است.

m-taheri
پنج شنبه 05 فروردین 1389, 02:48 صبح
ممنون و متشکرم از راهنمائی با ارزشتون.

myDialogH را static کردم مشکل حل شد.