Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 70, средняя оценка - 4.73
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,290
Записей в блоге: 17
#1

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

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

Что происходит при нажатии этой кнопки в плане сообщениий, и как их перехватить и игнорировать,что бы окно не сворачивалось?
Чем это событие отличается от обычного сворачивания окна через кнопку свернуть ?
Календарик на рабочий стол в C++/WinAPI
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2012, 22:50     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна"
Посмотрите здесь:
C++ Как возможно выйти в инструкции switch в начало самой инструкции при нажатии "не правильной" кнопки
C++ "Неожиданное" закрытие окна при выводе результатов на консоль
Вызов окна "Сохранить как" в Microsoft Word C++
Как сделать чтобы при нажатии на кнопку "PlayWarcraft" заходил на мой сервер через IP adress C++
C++ API: востановление "чужого" окна из min
C++ Создание "особенного" дочернего окна
C++ Ошибка с массивом: программа при вводе "ступорится" при нажатии клавиши Enter
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
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;
}
Что происходит - когда программа запущенна и подводим мышь к "свернуть все окна" наше окно становится в рамке , но стоит нажать на кнопку "Свернуть все окна" окно остаётся на месте.
Есть минусы если ты будеш использовать этот код , но можно пораскинуть мозгами и исправить те или иные недочёты которые будут тебя не устраивать!
Вложения
Тип файла: rar 1.rar (5.2 Кб, 29 просмотров)
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
07.05.2012, 01:20     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #3
Да забыл сказать у меня - Windows 7 Ultimate всё работает нормально , но не уверен про Windows Xp , хотя по логике вещей должно и там работать ! Вообщем удачи !!!
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,290
Записей в блоге: 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);
Ага а что будет если прользователь будет менять размер окна?
Явно что-то не хорошее...
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
07.05.2012, 01:32     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #5
Как я понял в Win вообще все окна сворачиваются при нажатии "Свернуть все окна". Даже те которые нельзя свернуть. Но при попытке развернуть любое окно автоматически разворачиваются все окна которые нельзя свернуть нажатием кнопки "Свернуть". Уф как все запутанно. Но это из личных наблюдений, возможно это не так.
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,290
Записей в блоге: 17
07.05.2012, 01:33  [ТС]     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #6
Форма сходит с ума
Миниатюры
Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна"  
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,290
Записей в блоге: 17
07.05.2012, 01:35  [ТС]     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #7
Toshkarik, но гаджеты не сворачиваются, и почему то если сделать дочерним от Proman это дает какой-то эффект
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
07.05.2012, 01:39     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #8
Цитата Сообщение от Avazart Посмотреть сообщение
Ага а что будет если прользователь будет менять размер окна?
Как я понял ты пытаешься сделать , что то типо гаджета , так вот в гаджетах (по крайне мере сколько я видел) изменить размер гаджета можно только с помощью меню, и вообще если ,что то надо мозги напрягать , а не ждать , что тебе полный проект скинет без молейших глюков.Есть какое то направление вперёд,дерзай!!!
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
07.05.2012, 01:39     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #9
Гаджеты не являются приложениями.
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,290
Записей в блоге: 17
07.05.2012, 01:42  [ТС]     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #10
Игорь с++, Окно было в правом углу при сворачивани убежало в левый верхний

Добавлено через 1 минуту
Гаджеты не являются приложениями
но у них есть окно как я понимаю
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
07.05.2012, 01:43     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #11
Цитата Сообщение от Avazart Посмотреть сообщение
Игорь с++, Окно было в правом углу при сворачивани убежало в левый верхний
Да вы , что а я и незнал!!!А вы код программы смотрели или копирнули и всё.Отследи те где окно ваше и в SetWindowPosition поставте ваши координаты!!!
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
07.05.2012, 01:44     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #12
Они являются частью рабочего стола, и кнопочки там другие. За них отвечает одна служба, не помню как называется.
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
07.05.2012, 01:48     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #13
Цитата Сообщение от Toshkarik Посмотреть сообщение
Они являются частью рабочего стола
Это вы откуда взяли такую информацию?
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
07.05.2012, 01:50     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #14
Логично, что "Гаджеты рабочего стола" являются частью рабочего стола, нет?
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
07.05.2012, 01:52     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #15
Цитата Сообщение от Toshkarik Посмотреть сообщение
Логично, что "Гаджеты рабочего стола" являются частью рабочего стола, нет?
Логично,но не правельно
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,290
Записей в блоге: 17
07.05.2012, 01:53  [ТС]     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #16
Да вы , что а я и незнал!!!А вы код программы смотрели или копирнули и всё.Отследи те где окно ваше и в SetWindowPosition поставте ваши координаты!!!
Я не автор той темы, мне интересен сам процес и как это обойти, а использовал я ваш exe
Намой взглад это явно не решение как и создание таймера автором той темы

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
"поверх других окон"
Это как, если другие окна сворачиваются?
Avazart
7102 / 5279 / 267
Регистрация: 10.12.2010
Сообщений: 23,290
Записей в блоге: 17
07.05.2012, 01:57  [ТС]     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #18
После разворачивания, но это происходит не всегда, но возможно я ошибаюсь и это со сворачиванием не связано
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
07.05.2012, 01:59     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #19
Цитата Сообщение от Avazart Посмотреть сообщение
Я не автор той темы, мне интересен сам процес и как это обойти, а использовал я ваш exe
так вот если вы посмотрите мой код , то увидите ,что
1)там нет определение где стоит окно
2)оно тупо ставится в точку 0,0
По моему дальше можно самому разворачивать тему(искать координаты и тд).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2012, 01:59     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна"
Еще ссылки по теме:
Передвижение окна при нажатии клавишей мышки и перетягивании C++
C++ "Змейка": при нажатии клавиши игра просто останавливается
Как запретить ввод слова "con" в консоли Visual Studio 2012 C++
C++ Необработанное исключение в "0x00412b4a" в "kursovik.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000004".
C++ Необработанное исключение в "0x01082855" в "sort.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc"

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

Или воспользуйтесь поиском по форуму:
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
07.05.2012, 01:59     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна" #20
Про гаджеты я имел ввиду, что ими управляет процесс/служба. Они не являются отдельными простыми оконными приложениями.
Yandex
Объявления
07.05.2012, 01:59     Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна"
Ответ Создать тему
Опции темы

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