Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сообщения Windows, Как обмануть программу 
:(
    Опции темы
Gorbatovsky
Дата 31.5.2004, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 4.9.2003
Где: Киев

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



У меня проект некий гибрид из DOC и Windows.

Как послать сообщение клавному окну типа SendMessage (hParent, ...), чтобы приложение перерисовало само себя. А может в обработчике сообщений не хватает какого сообщения.

В чем проблема.
Приложение корректно ведет себя с другими программами, если чужое окно двигается сверху, то моя программа себя перерисовывает. А если свое дочернее окно двигается, или закрывается, то главная программа об этом не знает.

Добавлено @ 13:34
К сожалению изменить обработчик сообщений пока нельзя.
PM MAIL ICQ   Вверх
AndyY
Дата 31.5.2004, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



путь попроще:
::InvalidateRect( hparent, &rect, 1 );
::UpdateWindow( hparent );

поинтересней:
::RedrawWindow( hparent, .. );


--------------------
PM MAIL WWW   Вверх
Gorbatovsky
Дата 31.5.2004, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 4.9.2003
Где: Киев

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



Спасибо AndyY за помощь.

Попробовал 2 варианта:
1///////
::InvalidateRect(hParent,NULL,FALSE);
::UpdateWindow( hParent );

2//////
RedrawWindow(hParent ,NULL,NULL,RDW_ERASE|RDW_INVALIDATE|RDW_UPDATENOW);


Не помогает.
Сообщаю подробности.

Когда закрываю CFileDialog Перерисовывается все, кроме фона.
А когда двигаю CFileDialog, то ничего не рисуется. Черный фон..

PM MAIL ICQ   Вверх
AndyY
Дата 31.5.2004, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



видать какая-то кривизна в обработке WM_PAINT или WM_ERASEBACKGRND
есть такие орлы...

а изменить обработчик можно у любого окна. На это есть SetWindowLong( h, GWL_WNDPROC, my_proc );

восстановить можно также. а старый обработчик вызвать через CallWindowProc.

для начала я перед CFIleDlg поставил бы wndproc которая заливает все белым на WM_PAINT - и посмотрел результат. Если, конечно, исходники основного окна не доступны.




--------------------
PM MAIL WWW   Вверх
Масяня
Дата 31.5.2004, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Gorbatovsky @ 31.5.2004, 13:28)
У меня проект некий гибрид из DOC и Windows.
...
...

Приложение корректно ведет себя с другими программами, если чужое окно двигается сверху, то моя программа себя перерисовывает. А если свое дочернее окно двигается, или закрывается, то главная программа об этом не знает.

Так что же это за "гибрид ДОС и Win32" такой? biggrin.gif Ведь для ДОС-проги создается своя виртуальная машина и до нее добраться можно только через старшие линейные адреса режима ядра, а Win32 прога user-mode работает в своем собственном адресном пространстве и как же они взаимодействуют тогда? Если ты знаешь как, то тогда объясни, плз!

З.Ы. AndyY прав - WM_PAINT тебя спасет!
PM MAIL   Вверх
chipset
Дата 31.5.2004, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Может имеется в виду консольная программа.... hmmm.gif


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Gorbatovsky
Дата 31.5.2004, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 4.9.2003
Где: Киев

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



Дополнительная информация.
Возможно что, выражение "гибрид ДОС и Win32" не очень удачное.
Программа раньше работала под ДОС. 5 лет назад ее переделали для Windows. Ну и не сделали как следует( не доделали). Некоторые модули для меня не доступны.
Добавлено @ 19:08
Цитата
Может имеется в виду консольная программа....

Программа не консольная. Внешний вид у нее как у программ до Windows. Нету окон. Свое меню.
PM MAIL ICQ   Вверх
Масяня
Дата 31.5.2004, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если нету окон и нету меню.... это еще не значит что это ДОС-прога! Самый простой способ узнать это открыть эту прогу, например, в Блокноте и если там в начале "MZ" и "This program cannot be run in DOS mode.", то это конслольная прога.

Это сообщение отредактировал(а) Масяня - 31.5.2004, 19:23
PM MAIL   Вверх
chipset
Дата 31.5.2004, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Да.. У Харта вся книга описывается с консолькой.. А у него там полно всяких фигатеней с кучами, тридами, процессами, семафорами biggrin.gif


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Gorbatovsky
Дата 31.5.2004, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 4.9.2003
Где: Киев

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



Ув. Масяня, я ведь не говорил, что это ДОС- программа.
Это программа (IDraw) берет свое начало еще в доисторические времена...

" IDraw "originally ran under the HTS (Higher Time Sharing ) operation System.
The first "IDraw " run on the System 150. in 1980
SUN-Version IDraw was the first Unix implementation and introdused in june 1988

Эта программа появилась еще до PC.
Консольные приложения здесь не причем. IDraw занимает все окно. Например, как игра в полноэкранном режиме.
PM MAIL ICQ   Вверх
AndyY
Дата 1.6.2004, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Gorbatovsky
провели эксперимент с подменой WNDPROC?
интересен результатsmile.gif


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 4.9.2003
Где: Киев

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



Эксперимент с заливкой белым и с подменой WNDPROC пока не провел.
Изучаю как рисовать в полноэкранном режиме.
PM MAIL ICQ   Вверх
Gorbatovsky
Дата 1.6.2004, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 4.9.2003
Где: Киев

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



AndyY
Я провел небольшой эксперимент.
Перед fileDlg.DoModal(); я вставил такой фрагмент
Код

  HDC hdc=GetWindowDC(hParent);
CPen pen(PS_SOLID,4,RGB(255,0,0));
SelectObject(hdc,pen);
Ellipse(hdc,-100,-100,100,100);

Получилось такое поведение.
Когда вызываю диалог первый раз фрагмент эллипса появляется и закрашивается черным цветом.
Второй раз Эллипс рисуется сверху меню.
PM MAIL ICQ   Вверх
Gorbatovsky
Дата 1.6.2004, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 4.9.2003
Где: Киев

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



Дополнительная информция...
Когда открыто окно CFileDialog, то главное окно себе не перисовывает себя при перемещении других программ поверх.
PM MAIL ICQ   Вверх
AndyY
Дата 1.6.2004, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



в общем-то это никак не связано с обработкой WM_PAINT...
а не может быть варианта, что WM_PAINT не обрабатывается вовсе, а все рисуется через GetDC в то время, когда на экране нужно что-нибудь изменить?
по симптомам похоже...



--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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