Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769

Как правильно создать окно только для сообщений, используя CreateWindowEx?

02.08.2023, 20:37. Показов 2713. Ответов 63
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Итак, например мне захотелось использовать окно только для сообщений, и я не знаю с чего мне начать и как это сделать правильно, я ещё новичок. Но я понял, что можно создать окно только для сообщений двумя путями:

1) Сначала зарегистрировать свой собственный класс окна (а это геморно и долго), а потом уже создать окно только для сообщений
2) Использовать любой класс окна, хоть например BUTTON, а потом создать окно только для сообщений
3) Использовать системный класс "Message" при создании окна только для сообщений

И вот я ломаю голову как же поступить правильнее. Сразу скажу, что самое простое это использовать системный класс "Message" но так ли это правильно, а регистрировать свой собственный класс ой как не хочется (ну зачем же столько много лишнего кода!!!)

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

Вот моя идея такова, код:

Visual Basic
1
hMsgWindow = CreateWindowEx(0, StrPtr("Message"), 0, 0, 0, 0, 0, 0, HWND_MESSAGE, 0, App.hInstance, ByVal 0&)
Это действительно создаст окно только для сообщений! И ведь всего одна строчка кода! Так не хочется регистрировать класс ещё да и зачем? Кто что толкового скажет по этому поводу!?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.08.2023, 20:37
Ответы с готовыми решениями:

Как правильно активировать окно и переключить фокус клавиатуры на него в чужом потоке с использованием оконных сообщений
Я почитал инструкции которые здесь описаны...

Создать функции для вычисления n! и a^b, используя только только арифметические действия
Создать функцию для вычисления n! и ab, используя только только арифметические действия (+, –, :, ·). Вычислить выражения, используя...

Создать функции для вычисления n! и a^b , используя только только арифметические действия
Создать функции для вычисления n! и a^b ,используя только только арифметические действия (+, –, :, ). Вычислить выражения, используя...

63
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
03.08.2023, 06:02
Напрашивается вопрос - зачем?
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
03.08.2023, 11:57  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Напрашивается вопрос - зачем?
Что зачем?

Добавлено через 4 минуты
Такие профессионалы как The Trick всегда используют окна только для сообщений в своих приложениях. Но The Trick регистрирует свой собственный класс, а я не хочу. А зачем нужны окна для сообщений можете в Интернете почитать.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
03.08.2023, 12:12
Цитата Сообщение от HackerVlad Посмотреть сообщение
Что зачем?
- чем не устраивают стандартные диалоговые окна?
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
03.08.2023, 12:25  [ТС]
Такие профессионалы как The Trick всегда используют окна только для сообщений в своих приложениях. Но The Trick регистрирует свой собственный класс, а я не хочу. А зачем нужны окна для сообщений можете в Интернете почитать.
Цитата Сообщение от Catstail Посмотреть сообщение
чем не устраивают стандартные диалоговые окна?
Я не говорил про диалоговые окна!

Добавлено через 8 минут
Catstail, https://learn.microsoft.com/ru... ly-windows
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
03.08.2023, 13:00
А, я не понял сразу. Но кто мешает в приложении VB создать невидимую форму и использовать ее для приема сообщений?
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
03.08.2023, 13:05  [ТС]
Catstail, я не люблю лёгких путей, я создаю приложение без формы вообще!

Добавлено через 16 секунд
Форма - это лишнее ненужное окно
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
03.08.2023, 13:26
Такие окна я обычно использую для передачи сообщений между потоками. Регистрировать класс нужно, т.к. при создании системных окон выделяются ресурсы в их обработчиках сообщений которые не нужны для обычного Message-only окна.
1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
03.08.2023, 13:41  [ТС]
The trick, а я пишу приложение без формы. Регистрировать класс это сложно, там у тебя в кодах ещё и ассемблерная вставка по моему для регистрации класса. Неужели нельзя просто использовать любой класс. Искал в интернете ничего не нашёл толком. Рад, что ты снова на форуме)

Добавлено через 3 минуты
Интересность ещё и в том, что программа на VB6 без формы всё равно создаёт в процессе три-четыре разных системных окна, например главное ThunderRT6Main с названием проекта. Его кстати тоже можно использовать вместо окна для сообщений, я проверял тоже работает прекрасно.

Добавлено через 2 минуты
Ну простой пример я создаю маленькую программку с иконкой в системном трее, но без формы вообще, там надо отслеживать WM_MOUSEMOVE для определения клика по иконке в системном трее. И я думал как же лучше организовать. Либо эти сообщения направить на уже имеющиеся окна такие как ThunderRT6Main либо на новое окно только для сообщений. И вот думаю до сих пор.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
03.08.2023, 13:50  [ТС]
Вот пример проекта, кстати, кому интересно программа без формы на VB6 для отслеживания горячих клавиш и с иконкой в системном трее. В этом примере я даже и вовсе не использую окно только для сообщений, а "подсаживаю" сообщения на ThunderRT6Main...
Вложения
Тип файла: zip EXE без формы по новой технологии.zip (18.4 Кб, 2 просмотров)
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
03.08.2023, 13:56  [ТС]
Там правда форму я всё-таки добавил и вызывается она сочетанием клавиш Alt+Win+Z но на самом деле форма там и не нужна вовсе. Я только для примера её туда прикрутил, чтобы типа выполнялось какое-то действие заметное по нажатию клавиш. Потом меня шокировало, то что после закрытия формы VB гадит некоторыми окнами и не подчищает за собой после выгрузки формы из памяти, остаются окна "VBBubbleRT6" и "MSCTFIME UI". Поэтому я решил их уничтожать вручную через DestroyWindow в событии выгрузки формы Form_Unload

Добавлено через 2 минуты
Да и ещё шокировало так же то что выгрузка формы не освобождает память. Процесс занимает вот 6 МБ в оперативной памяти, если вызываю форму, уже начинает занимать 8 МБ в оперативной памяти, но после Unload Form1 память не подчищается и процесс всё равно продолжает занимать 8 МБ оперативной памяти. Это меня очень расстроило, если честно, такие огромные недочёты в VB6.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
03.08.2023, 14:03
Цитата Сообщение от HackerVlad Посмотреть сообщение
Catstail, я не люблю лёгких путей
- "мыши плакали, кололись, но продолжали есть кактус". Впрочем, если не искать легких путей, почему бы не использовать другой механизм коммуникации (не основанный на формах) или даже создать свой собственный?
1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
03.08.2023, 16:18  [ТС]
Catstail, я и не использую формы
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
03.08.2023, 20:41
Цитата Сообщение от HackerVlad Посмотреть сообщение
я и не использую формы
- а тогда зачем вопрос?
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
03.08.2023, 20:43
Цитата Сообщение от HackerVlad Посмотреть сообщение
Регистрировать класс это сложно
Ничего сложного. Класс регистрируется для того чтобы как минимум иметь возможность обрабатывать сообщения.

Цитата Сообщение от HackerVlad Посмотреть сообщение
там у тебя в кодах ещё и ассемблерная вставка по моему для регистрации класса
Вставка работает в отдельном потоке и отправляет сообщение в основной.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Неужели нельзя просто использовать любой класс.
Можно и правильно - разные понятия. Я уже писал какие накладные расходы в этом случае.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Интересность ещё и в том, что программа на VB6 без формы всё равно создаёт в процессе три-четыре разных системных окна, например главное ThunderRT6Main с названием проекта. Его кстати тоже можно использовать вместо окна для сообщений, я проверял тоже работает прекрасно.
Приватные классы имеют свои собственные сообщения которые разработчик этих окон использует.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Да и ещё шокировало так же то что выгрузка формы не освобождает память. Процесс занимает вот 6 МБ в оперативной памяти, если вызываю форму, уже начинает занимать 8 МБ в оперативной памяти, но после Unload Form1 память не подчищается и процесс всё равно продолжает занимать 8 МБ оперативной памяти. Это меня очень расстроило, если честно, такие огромные недочёты в VB6.
Все там правильно работает.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
03.08.2023, 20:48  [ТС]
Catstail, я и не использую формы
Цитата Сообщение от The trick Посмотреть сообщение
Все там правильно работает
Ничего правильного, не чистит память, не чистит окна скрытые, которых небыло, не удаляет TMP-файл. Вообще ничего не чистит за собой.

Добавлено через 1 минуту
После Unload Form ещё приходится и удалять два окна "VBBubbleRT6" и "MSCTFIME UI", которых, я подчёркиваю НЕБЫЛО до загрузки формы!!!!!!!!!!!!!!!!!!!!!!!!!!!

Добавлено через 42 секунды
А вот tmp-файл я уже удалить не смогу скорее всего она его ещё и удерживать будет, мало того что не удалять за собой Unload Form вообще плохо чистит всё
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
03.08.2023, 20:52
Цитата Сообщение от HackerVlad Посмотреть сообщение
Ничего правильного, не чистит память, не чистит окна скрытые, которых небыло, не удаляет TMP-файл. Вообще ничего не чистит за собой.


Цитата Сообщение от HackerVlad Посмотреть сообщение
После Unload Form ещё приходится и удалять два окна "VBBubbleRT6" и "MSCTFIME UI", которых, я подчёркиваю НЕБЫЛО до загрузки формы!!!!!!!!!!!!!!!!!!!!!!!!!!!
Про кеширование когда-нибудь слышал?

Цитата Сообщение от HackerVlad Посмотреть сообщение
А вот tmp-файл я уже удалить не смогу скорее всего она его ещё и удерживать будет, мало того что не удалять за собой Unload Form вообще плохо чистит всё
Ладно, думай как хочешь, у меня нет времени объяснять как все работает на самом деле.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
03.08.2023, 21:06  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Про кеширование когда-нибудь слышал?
Ну так я же и говорю: гадит в память ну)))))) Это и есть кешерование))))))))

Добавлено через 1 минуту
Правильным Unload было бы 100% освобождение и возврат к тому моменту до загрузки формы. Чтобы вернуться к тому моменту до вызова Form1.Show но оно так не работает...

Добавлено через 3 минуты
Цитата Сообщение от The trick Посмотреть сообщение
Можно и правильно - разные понятия. Я уже писал какие накладные расходы в этом случае.
Когда я "подсаживаю" сообщения на ThunderRT6Main ничего страшного не происходит кстати)))) Какие накладные расходы в этом случае? Да ничего особенного.
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
03.08.2023, 21:18
Цитата Сообщение от HackerVlad Посмотреть сообщение
Правильным Unload было бы 100% освобождение и возврат к тому моменту до загрузки формы.
Нет. Для системы обслуживающей множество приложений такое поведение как раз неправильно. В твоем случае при каждом Form.Show будут переинициализированы куча структур что приведет к катастрофической потере производительности. В рантайме же сделано все так что при очередном Form.Show уже не будут выполняться эти лишние действия, т.к. все эти глобальные данные уже инициализированы. Рантайм может обслуживать кучу проектов одновременно EXE/ActiveX и деинициализирует все при выгрузке себя из адресного пространства приложения.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Когда я "подсаживаю" сообщения на ThunderRT6Main ничего страшного не происходит кстати)))) Какие накладные расходы в этом случае? Да ничего особенного.
Зачем ты тогда задаешь вопросы если сам уже все решил? Ты спросил - тебе ответил, так делать не следует т.к. ты понятия не имеешь какая обработка происходит внутри обработчика ThunderRT6Main, какому проекту принадлежит это окно, имеет ли оно уже сабклассинг (кто его будет снимать в обратном порядке?) и многие другие ньюансы. Правильный вариант - зарегистрировать свой класс окон и создать окно. В этом случае у тебя не будет никаких подводных камней и все будет работать в любой системе согласно документации.
2
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
03.08.2023, 22:58  [ТС]
The trick, спасибо)

Добавлено через 40 секунд
The trick, осталось только разместить здесь код для создания окна для сообщений с регистрацией класса))))))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.08.2023, 22:58
Помогаю со студенческими работами здесь

Используя иерархию и наследование, создать классы окно, окно с заголовком и окно с кнопкой
Используя иерархию и наследование, создать классы окно, окно с заголовком и окно с кнопкой. C++

Как создать контрол WinForms через CreateWindowEx?
Необходимо создать контрол WindowsForms через CreateWindowEx(). Spy++ показывает, например,...

CreateWindowEx() не создает окно
Работаю в VS 2013 Express, Юникод в настройках включен, GetLastError возвращает 0, CreateWindowEx возвращает 0. CreateWindowEx всего один,...

Как правильно создать окно MCI?
Как правильно создать окно MCI? Сделал как пишется здесь,но выдает ошибки: Unit1.cpp(21): E2268 Call to undefined function...

Как правильно создать второе окно?
Наверное я плохо искал, но понятного решения не нашел.Создаю вторую форму так же, как и создавал первую Справа в обозревателе с помощью...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru