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

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

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

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

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

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

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

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

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

Решение

Simulkin Stas, EnableMenuItem(MenuHandle, SC_CLOSE, MF_ENABLED);
1
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
04.04.2015, 20:01 3
Лучший ответ Сообщение было отмечено 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
77 / 77 / 11
Регистрация: 02.12.2011
Сообщений: 296
04.04.2015, 22:03  [ТС] 4
...rao, по поводу нажатия "Alt + F4" - это несложная форма для простенького технологического процесса и мне важно, чтобы пока "тикает" таймер нельзя было случайно закрыть программу, а умышленное нажатие такой комбинации - маловероятно... Но все равно, rao, спасибо - опробую оба способа, а потом уже определюсь...
0
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
04.04.2015, 22:21 5
Simulkin Stas, гораздо проще и надежнее получать оконное сообщение WM_CLOSE и возвращать из его обработчика 0. Тогда пользователь сможет закрыть окно только завершив процесс.
1
77 / 77 / 11
Регистрация: 02.12.2011
Сообщений: 296
05.04.2015, 08:45  [ТС] 6
...Да, 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
05.04.2015, 08:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
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...

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

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

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

Вообще запара с кнопкой и меню
Есть код ... //находится в основном меню инициализации PORTC=0xFF; DDRC=0x00; ... void...

Как сделать всплывающее меню над кнопкой?
Доброго времени суток! По нажатию правой клавиши мыши, например на кнопку, должно появится...


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

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