Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: корректное закрытие MessageBox  (Прочитано 7372 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tan4ik
Гость
« : 01-05-2008 09:44 » 

Есть приложение:обычное окошко с 2-мя пунктами меню, при выборе одного из которых "Вылазит" диалог. Диалог состоит из 2-х RADIOBUTTON -ов и 2- х селекторных переключателей, при смене которых должно выдаваться сообщение, подтверждающее выбор.

Для вывода этого самого сообщения я использую MessageBox...
Если в параметрах MessageBox использовать дескриптор = NULL или родительского, или окна диалога, это окошко с сообщением просто не закрывается, а "размножается".
Попробовала также сделать так:

Цитата
if(MessageBox(hDlg,"Change font","Font",MB_OK)==IDOK)DestroyWindow(hDlg);    

но, в этом случае закрывается все приложение...
КАК КОРРЕКТНО ЗАКРЫТЬ MessageBox?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 01-05-2008 11:40 » 

Tan4ik, а зачем использовать именно MessageBox? Используй самопальное окно, которое более одного экземпляра не создавай на экране, да и всё Улыбаюсь
Записан

Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 01-05-2008 15:00 » 

Tan4ik, во-первых, за счёт чего у тебя "размножается" MessageBox? Ты его из своего кода вызываешь несколько раз, до закрытия предыдущего бокса?
Во-вторых, если MessageBox тебе возвращает результат, то он уже закрылся, и уничтожать ничего не надо, тем более делать DestroyWindow для родительского окна Улыбаюсь Или это для того диалога Destroy, из которого подтверждение вылезает?
По-моему, надо просто
if (MessageBox(hDlg,...) == IDOK) {/*применить настройки, возможно, закрыть диалог с радиобаттонами*/}
где hDlg - хендл диалога, из которого вызываешь подтверждение.

Но вообще лучше опиши поподробнее, а то запрос подтверждения вообще не всегда хорошо делать, иногда неуместно бывает спрашивать "вы уверены?" Улыбаюсь
« Последнее редактирование: 01-05-2008 15:01 от Вад » Записан
Tan4ik
Гость
« Ответ #3 : 01-05-2008 21:34 » 

Цитата
Автор: Вад    
Цитата
Tan4ik, во-первых, за счёт чего у тебя "размножается" MessageBox? Ты его из своего кода вызываешь несколько раз, до закрытия предыдущего бокса?
Во-вторых, если MessageBox...

я сильно над кодом поиздевалась, чтобы он заработал,потом посмотрела - какой-то ужас получился..еще раз подправила и вот часть Не может быть.....:
Код:
BOOL CALLBACK ButtonsExampleDialogProc(HWND hDlg,
UINT Message,WPARAM wParam,
   LPARAM lParam)
{
int i;
char cMyMessage[80];

switch(Message)
{
case WM_INITDIALOG:
switch(nFlag)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
SendDlgItemMessage(hDlg,nRadioButtonId,BM_SETCHECK,
BST_CHECKED,0);
for(i=IDC_CHECKBOX1;i<=IDC_CHECKBOX2;i++)
if(uCheckBoxesState[i-208])
SendDlgItemMessage(hDlg,i,BM_SETCHECK,
BST_CHECKED,0);
return TRUE;

case WM_COMMAND:
switch(LOWORD(wParam))
{



case IDC_RADIOBUTTON1:nFlag = 1;break;
case IDC_RADIOBUTTON2:nFlag = 2;break;
   

case IDC_CHECKBOX1:nFlag = 3;break;
case IDC_CHECKBOX2:nFlag = 4;break;
   

case IDC_BUTTON1:
SendDlgItemMessage(hDlg,IDC_STATUSBAR,SB_SETTEXT,
   (WPARAM)0,(LPARAM)cMyMessage);
i=LOWORD(wParam)-208;
uCheckBoxesState[i]=uCheckBoxesState[i]==MF_CHECKED?
MF_UNCHECKED:
MF_CHECKED;

CheckMenuItem(GetSubMenu
   (GetSubMenu(GetMenu(hWnd),1),1),
LOWORD(wParam)-103,
uCheckBoxesState[i]);


             
switch(nFlag)
{
case 1:
MessageBox(hDlg,"Change font","Font",MB_OK);
break;
case 2:
MessageBox(hDlg,"Change font","Font",MB_OK);

break;
case 3:
MessageBox(hDlg,"Change font","Font",MB_OK);

break;
case 4:
MessageBox(hDlg,"Change font","Font",MB_OK);
break;

}
Последний раз редактировалось Tan4ik, Сегодня в 00:30
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines