![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Решил сделать интересное диалоговое меню "О программе" с использованием directX, всё выводит при нажатии клавиши, всё красиво, только выйти из него нельзя.Подскажите пожалуйста как можно выйти из просмотра?Окно не двигается, при попытке закрыть не закрывается, а выход из всей программы только с помощью ctrl+alt+del
Код окна диалога Само окно сделано через ресурс файл.
Это сообщение отредактировал(а) toxx - 16.12.2009, 23:06 |
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
Добавлено через 2 минуты http://msdn.microsoft.com/en-us/library/aa383690(VS.85).aspx Это сообщение отредактировал(а) Alca - 16.12.2009, 23:32 |
|||
|
||||
| smoke_man |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 25.1.2007 Где: Рязань Репутация: 5 Всего: 17 |
Здесь:
у тебя начинается бесконечный цикл. Это сообщение отредактировал(а) smoke_man - 16.12.2009, 23:40 -------------------- 0x2b|~0x2b |
|||
|
||||
| toxx |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Да я понимаю что так нужно, только у меня нет кнопки когда идёт RenderingDirect3D(); и при попытке нажать на завершение( на крестик) всё виснет вот скрин скрин ![]()
Да я знаю, чтобы RenderingDirect3D(); нужно чтоб был цикл, а вот как из него выйти я никак не пойму. Потомучто если без цикла, то попросту один раз вызовется и исчезнет directX. А мне нужно чтобы по требованию пользователя прекратилось проигрывание сцены.Но не могу найти условие для выхода.Что и прошу я, посоветовать как выйти из этого положения Это сообщение отредактировал(а) toxx - 17.12.2009, 13:42 |
||||
|
|||||
| mekhanikus |
|
|||
|
Вольноопределяющийся ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 16.6.2008 Где: Спасск-Дальний Репутация: 1 Всего: 1 |
А если в условие цикла поставить глобальную переменную.
Пока она ture цикл крутится. В case IDOK: делать переменную FALSE - цикл заканчивается. |
|||
|
||||
| toxx |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Нет, так не получится.Потомучто изображение занимает всё окно и кнопки ОК попросту не видно) Другое дело может быть сделать чтобы изображение было не во всё окно,и чтобы было видно кнопку ОК Тогда дело наверно вот в этой функции
Попробовал изменять настройки
Это ни к чему не привело.Подскажите пожалуйста, как правильно сделать, очень интресно исполнение это в winamp там сделаны кнопки сверху а понизу расположено окно где показывает( не знаю как это сделать). |
||||||
|
|||||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
Добавлено через 1 минуту и 22 секунды Надо нажать на "Х" |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Нет, не помогает я пробовал так...Также при нажатии на Х появляется завершить задачу. Это сообщение отредактировал(а) toxx - 17.12.2009, 17:03 |
|||
|
||||
| GremlinProg |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
http://www.google.com/search?client=opera&...-8&oe=utf-8
тогда придется создать дочернее окно, ограничить его так, чтобы кнопки были видны, и уже на это окно вешать графику, т.е. в CreateDevice передавать дескриптор этого дочернего окна
в винампе этот дочерний контрол - простой статик (STATIC) Добавлено через 3 минуты и 38 секунд кстати, заменить тему топика на "Direct3D в диалоге", или есть другие варианты? -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||
|
|||||||
| toxx |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Скорее это название более подходит, когда создавал тему думал, что перенесете в соответствующий раздел это. Проблема просто в wipapi )
Я выбрал вот такой способ реализации(через контрол, но дела с ними еще не имел только CTEXT,ICON,DEFPUSHBUTTON) в общих чертах прочитал вот http://dims.karelia.ru/win32/(но не нашел как это вызвать в прграмме) Вот это не совсем подходит
Как я понимаю вы мне предлагаете сделать вот это?
Но у меня тогда возникает вопрос: Откуда взять хэндл или ID_ чтобы направить туда мой Direct3D? Это сообщение отредактировал(а) toxx - 17.12.2009, 18:16 |
||||||||
|
|||||||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Попробовал вот так,по 2му способу предложенному правда опять неудачно(окно просто зависает).
Окно статика не перекрывает кнопки, но при нажатии воспроизвести DX3D оно виснет, не сделав ничего.
Скрин Это сообщение отредактировал(а) toxx - 17.12.2009, 19:18 |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
не понял, зачем это? да, это ID этого контрола ID_DRAW, а дескриптор можно получить, вызвав GetDlgItem с этим ID'ом -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| toxx |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Всё сделал, все показывает, только опять виснет, кнопки видны,но они также виснут.
Всё вродебы правильно, только не понимаю почему всё окно виснет, когда только в статике показывает...
Скрин Это сообщение отредактировал(а) toxx - 17.12.2009, 20:12 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Вам уже писали - пока крутится это
Нужно добавить в цикл связку PeekMessage/IsDialogMessage/TranslateMessage/DispatchMessage. Кроме того, надо взводить флаг когда пользователь захотел закончить диалог (нажал esc, попробовал закрыть диалог или еще как), и проверять его в цикле. При взведенном флаге - завершать цикл |
|||
|
||||
| toxx |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Вы имели ввиду чтото на подобии этого?
Блин чтото не так опять, опять пол дня убил на непонятно что Это сообщение отредактировал(а) toxx - 17.12.2009, 22:14 |
||||||
|
|||||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
|
||||
|
|||||
| toxx |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
АААААА сделал чето
Это чето ест 1гб оперативной памяти и причем её потребление растет с каждой секундой...что делать не понятно... Хотя работает как надо |
||||||||
|
|||||||||
| TGrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: 1 Всего: 1 |
А ему обязательно инициализировать буферы в цикле? Возможно оно и есть память? Один раз инициализировать перед циклом, а потом выводить.
|
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Да это и есть весь этот 1 гб) Только если это всё убирать из цикла, то ничего не работает(хотя программа в любом случае не работает). Я уже разные комбинации перепробовал все впустую Короче я уже не знаю чего делать с этой проблемой, сижу с 5 часов в компиляторе уже,не в радость это всё уже Это сообщение отредактировал(а) toxx - 17.12.2009, 23:49 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Попробуй так:
Это сообщение отредактировал(а) xvr - 18.12.2009, 17:34 |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Щас возможности откомпилировать нет, но думаю не прокатит т.к. в диалоге iMsg//UINT а получается обрабатывает сообщения msg//MSG Мб я не прав, приду сделаю=) |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Прокатит - IsDialogMessage и DispatchMessage преобразую что надо куда надо |
|||
|
||||
| toxx |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Хммм спасибо большое, на деле всё просто. Только меня ввело в заблуждение то, что я думал что
Действует только в WinMain, вот в этом и все проблемы. Спасибо еще раз, надолкнули на правильный путь. Блин а память все так и жрёт....1гб стабильно( Это ###
В свете этого поедания памяти проверил и пример c DX там тоже жрёт память пока работает 1гб++ и увеличивается, что за фигня не понятно, неужели кто писал книгу совсем?)Или я где тупанул... Это сообщение отредактировал(а) toxx - 18.12.2009, 18:56 |
||||||||
|
|||||||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
На всякий случай проверил код функций, всё как в книге(
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Видимо проблема в RenderingDirect3D. Можно на ее код глянуть? |
|||
|
||||
| toxx |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Да конечно, я сам сижу её проверяю, пока ничего криминального и паралельно сравниваю с туториалами и ищу ошибки.
|
||||||
|
|||||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Тоже ничего криминального не вижу. А как насчет функций LightMaterial, Matrix и DrawMyText?
|
|||
|
||||
| toxx |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Тоже смотрю... ничего тоже пока не нашел. Вот они
|
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Есть подозрение (все в функции DrawMyText)
1) Зачем там строка hFont=CreateFont(30,10,0,0,FW_NORMAL,FALSE,FALSE,0,1,0,0,0,DEFAULT_PITCH|FF_MODERN,"Arial");? hFont более нигде не используется (и не удаляется!) 2) D3D фонт, созданный через D3DXCreateFont не удаляется (надо позвать pFont->Release() перед выходом, или использовать smart указатель для pFont). Кстати, создавать и удалять фонт на каждом кадре мне кажется несколько расточительным - почему бы его не создать в начале и не удалить в самом конце (один раз)? И последнее - если не поможет рекомендую задать этот вопрос тут |
|||
|
||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Да я тоже сегодня методом исключения функций из цикла добился тогоже результата, что и вы посмотрев функции. Вычислил что эта функция непомерно ест память...Только вот проблема, пример в книге был нерабочий. D3DXCreateFont устарела(в книге где она использовалась принималось 3 параметра, а в версии DX9 SDK march 2009 она уже принимает 6 параметров, как ей пользоваться я так и не нашел в интернете...Но понял что DirectX развивается не по дням , а по часам...)) Спасибо, что посмотрели код.Теперь я практически завершил свой калькулятор.Осталось текст добавить только в DX и будет готово. Это сообщение отредактировал(а) toxx - 19.12.2009, 13:35 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |