Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.81/58: Рейтинг темы: голосов - 58, средняя оценка - 4.81
Avazart
Эксперт С++
7756 / 5662 / 554
Регистрация: 10.12.2010
Сообщений: 25,663
Записей в блоге: 17
1

Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна"

06.05.2012, 22:50. Просмотров 10853. Ответов 40
Метки нет (Все метки)

Что происходит при нажатии этой кнопки в плане сообщениий, и как их перехватить и игнорировать,что бы окно не сворачивалось?
Чем это событие отличается от обычного сворачивания окна через кнопку свернуть ?
Календарик на рабочий стол в C++/WinAPI
0
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2012, 22:50
Ответы с готовыми решениями:

Предотвратить сворачивание окна по нажатию кнопки Windows «Свернуть все окна»
Здравствуйте, пишу что то вроде гаджета на c# wpf, и возник вопрос: можно ли...

Как возможно выйти в инструкции switch в начало самой инструкции при нажатии "не правильной" кнопки
В целом у меня вопрос такой: Как возможно выйти в инструкции switch в начало...

Реализовать выход из многопоточного приложения при нажатии сочетания клавиш "Ctrl+С"
Добрый день! Подскажите пжл, как реализоввать выход с...

"Неожиданное" закрытие окна при выводе результатов на консоль
Здраствуйте, Уважаемые программисты! Недавно начал учить язык...

Вызов окна "Сохранить как" в Microsoft Word
Доброго времени суток. Кто знает, как из C++ дёрнуть данное окно?

40
Игорь с++
473 / 465 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
07.05.2012, 01:16 2
Методом научного тыка выяснил - в программе отслеживаю сворачивание окна , всё нормально , но когда нажимаеш на "Свернуть все окна" программа этого не отслеживает и не говорит , что её свернули ( возможно я где то накосячил ) , попробовал , как то это обойти , получилось правда криво , но работает ,вот код -
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <windows.h>
 
/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
 
/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";
 
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
 
{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */
 
    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);
 
    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
 
    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;
 
    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );
 
    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);
 
    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
 
    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}
 
 
/*  This function is called by the Windows function DispatchMessage()  */
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
           
     case WM_SIZE:
     SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 1, 1, SWP_NOMOVE or SWP_NOSIZE);
     ShowWindow(hwnd,SW_SHOWNORMAL);
       break;
              
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
 
    return 0;
}
Что происходит - когда программа запущенна и подводим мышь к "свернуть все окна" наше окно становится в рамке , но стоит нажать на кнопку "Свернуть все окна" окно остаётся на месте.
Есть минусы если ты будеш использовать этот код , но можно пораскинуть мозгами и исправить те или иные недочёты которые будут тебя не устраивать!
0
Вложения
Тип файла: rar 1.rar (5.2 Кб, 29 просмотров)
Игорь с++
473 / 465 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
07.05.2012, 01:20 3
Да забыл сказать у меня - Windows 7 Ultimate всё работает нормально , но не уверен про Windows Xp , хотя по логике вещей должно и там работать ! Вообщем удачи !!!
0
Avazart
Эксперт С++
7756 / 5662 / 554
Регистрация: 10.12.2010
Сообщений: 25,663
Записей в блоге: 17
07.05.2012, 01:26  [ТС] 4
C++
1
2
3
 case WM_SIZE:
     SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 1, 1, SWP_NOMOVE or SWP_NOSIZE);
     ShowWindow(hwnd,SW_SHOWNORMAL);
Ага а что будет если прользователь будет менять размер окна?
Явно что-то не хорошее...
0
Toshkarik
1150 / 867 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
07.05.2012, 01:32 5
Как я понял в Win вообще все окна сворачиваются при нажатии "Свернуть все окна". Даже те которые нельзя свернуть. Но при попытке развернуть любое окно автоматически разворачиваются все окна которые нельзя свернуть нажатием кнопки "Свернуть". Уф как все запутанно. Но это из личных наблюдений, возможно это не так.
0
Avazart
Эксперт С++
7756 / 5662 / 554
Регистрация: 10.12.2010
Сообщений: 25,663
Записей в блоге: 17
07.05.2012, 01:33  [ТС] 6
Форма сходит с ума
0
Миниатюры
Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна"  
Avazart
Эксперт С++
7756 / 5662 / 554
Регистрация: 10.12.2010
Сообщений: 25,663
Записей в блоге: 17
07.05.2012, 01:35  [ТС] 7
Toshkarik, но гаджеты не сворачиваются, и почему то если сделать дочерним от Proman это дает какой-то эффект
0
Игорь с++
473 / 465 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
07.05.2012, 01:39 8
Цитата Сообщение от Avazart Посмотреть сообщение
Ага а что будет если прользователь будет менять размер окна?
Как я понял ты пытаешься сделать , что то типо гаджета , так вот в гаджетах (по крайне мере сколько я видел) изменить размер гаджета можно только с помощью меню, и вообще если ,что то надо мозги напрягать , а не ждать , что тебе полный проект скинет без молейших глюков.Есть какое то направление вперёд,дерзай!!!
0
Toshkarik
1150 / 867 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
07.05.2012, 01:39 9
Гаджеты не являются приложениями.
0
Avazart
Эксперт С++
7756 / 5662 / 554
Регистрация: 10.12.2010
Сообщений: 25,663
Записей в блоге: 17
07.05.2012, 01:42  [ТС] 10
Игорь с++, Окно было в правом углу при сворачивани убежало в левый верхний

Добавлено через 1 минуту
Гаджеты не являются приложениями
но у них есть окно как я понимаю
0
Игорь с++
473 / 465 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
07.05.2012, 01:43 11
Цитата Сообщение от Avazart Посмотреть сообщение
Игорь с++, Окно было в правом углу при сворачивани убежало в левый верхний
Да вы , что а я и незнал!!!А вы код программы смотрели или копирнули и всё.Отследи те где окно ваше и в SetWindowPosition поставте ваши координаты!!!
0
Toshkarik
1150 / 867 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
07.05.2012, 01:44 12
Они являются частью рабочего стола, и кнопочки там другие. За них отвечает одна служба, не помню как называется.
0
Игорь с++
473 / 465 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
07.05.2012, 01:48 13
Цитата Сообщение от Toshkarik Посмотреть сообщение
Они являются частью рабочего стола
Это вы откуда взяли такую информацию?
0
Toshkarik
1150 / 867 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
07.05.2012, 01:50 14
Логично, что "Гаджеты рабочего стола" являются частью рабочего стола, нет?
0
Игорь с++
473 / 465 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
07.05.2012, 01:52 15
Цитата Сообщение от Toshkarik Посмотреть сообщение
Логично, что "Гаджеты рабочего стола" являются частью рабочего стола, нет?
Логично,но не правельно
0
Avazart
Эксперт С++
7756 / 5662 / 554
Регистрация: 10.12.2010
Сообщений: 25,663
Записей в блоге: 17
07.05.2012, 01:53  [ТС] 16
Да вы , что а я и незнал!!!А вы код программы смотрели или копирнули и всё.Отследи те где окно ваше и в SetWindowPosition поставте ваши координаты!!!
Я не автор той темы, мне интересен сам процес и как это обойти, а использовал я ваш exe
Намой взглад это явно не решение как и создание таймера автором той темы

Toshkarik,Ну вообще все окна являюся дочерними рабочего стола, а служба называется SideBar

Календарик на рабочий стол в C++/WinAPI - тут скрины

Но стоит заметить что они тоже не всегда адекватно реагируют на эту кнопку- становятся "поверх других окон"
0
Toshkarik
1150 / 867 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
07.05.2012, 01:55 17
Неправильно это не аргумент.

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
"поверх других окон"
Это как, если другие окна сворачиваются?
0
Avazart
Эксперт С++
7756 / 5662 / 554
Регистрация: 10.12.2010
Сообщений: 25,663
Записей в блоге: 17
07.05.2012, 01:57  [ТС] 18
После разворачивания, но это происходит не всегда, но возможно я ошибаюсь и это со сворачиванием не связано
0
Игорь с++
473 / 465 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
07.05.2012, 01:59 19
Цитата Сообщение от Avazart Посмотреть сообщение
Я не автор той темы, мне интересен сам процес и как это обойти, а использовал я ваш exe
так вот если вы посмотрите мой код , то увидите ,что
1)там нет определение где стоит окно
2)оно тупо ставится в точку 0,0
По моему дальше можно самому разворачивать тему(искать координаты и тд).
0
Toshkarik
1150 / 867 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
07.05.2012, 01:59 20
Про гаджеты я имел ввиду, что ими управляет процесс/служба. Они не являются отдельными простыми оконными приложениями.
0
07.05.2012, 01:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2012, 01:59

Как сделать чтобы при нажатии на кнопку "PlayWarcraft" заходил на мой сервер через IP adress
ссылка https://code.google.com/p/wc3launcher/ ЛАунчер для сервера Как...

API: востановление "чужого" окна из min
Знатоки! Может кто знает какие API-функции вызываются при восстановлении...

Создание "особенного" дочернего окна
Здравствуйте, товарищи. Пару дней назад экспериментировал я с созданием...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru