|
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
|
|
Помогите создать окно с кнопками, графика win32 API22.05.2011, 19:07. Показов 10153. Ответов 10
Метки нет (Все метки)
Используются только функции Win32 API.
Мне надо создать окно у которого background содержит картинку, окно не прямоугольное. (это я сделал). Окно должно открываться из программы Console Application по требованию (т.е. через создание нового потока). На форме окна должны находиться несколько кнопок (так же содержащих картинки, кроме того, они так же не прямоугольные). Как раз тут и проблемка. Окно должно разворачиваться из трея и сворачиваться туда же (это уже есть). Что я пробовал: 1. После создания окна при событии WM_CREATE, пытался создать кнопки динамически, но не получилось, либо есть проблема с прорисовкой, либо я не получаю от кнопок событий WM_COMMAND. Если идти этим путем, то как создать эти кнопки, чтобы так же принимать от них сообщения? 2. Пытался создать форму через ресурсы, добавил кнопки, установил им свойства Owner Draw. Окно приходится создавать через CreateDialog, что не очень подходит. Кнопки работают (без картинок), но если я добавляю в WM_COMMAND вызов MessageBox то сообщение появляется, но его нельзя закрыть, активировать или нажать на кнопку (сообщение в позиции inactive window). Если же без CreateDialog то как добавить эту форму в окно? Как на ней рисовать? Как прорисовывать кнопки? Помогите мне, я с графикой пока плохо знаком. Если можно, маленький пример (можно без создания отдельного потока). Окно с катинкой + кнопка на нем с картинкой.
0
|
|
| 22.05.2011, 19:07 | |
|
Ответы с готовыми решениями:
10
Как перерисовывать окно в Win32 API? Не создается дочернее окно WIN32 Api Программа на win32 api с тулбаром и меню, окно не появляется |
|
1 / 1 / 2
Регистрация: 05.08.2009
Сообщений: 96
|
|
| 23.05.2011, 01:15 | |
|
В первом случае,Вы скорее всего кнопкам не указали их ID.
ID можно установить через SetWindowLong(hBut,GWL_ID,999); А,какой из 2 вариантов нужен? Можно сделать и первым и вторым случаем.Судя, как у Вас фокусируеться диалог из ресурсов,предлагаю первый вариант. ![]() Как с фокусом то?
0
|
|
|
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
|
|
| 23.05.2011, 02:01 [ТС] | |
|
Может я не так выразился или не точно описал проблему, но..
В первом случае я пытался создать окно с помощью CreateWindow и стилем WS_POPUP. При этом у меня в окне нет Title, Border и т.д. Есть только чистое поле на котором я и рисую (приклеиваю картинку). Соответственно нет никаких кнопок с ID. Вот мне и надо создать их динамически, да еще чтобы улавливать от них события и чтобы они были графическими. Во втором случае я пользуюсь CreateDialog и загружаю ранее созданную в ресурсах форму, с кнопками и ID для каждой из них. Но в этом случае я не совсем понимаю как мне прорисовывать их. Кстати я упоминал, что окно имеет не прямоугольную форму, а для этого я использую функцию SetWindowRgn. Так вот с готовым диалогом у меня возникает проблема при формировании этого региона (точнее, он получается не той формы что надо, а меньше). Поэтому мне и хотелось бы получить маленький примерчик или объяснение как создать окно с графикой и кнопками.
0
|
|
|
1 / 1 / 2
Регистрация: 05.08.2009
Сообщений: 96
|
|
| 23.05.2011, 02:55 | |
|
А какой у Вас e-mail?
0
|
|
|
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
|
|
| 23.05.2011, 13:25 [ТС] | |
|
Мне удалось создать кнопку с помощью CreateWindow и SetWindowLong (спасибо Kovalsky2).
Однако есть вопрос: Кнопка посылает сообщение WM_COMMAND в окно. Как мне добавить курсор в эту кнопку, чтобы например при прохождении мыши над ней он менялся? Мне надо, чтобы при нажатии левой кнопкой мыши картинка менялась, а при освобождении возвращалась первоначальная. На данный момент картинка прорисовывается при событии WM_PAINT главного окна. Как сделать, чтобы при нажатии на кнопку задействовалась функция прорисовки только кнопки, а не всего окна? Т.е. при установленном свойстве кнопки OnwerDraw=true как задействовать этот самый OwnerDraw?
0
|
|
|
1 / 1 / 2
Регистрация: 05.08.2009
Сообщений: 96
|
||||||
| 24.05.2011, 00:39 | ||||||
|
Теперь обрабатываем WM_DRAWITEM главного окна
hDC - HDC батона куда выводить картинку rcItem - размер В зависимость от itemState - выводить нужную картинку
0
|
||||||
|
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
|
|
| 25.05.2011, 01:23 [ТС] | |
|
В общем попытался я прорисовывать кнопеки через WM_DRAWITEM.
Результат: При появлении окна кнопки появляются как полагается, все хорошо. Когда я нажимаю мышью на одну их кнопок картинка на ней меняется на нажатую (Clicked). Когда я отпускаю кнопку мыши, то генерируется код WM_COMMAND, но... Картинка не возвращается в положение не нежатой (UnClicked). Если поместить MessageBox в событие WM_COMMAND, то какртинка возвращается в положение UnCliked. Вывод: WM_DRAWITEM реагирует только на изменение состояния кнопки, т.е Selected/Unselected, Focused/Unfocused. И вовсе не реагирует на действие мыши (MouseButtonDown/MouseButtonUp). А это именно то, чего мне нужно добиться. Мне нужно именно создать эффект 'нажатия' на кнопку. Пытался поместить обработку для WM_LMOUSEDOWN и WM_LMOUSEUP в родительское окно, но эти события не происходят на самих кнопках, только в родительском окне (Имеется ввиду MainWinProc). Пытался задать для кнопки собственную оконную процедуру, но в этом случае есть проблемы с прорисовкой, хотя как раз в ней эти события мыши улавливаются. Но в этом случае совсем не срабатывает WM_DRAWITEM событие. Как же быть? А мне еще хотелось добавить и 'подсветку' кнопки при прохождении мыши над ней!?
0
|
|
|
1 / 1 / 2
Регистрация: 05.08.2009
Сообщений: 96
|
||||||
| 25.05.2011, 01:51 | ||||||
|
Если, Вы задавали оконную процедуру для батона следующим образом:
Ещё как вариант: может вообще отказаться от стандартного 'Button' и создать совственный?
0
|
||||||
|
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
|
|
| 25.05.2011, 14:10 [ТС] | |
|
Da, ya ispolzoval imenno takoj variant.
V procedure ja tak ge dobavil obrabotku WM_PAINT. Odnako button pojavlaetcja tolko posle najatia na nego, a ne v nachale. A kak sozdat` svoju button?
0
|
|
|
1 / 1 / 2
Регистрация: 05.08.2009
Сообщений: 96
|
|
| 25.05.2011, 15:26 | |
|
Добавили WM_PAINT(BeginPaint(...),EndPaint(...)) и перестало срабатывать WM_DRAWITEM в главном окне.А если отключите BeginPaint(...),EndPaint(...),то сново начнёт срабатывать WM_DRAWITEM.Если Вы уже рисуете в WM_DRAWITEM зачем Вам WM_PAINT?
Собственный батон - создаём своё окно через WNDCLASSEX,CreateWindows. А дальше пишем все что мы хотим у видеть в своём батоне. Просто коли уже все рисуем сами,и от стандартного батона практически ничего не осталось,то нужен ли он нам?
0
|
|
|
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
|
|
| 14.06.2011, 12:22 [ТС] | |
|
Спасибо 2 Kovalsky2, создал окно с графикой и графические кнопки на нем, однако...
Форма имеет не сплошное заполнение, а картинку. Кроме того сама кнопка не имеет прямоугольную форму (есть элипсы и округленные прямоугольники). Мне необходимо, чтобы при прорисовке кнопки её лишние части не заслоняли картинку на форме (т.е. некорорые части кнопки должны быть прозрачными), и кроме того, при наведении мыши надо, чтобы курсор менялся только в существенной части, я не на углах, к примеру (т.е. не в той части которая должна быть прозрачной).
0
|
|
| 14.06.2011, 12:22 | |
|
Помогаю со студенческими работами здесь
11
[masm64] Создать окно с кнопками Создать окно с заголовком и кнопками Создать окно с тремя кнопками, используя Swing Win32 API, как создать меню? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|