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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 70, средняя оценка - 4.73
Avazart
Эксперт С++
7145 / 5322 / 275
Регистрация: 10.12.2010
Сообщений: 23,556
Записей в блоге: 17
#1

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

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

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

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Игорь с++
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
Эксперт С++
7145 / 5322 / 275
Регистрация: 10.12.2010
Сообщений: 23,556
Записей в блоге: 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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
07.05.2012, 01:32 #5
Как я понял в Win вообще все окна сворачиваются при нажатии "Свернуть все окна". Даже те которые нельзя свернуть. Но при попытке развернуть любое окно автоматически разворачиваются все окна которые нельзя свернуть нажатием кнопки "Свернуть". Уф как все запутанно. Но это из личных наблюдений, возможно это не так.
Avazart
Эксперт С++
7145 / 5322 / 275
Регистрация: 10.12.2010
Сообщений: 23,556
Записей в блоге: 17
07.05.2012, 01:33  [ТС] #6
Форма сходит с ума
Миниатюры
Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна"  
Avazart
Эксперт С++
7145 / 5322 / 275
Регистрация: 10.12.2010
Сообщений: 23,556
Записей в блоге: 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
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
07.05.2012, 01:39 #9
Гаджеты не являются приложениями.
Avazart
Эксперт С++
7145 / 5322 / 275
Регистрация: 10.12.2010
Сообщений: 23,556
Записей в блоге: 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
1140 / 857 / 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
1140 / 857 / 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 Посмотреть сообщение
Логично, что "Гаджеты рабочего стола" являются частью рабочего стола, нет?
Логично,но не правельно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2012, 01:52
Привет! Вот еще темы с ответами:

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

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Ошибка с массивом: программа при вводе "ступорится" при нажатии клавиши Enter - C++
Задание: Напишите программу, используя указатели, которая вычисляет адреса чётных элементов массива, состоящего из 10 чисел типа float. ...

Передвижение окна при нажатии клавишей мышки и перетягивании - C++
Как на c++ сделать передвижение окна при нажатие и перетягивание клавишей мышки в опредильонной области окна?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.05.2012, 01:52
Ответ Создать тему
Опции темы

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