Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что ловить в PreTranslateMessage и как, надо поймать вызов диалога About 
:(
    Опции темы
takedo
Дата 24.4.2006, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: нет
Всего: 3



Доброго всем времени суток!
Вот такой возник вопрос: Мне необходимо при вызове диалога "О программе", в момент когда диалог сформирован, то есть вызвано DoModal и InitDialog, получить HWND диалога, захватить его CPaintDC и отрисовать самому из другого потока или нарисовать окно рядом(что более предпочтительно возможно). Вопрос возможно покажется непонятным - бери да и все HWND прямо по имени переменной диалога, но это мне не подходит, так как это слишком явно. Моя задача - сделать это неявно, чтобы не бросалось в глаза. Делаю я это лишь для того, чтобы информацию о "папе" програмы не стерли банально вычистив код при вызове "О программе". Вот я и хочу сдеать эти манипуляции из PreTranslateMessage фрейма -  не каждый же туда полезет. И для тех кто не понял, ещё раз объясню, что в случае отсутсвия регистрации авторства, кто написан в разработчиках, тот и автор. Ну вобщем, если что не понятно, спросите ещё, мне главное в PreTrMes отловить событие вызова "О программе" и получить его HWND пока.

Добавлено @ 08:14 
да в spy++ смотрел - ничего не прояснилось smile  


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Kostt
Дата 24.4.2006, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 8.1.2006
Где: Томск

Репутация: 2
Всего: 3



Мдааааа...А если попробовать никому не давать исходники, а только скомпилированные файлы в которых прописано: Аффтар - takedo и ниипет?  smile  
PM MAIL   Вверх
Earnest
Дата 24.4.2006, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Боюсь, сообщения, которые крутятс я в диалоге, не попадут в PreTranslate фрейма. Там ведь свой модальный цикл.
Можно попробовать следующее:
См. код RunModalLoop. Если он запускается без флага MLF_NOIDLEMSG (что скорее всего), 
то в цикле простоя, а также сразу после инициализации и отображения, диалог посылает своему паренту WM_ENTERIDLE. Вот его и можно попробовать ловить (но не в PreTranslate, а просто в обработчике на фрейме - потому что посылается SendMessage'ом, т.е. минуя очередь и PreTranslate). В lParam будет hWnd диалога. 
Однако: 1) WM_ENTERIDLE может приходить по разным поводам - например, от меню. Т.е нужно ставить флаг в обработчике ABOUT (ДО DoModal), и если он стоит - обрабатывать WM_ENTERIDLE. 2) Это сообщение приходит не один раз, а каждый раз, как пустеет очередь сообщений. Поэтому опять флаг.
Однако, достоинство этого сообщения в том, что первый раз оно приходит, когда диалог гарантированно инициализирован и виден. А в момент OnInitDialog диалог еще не виден.

Добавлено @ 09:30 
Не забудь после своей обработки WM_ENTERIDLУ вызвать стандартную. 


--------------------
...
PM   Вверх
takedo
Дата 24.4.2006, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: нет
Всего: 3



попробуем, если чего получится, то подтвержу или наоборот; сделаю сегодня, завтра(если кому интересно) 


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0549 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.