Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
78 / 78 / 11
Регистрация: 02.12.2011
Сообщений: 296

Манипуляции с кнопкой "Close" в системном меню

04.04.2015, 17:23. Показов 1298. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
...доброго времени суток, уважаемые форумчане! Возник вопрос: с помощью этого кода можно заблокировать работу кнопки "Закрыть":
C++
1
2
3
  HMENU MenuHandle = GetSystemMenu(Handle, false);
 if(MenuHandle)
  DeleteMenu(MenuHandle, SC_CLOSE, MF_BYCOMMAND);
а как потом (по завершению чего-то) "вернуть, как было"? Pаранее благодарен за ответ.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.04.2015, 17:23
Ответы с готовыми решениями:

Обработка событий в системном меню
Задача заключается в следующим есть системное меню, в котором имеются стандартные пункты. Восстановить, переместить, размер, свернуть,...

К вопросу о системном меню и общем процессе иннициализации
Люди добрые, помогите новичку ... Заказчик хочет видеть свое приложение на MS Access. Чесно никогда его (Access) не ковырял. Можно...

Как создать контекстное меню. Например нажимая на richTextBox правой кнопкой мыши, мне бы предоставлялось контекстное меню
Как создать контекстное меню. Например нажимая на richTextBox правой кнопкой мыши, мне бы предоставлялось контекстное меню???

5
55 / 55 / 63
Регистрация: 18.03.2014
Сообщений: 386
04.04.2015, 20:01
Лучший ответ Сообщение было отмечено Simulkin Stas как решение

Решение

Simulkin Stas, EnableMenuItem(MenuHandle, SC_CLOSE, MF_ENABLED);
1
 Аватар для rao
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
04.04.2015, 20:01
Лучший ответ Сообщение было отмечено Simulkin Stas как решение

Решение

Кнопку отключить можно, но окно по Alt+F4 все равно закроется.

Строки меню могут содержать акселераторы, поэтому перед удалением элемента лучше сохранить его текст:
C++
1
2
        static TCHAR sMenuString[80] = { 0 } ;
        ::GetMenuString(MenuHandle, SC_CLOSE, sMenuString, sizeof(sMenuString), MF_BYCOMMAND);
А восстановить обратно можно так:
C++
1
::InsertMenu(MenuHandle, номерВставляемойПозиции, MF_ENABLED, SC_CLOSE, sMenuString );
1
78 / 78 / 11
Регистрация: 02.12.2011
Сообщений: 296
04.04.2015, 22:03  [ТС]
...rao, по поводу нажатия "Alt + F4" - это несложная форма для простенького технологического процесса и мне важно, чтобы пока "тикает" таймер нельзя было случайно закрыть программу, а умышленное нажатие такой комбинации - маловероятно... Но все равно, rao, спасибо - опробую оба способа, а потом уже определюсь...
0
 Аватар для rao
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
04.04.2015, 22:21
Simulkin Stas, гораздо проще и надежнее получать оконное сообщение WM_CLOSE и возвращать из его обработчика 0. Тогда пользователь сможет закрыть окно только завершив процесс.
1
78 / 78 / 11
Регистрация: 02.12.2011
Сообщений: 296
05.04.2015, 08:45  [ТС]
...Да, rao, спасибо - уже завтра посмотрю и этот способ...

Добавлено через 10 часов 9 минут
programmist99, все же последовал вашему совету... вот, что получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 void __fastcall TMainForm::Btn_PUSKClick(TObject *Sender)
  {
  // ...............
  // Что-то делаем 
  // ...............
  // Деактивимруем кнопку "Закрыть"
    HMENU MenuHandle = GetSystemMenu(Handle, false);
   if(MenuHandle)
    {
      EnableMenuItem(MenuHandle, SC_CLOSE, MF_GRAYED);
      ShowMessage("С этого момента и до полного завершения процесса кнопка Закрыть в системном меню будет недоступна!");
    }
   // Запускаем таймер
      Timer1 -> Interval = <число>;
      Timer1 -> Enabled = true;
  }
 
// ------------------------------------------------------------
 
 void __fastcall TMainForm::OnTimer(TObject *Sender)
  {
   // ....................
   // Опять что-то делаем
   // ....................
 
  // Останавливаем таймер
     Timer1 -> Enabled = false;
 
  // ....................
  // Опять что-то делаем
  // ....................
 
  // Активимруем кнопку "Закрыть"
    HMENU MenuHandle = GetSystemMenu(Handle, false);
   if(MenuHandle)
    {
      EnableMenuItem(MenuHandle, SC_CLOSE, MF_ENABLED);
      ShowMessage("... по желанию, можно что-то написать");
    }
  // Еще что-то
  } 
 
// ------------------------------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2015, 08:45
Помогаю со студенческими работами здесь

Открыть меню кнопкой
Здравствуйте форумчане, нужна помощью делаю меню которое при клике открывается и создает куку(что бы после перезагрузки стр. меню...

Раскрывающееся меню с кнопкой
Извините за беспокойство. Помогите сделать так, чтобы при нажатии на кнопку менюшка разворачивалась и кнопка-стрелочка менялась ...

Close one text and close other in a dialog
I'm new to C# and I have this script: This is a script for dialogs, and I need one text to close and the other to open (As shown in the...

Чем отличаются this.Close() от Close()
this.Close(); Close(); как лучше? и какие ++ в использовании this? если работает одинакова?

GUI-меню с флажками и кнопкой
Подскажите пожалуйста, как создать меню с флажками и кнопкой, как например в утилите ChkDskGui.exe ?


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru