Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3

Послать окну сообщение HWND_TOPMOST

30.10.2014, 13:57. Показов 1448. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!!! Ребята, помогите, дописать код. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TOptions::myWndProc(Messages::TMessage &Message) {
    if (Message.Msg == WM_SYSCOMMAND && Message.WParam == 0xF012) {
        return;
    }
 
    WndProc(Message);
 
}
void __fastcall TOptions::FormCreate(TObject *Sender) {
    
    WindowProc = myWndProc;
}
 
 
private:
    void __fastcall TOptions::myWndProc(Messages::TMessage &Message);
Как можно дописать в myWndProc пераметр HWND_TOPMOST, чтобы форма была всегда по верх всех окон как в Диспетчере задач?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.10.2014, 13:57
Ответы с готовыми решениями:

Как конкретному окну послать сообщение?
Здравствуйте. Есть два приложения которые имеют одинаковое хендл и ID процес(к примеру запустить два калькулятора). Как мне передать...

Сообщение окну
Привет всем, возникла проблемма, Нужно отправить сообщение окну , чтоб оно свернулось, как можно реализовать?

из файла тхт послать сообщение
Сделать программу которая открывает файл тхт в котором есть ip адреса и посылает сообщение на эти адреса.

13
Native x86
Эксперт Hardware
 Аватар для quwy
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
30.10.2014, 14:09
Может я не понял задачи, но в любом случае константа HWND_TOPMOST не имеет отношения к обработке сообщений оконной функцией. Поднять окно "поверх всех" можно вызовом функции SetWindowPos:
C++
1
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
30.10.2014, 14:28  [ТС]
Цитата Сообщение от quwy Посмотреть сообщение
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
Спасибо об этом я знал мне принципиально хочется понять и сделать в моём коде т.е через Message

Добавлено через 10 минут
Цитата Сообщение от quwy Посмотреть сообщение
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
Кстати гоовря с твоим кодом почему-то форма перемещается, а мне надо чтобы она была заблокированна от перемещения
0
Native x86
Эксперт Hardware
 Аватар для quwy
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
30.10.2014, 14:53
Цитата Сообщение от Sasha Посмотреть сообщение
Кстати гоовря с твоим кодом почему-то форма перемещается
Куда именно? Есть же флаг SWP_NOMOVE, должна стоять на месте.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
30.10.2014, 15:03  [ТС]
Цитата Сообщение от quwy Посмотреть сообщение
Куда именно? Есть же флаг SWP_NOMOVE, должна стоять на месте.
Вот как раз и нет я мышкой тягаю это окно по всему пространству рабочего стола
0
Native x86
Эксперт Hardware
 Аватар для quwy
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
30.10.2014, 15:05
Лучший ответ Сообщение было отмечено Sasha как решение

Решение

Sasha, так это не "перемещается", это "перемещаемое". Отключите ему заголовок и таскать не за что будет. Заодно пространство освободится.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
30.10.2014, 15:14  [ТС]
Цитата Сообщение от quwy Посмотреть сообщение
Sasha, так это не "перемещается", это "перемещаемое". Отключите ему заголовок и таскать не за что будет. Заодно пространство освободится.
У меня вверху первый пост он как раз мне и подходит потому как там форма не перемещается и имеется заголовок окна. Единственное что не устраивает в моём коде это то что мне надо сделать чтобы форма была всегда поверх всех окон
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
30.10.2014, 15:22
Лучший ответ Сообщение было отмечено Sasha как решение

Решение

Sasha, чего бы тебе перед назначением оконной процедуры просто не выставить
C++
1
2
3
4
5
void __fastcall TOptions::FormCreate(TObject *Sender) 
{
    this->FormStyle = fsStayOnTop; // <---    
    WindowProc = myWndProc;
}
?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
30.10.2014, 16:04  [ТС]
UI, У меня в приложении 2 окна. Первое окно Настройки, воторое выезжающее окно, т.е выезжает по таймеру. Так вот если ставить эту строку в окне Настройки, то всегда это окно поверх всех окон, потом я это окно скрываю и запускаю выезжающее окно с такой же строкой, но это окно почему-то прячется за другими, может это потому что это окно ыезжает по таймеру?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
30.10.2014, 16:33
А может, это потому, что Две формы поверх всех окон. Вторая не хочет быть поверх ?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
30.10.2014, 16:48  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
А может, это потому, что Две формы поверх всех окон. Вторая не хочет быть поверх ?
Нет не потому, потому что я закоментировал во второй форме строку this->FormStyle = fsStayOnTop; и оставил на форме которая выезжает по таймеру всё равно эта форма прячется. А если я оставляю эту строку только на второй форме, то эта форма всегда поверх всех, разве только диспетчер задач перекрывает, а так оно всегда вверху когда я его открываю
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
30.10.2014, 16:53
Сделай-ка минимальный тестовый проект, чтобы было вот это окно, и выезжающее. Хочется посмотреть, как именно ты там все связываешь...
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
31.10.2014, 02:27  [ТС]
Вот нужно сделать так чтобы выезжающее окно было всегда поверх всех окон, так как и окно Настройки , которое сейчас поверх всех окон
Вложения
Тип файла: rar 1.rar (8.55 Мб, 7 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
31.10.2014, 13:15
Лучший ответ Сообщение было отмечено Sasha как решение

Решение

Sasha, а что если:
C++
1
2
3
4
5
6
    if (Progress->Top != Screen->Height -
        (Progress->Height + Screen->Height - b))
    {
        Progress->Top--;
        ::SetWindowPos(this->Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); // <--- 
    }
? Проверить негде, попробуй... Во втором таймере - аналогично...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.10.2014, 13:15
Помогаю со студенческими работами здесь

Послать сообщение нажатия клавиш
Задача послать окну (может не активному) нажатие клавиш тех символов что в моей программе в Edit поле. Т.е есть Edit1 в нем текст есть...

Как послать сообщение в dll
Подскажите, как можно послать сообщение в dll? Handle h; h = LoadLibrary(L&quot;MyDLL.dll&quot;); этот хэндл не подходит.

Как послать сообщение окну с текстбоксом
Как послать сообщение окну с текстбоксом, что текстбокс изменён? Тут https://www.cyberforum.ru/wpf-silverlight/thread538217.html ...

Послать сообщение окну в указанный момент времени
Здравия желаю! Вот сижу, в носу ковыряюсь от скуки — задел извилину. Интересно стало: как можно без цикла проверки системного...

Как в этом коде послать сообщение о правом клике окну и ничего не сломать?
Друзья помогите пожалуйста. Использовал чужой код для обучения. Выделение области в муз. программе Рипер. Должно работать так : ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru