![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| DissDoc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 463 Регистрация: 13.7.2006 Репутация: нет Всего: нет |
Всем привет. Есть какая-то очень сложная программа. С помощью модулей (dll) к ней можно писать свои дополнения.
Так вот. У меня дополнения довольно объемные, с созданием окон. Вопрос вот в чем. В спецификации к программе четко написано, что нельзя изпользовать выход из окна своего модуля с помощью PostQuitMessage(0). :( Программа валится. Проверял - действительно. Все делаю через WinAPI. Как можно иначе закрыть окно? |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
SendMessage WM_CLOSE ?
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| DissDoc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 463 Регистрация: 13.7.2006 Репутация: нет Всего: нет |
ХМ... Поведение точно такое же, как с помощью DestroyWindow
А именно, окно закрывается, а управление не передается... Сейчас копаю в сторону обработки ::GetMessage и отправки флагов TRUE или FALSE.. Ничего пока не выходит( |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
так и есть, в ответ на WM_CLOSE DefWindowProc вызывает DestroyWindow как это понимать? у меня по этому поводу 2 встречных вопроса: 1. какого рода окно: обычное ( CreateWindow, CreateDialog ) или модальное ( DialogBoxxxx )? 2. создается ли оно в основном потоке? -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| DissDoc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 463 Регистрация: 13.7.2006 Репутация: нет Всего: нет |
1. Обычное. CreateWindow
2. Да, создается в основном потоке. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
? может стоит попробовать модальный диалог? трансляция сообщений для обычного окна производит само приложение, так что здесь оно устанавливает правила, а модальный диалог имеет свой цикл обработки сообщений, т.е. независим ни от кого ps: если ошибка останется с модальным диалогом, значит дело не в окнах -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| DissDoc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 463 Регистрация: 13.7.2006 Репутация: нет Всего: нет |
Управление не передается - программа, из под которой запускается моя dll остается "залипшей"
Попробую с модальный диалогом. |
|||
|
||||
| DissDoc |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 463 Регистрация: 13.7.2006 Репутация: нет Всего: нет |
Что я делаю не так? У меня не появляется диалог
И сама функция обработки
В самом диалоге выставил Visible в TRUE Это сообщение отредактировал(а) DissDoc - 17.12.2010, 14:12 |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
это HINSTANCE приложения, а не длл, в которой расположен ресурс диалога, HINSTANCE длл приходит в DllMain -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| DissDoc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 463 Регистрация: 13.7.2006 Репутация: нет Всего: нет |
GremlinProg, не совсем понятно.. Т.е. нужно вот так?
В этом случае GWL_HINSTANCE - undeclare indefined :( Это сообщение отредактировал(а) DissDoc - 17.12.2010, 14:29 |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
нет, нужно в DialogBox передать HINSTANCE того модуля, в котором лежит ресурс IDD_TEST_DLG,
а раз IDD_TEST_DLG у тебя лежит в твоей же библиотеке (я так понимаю), то GetModuleHandle( NULL ) для него не подходит, подходит HINSTANCE, которая приходит в DllMain первым параметром -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| DissDoc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 463 Регистрация: 13.7.2006 Репутация: нет Всего: нет |
Вот тут еще одна проблема... структура dll такова, что не передает HINSTANCE.... Я вообще сейчас думаю перебрать все окна открытые и взять с определенным именем окно :(
Просто иначе не вижу смысла. |
|||
|
||||
| GremlinProg |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
как не передает-то?
http://msdn.microsoft.com/en-us/library/ms...6(v=vs.85).aspx смотри по аналогии:
поправки к TestDlgProc:
где-то в функции расширения, где у тебя необходимо показать окно:
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||
|
|||||||
| DissDoc |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 463 Регистрация: 13.7.2006 Репутация: нет Всего: нет |
Да, если бы было все так просто
У меня есть одна функция только (которая дается для написания своих дополнений) Т.е. dll создаю с помощью void set_module(int param) И все. Или я чего-то не догоняю... =\ |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
![]()
|
| Правила форума "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. |