Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Я в этом не шарю
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191
1

Блокирование и разблокирование окон

20.11.2014, 16:33. Показов 1242. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
вообщем пишу программу, в которой при нажатии кнопки, открывается новое окно, которое отключает все другие окна (EnableWindow), а после обратно включает.
по чему-то, когда окна включаются обратно, они все сворачиваются причём без анимации свёртывания.
как этого избежать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2014, 16:33
Ответы с готовыми решениями:

Блокирование файла
Приветствую. Имеется текстовый файл, при запуске программы в него записываются данные. Необходимо...

Блокирование системных клавиш и их комбинации
Системные нажатия клавиш производят системные сообщения WM_SYSKEYDOWN и WM_SYSKEYUP. Как это...

Запрет/Блокирование запуска программ с WinAPI
Добрый день, возникла такая задача, рационального решения пока я не вижу. Тут вопрос наверное в...

Как сделать блокирование одной клавиши?
Здравствуйте, у меня задача, мне нужно чтобы программа при нажатии Left Shift + Left Ctrl + F2...

12
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
20.11.2014, 18:47 2
Цитата Сообщение от Segaman Посмотреть сообщение
вообщем пишу программу, в которой при нажатии кнопки, открывается новое окно, которое отключает все другие окна (EnableWindow), а после обратно включает.
по чему-то, когда окна включаются обратно, они все сворачиваются причём без анимации свёртывания.
как этого избежать?
Нужен полный код.
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
21.11.2014, 05:15 3
Телепаты в отпуске
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
21.11.2014, 07:09 4
Они даже вообще на другом форуме.
0
Я в этом не шарю
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191
21.11.2014, 11:07  [ТС] 5
C++
1
2
3
4
5
void Dialog::BlockMainWin(bool type)
{
    if (mainwin!=NULL)  winapi->control.Enable(mainwin->win,type);
    if (list!=NULL)     winapi->control.Enable(list->win,type);
}
где winapi->control.Enable
C++
1
2
3
4
int Control::Enable(HWND wohandle, bool enable)
{
    return EnableWindow(wohandle,enable);
}
посредством этого кода отключаются главные окна программы при открытии диалогового окна
C++
1
2
3
4
    HWND hwnd = winapi->window.Create(Parent, winapi->wincenter.x, winapi->wincenter.y, 720, 512, WS_VISIBLE|WS_OVERLAPPED|WS_SYSMENU,WS_EX_TOOLWINDOW);
    winapi->control.SetText(hwnd,"Список");
    dlg->BlockMainWin(false);
    Win = hwnd;
а при закрытии включаются обратно
C++
1
2
    dlg->BlockMainWin(true);
    winapi->control.Destroy(Win);
так вот, когда окна включаются, они сворачиваются
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
21.11.2014, 11:11 6
в WinAPI нету таких функций !
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
21.11.2014, 11:14 7
Цитата Сообщение от Segaman Посмотреть сообщение
winapi->control.Destroy(Win);
так вот, когда окна включаются, они сворачиваются
Ну так ты их вообще закрыть пытаешься.
0
Я в этом не шарю
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191
21.11.2014, 12:07  [ТС] 8
taras atavin, ты не прав
C++
1
2
3
4
    dlg->BlockMainWin(true);разблокировать окна. ссылки на окна находятся только внутри класса Dialog
    winapi->control.Destroy(Win);закрыть открытый диалог. ссылка на хендл этого окна
    //HWND hwnd = winapi->window.Create(Parent, winapi->wincenter.x, winapi->wincenter.y, 720, 512, WS_VISIBLE|WS_OVERLAPPED|WS_SYSMENU,WS_EX_TOOLWINDOW);
    //Win = hwnd;
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
21.11.2014, 12:11 9
Задача сделать модальный диалог? Так это делается проще, читайте Чарлза Петзолдта.
0
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
21.11.2014, 12:14 10
Цитата Сообщение от Segaman Посмотреть сообщение
window.Create
Цитата Сообщение от Segaman Посмотреть сообщение
control.Destroy(Win)
А это как реализовано?
0
Я в этом не шарю
4 / 4 / 3
Регистрация: 03.09.2014
Сообщений: 191
21.11.2014, 12:45  [ТС] 11
dmitry94,
C++
1
2
3
4
int Control::Destroy(HWND wohandle)
{
    return DestroyWindow (wohandle);
}
C++
1
2
3
4
5
6
HWND WO_Window::Create(HWND wohandle, int wox, int woy, int wow, int woh, int wostyle, int woxstyle)
{
    HWND a=CreateWindowEx(woxstyle, classname, "", wostyle, wox, woy, wow, woh, wohandle, NULL, NULL, NULL);
    SendMessage(a, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
    return a;
}
Добавлено через 12 минут
taras atavin, я окна вручную создаю с помощью winapi, без файла ресурсов.
поэтому я ни разу не понял Чарлза Петзолдта
0
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
21.11.2014, 13:10 12
Суть в том, что этот подход неверный. Если создается немодальный диалог, то нужно реализовать обработку сообщений этого окна. Для создания таких диалогов можно использовать функцию CreateDialog. И смысл создавать такой диалог имеется как-раз тогда, когда нужно работать и с другими окнами программы во время видимости диалога. В твоем случае достаточно создать модальный диалог и не городить огород с блокированием других окон. Для этого можно использовать функцию DialogBox.

Добавлено через 17 минут
Цитата Сообщение от Segaman Посмотреть сообщение
return DestroyWindow (wohandle);
Я так понимаю обработки сообщений для окна wohandle нет. Чтобы это все правильно работало. Нужно организовать обработку сообщений этого окна и закрывать его, обрабатывая сообщения, например:
C++
1
2
3
        case WM_CLOSE:
            DestroyWindow(wohandle);
            break;
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
21.11.2014, 13:26 13
Цитата Сообщение от Segaman Посмотреть сообщение
я окна вручную создаю с помощью winapi, без файла ресурсов.
А при чём здесь файл ресурсов?
0
21.11.2014, 13:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2014, 13:26
Помогаю со студенческими работами здесь

Блокирование всплывающих окон
Сем приет! Я так понимаю, включил блокирование всплывающих окон, обратную операцию проделать не...

Разблокирование ноутбука
При запуске выводится такое сообщение: в связи с просмотром запретных видео роликов ваш пк...

KDE: разблокирование KWallet
Каждый раз при загрузке появляется такое окно. Как я понимаю, google_calendar пытаеться получить...

Athlon II X3 440 - разблокирование 4-го ядра
Добрый вечер. Разблокировал 4-е ядро через ACC в Биос, компьютер загрузился в нормально, процессор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru