![]() |
|
![]() ![]() ![]() |
|
takedo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: нет Всего: 3 |
Доброго всем времени суток!
Вот такой возник вопрос: Мне необходимо при вызове диалога "О программе", в момент когда диалог сформирован, то есть вызвано DoModal и InitDialog, получить HWND диалога, захватить его CPaintDC и отрисовать самому из другого потока или нарисовать окно рядом(что более предпочтительно возможно). Вопрос возможно покажется непонятным - бери да и все HWND прямо по имени переменной диалога, но это мне не подходит, так как это слишком явно. Моя задача - сделать это неявно, чтобы не бросалось в глаза. Делаю я это лишь для того, чтобы информацию о "папе" програмы не стерли банально вычистив код при вызове "О программе". Вот я и хочу сдеать эти манипуляции из PreTranslateMessage фрейма - не каждый же туда полезет. И для тех кто не понял, ещё раз объясню, что в случае отсутсвия регистрации авторства, кто написан в разработчиках, тот и автор. Ну вобщем, если что не понятно, спросите ещё, мне главное в PreTrMes отловить событие вызова "О программе" и получить его HWND пока. Добавлено @ 08:14 да в spy++ смотрел - ничего не прояснилось ![]() -------------------- я не гольфист - я хоккеист |
|||
|
||||
Kostt |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 169 Регистрация: 8.1.2006 Где: Томск Репутация: 2 Всего: 3 |
Мдааааа...А если попробовать никому не давать исходники, а только скомпилированные файлы в которых прописано: Аффтар - takedo и ниипет?
![]() |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 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У вызвать стандартную. -------------------- ... |
|||
|
||||
takedo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: нет Всего: 3 |
попробуем, если чего получится, то подтвержу или наоборот; сделаю сегодня, завтра(если кому интересно)
-------------------- я не гольфист - я хоккеист |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |