![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Gorbatovsky |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 4.9.2003 Где: Киев Репутация: нет Всего: нет |
У меня проект некий гибрид из DOC и Windows.
Как послать сообщение клавному окну типа SendMessage (hParent, ...), чтобы приложение перерисовало само себя. А может в обработчике сообщений не хватает какого сообщения. В чем проблема. Приложение корректно ведет себя с другими программами, если чужое окно двигается сверху, то моя программа себя перерисовывает. А если свое дочернее окно двигается, или закрывается, то главная программа об этом не знает. Добавлено @ 13:34 К сожалению изменить обработчик сообщений пока нельзя. |
|||
|
||||
| AndyY |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
путь попроще:
::InvalidateRect( hparent, &rect, 1 ); ::UpdateWindow( hparent ); поинтересней: ::RedrawWindow( hparent, .. ); |
|||
|
||||
| Gorbatovsky |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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, то ничего не рисуется. Черный фон.. |
|||
|
||||
| AndyY |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
видать какая-то кривизна в обработке WM_PAINT или WM_ERASEBACKGRND
есть такие орлы... а изменить обработчик можно у любого окна. На это есть SetWindowLong( h, GWL_WNDPROC, my_proc ); восстановить можно также. а старый обработчик вызвать через CallWindowProc. для начала я перед CFIleDlg поставил бы wndproc которая заливает все белым на WM_PAINT - и посмотрел результат. Если, конечно, исходники основного окна не доступны. |
|||
|
||||
| Масяня |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Так что же это за "гибрид ДОС и Win32" такой? З.Ы. AndyY прав - WM_PAINT тебя спасет! |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Может имеется в виду консольная программа....
--------------------
|
|||
|
||||
| Gorbatovsky |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 4.9.2003 Где: Киев Репутация: нет Всего: нет |
Дополнительная информация.
Возможно что, выражение "гибрид ДОС и Win32" не очень удачное. Программа раньше работала под ДОС. 5 лет назад ее переделали для Windows. Ну и не сделали как следует( не доделали). Некоторые модули для меня не доступны. Добавлено @ 19:08
Программа не консольная. Внешний вид у нее как у программ до Windows. Нету окон. Свое меню. |
|||
|
||||
| Масяня |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Если нету окон и нету меню.... это еще не значит что это ДОС-прога! Самый простой способ узнать это открыть эту прогу, например, в Блокноте и если там в начале "MZ" и "This program cannot be run in DOS mode.", то это конслольная прога.
Это сообщение отредактировал(а) Масяня - 31.5.2004, 19:23 |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Да.. У Харта вся книга описывается с консолькой.. А у него там полно всяких фигатеней с кучами, тридами, процессами, семафорами
--------------------
|
|||
|
||||
| Gorbatovsky |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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 занимает все окно. Например, как игра в полноэкранном режиме. |
|||
|
||||
| AndyY |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
Gorbatovsky
провели эксперимент с подменой WNDPROC? интересен результат |
|||
|
||||
| Gorbatovsky |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 4.9.2003 Где: Киев Репутация: нет Всего: нет |
Эксперимент с заливкой белым и с подменой WNDPROC пока не провел.
Изучаю как рисовать в полноэкранном режиме. |
|||
|
||||
| Gorbatovsky |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 4.9.2003 Где: Киев Репутация: нет Всего: нет |
AndyY
Я провел небольшой эксперимент. Перед fileDlg.DoModal(); я вставил такой фрагмент
Получилось такое поведение. Когда вызываю диалог первый раз фрагмент эллипса появляется и закрашивается черным цветом. Второй раз Эллипс рисуется сверху меню. |
|||
|
||||
| Gorbatovsky |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 4.9.2003 Где: Киев Репутация: нет Всего: нет |
Дополнительная информция...
Когда открыто окно CFileDialog, то главное окно себе не перисовывает себя при перемещении других программ поверх. |
|||
|
||||
| AndyY |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
в общем-то это никак не связано с обработкой WM_PAINT...
а не может быть варианта, что WM_PAINT не обрабатывается вовсе, а все рисуется через GetDC в то время, когда на экране нужно что-нибудь изменить? по симптомам похоже... |
|||
|
||||
| Gorbatovsky |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 4.9.2003 Где: Киев Репутация: нет Всего: нет |
Приложение корректно ведет себя с другими программами, если чужое окно двигается сверху, то моя программа себя перерисовывает. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
гипотеза номер 2:
Может ли быть такое, что при выполнении модального диалог бокса (как CFileDialog) поток сообщений основного окна "замораживается" ?... тогда, естественно, никакие мессаги типа WM_PAINT или WM_MOUSEMOVE, которые идут через очередь сообщений, до главного окна не доходят. -------------------- ![]() |
|||
|
||||
| Gorbatovsky |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 4.9.2003 Где: Киев Репутация: нет Всего: нет |
mr.DUDA, Вы несомненно правы.
В правильном приложении, когда висит модальный диалог этого (замораживания) не происходит. Но я хочу заставить главное окно перерисовать себя после закрытия диалога. Еще одно уточнение. Диалог я создаю в dll |
|||
|
||||
| AndyY |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
dll роли не играет. а диалог в основном потоке создается?
может, проблема с синхронизацией? предлагаю натравить шпиона (spy++) на основное окно и посмотреть какие сообщения ходят во время открытого диалога. кстати, какая OS? вроде XP как-то сохраняет картинку на окне даже подвисшей задачи, поэтому при движении чужого окна ничего не апдейтится. |
|||
|
||||
| Gorbatovsky |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 4.9.2003 Где: Киев Репутация: нет Всего: нет |
Диалог в основном потоке создается.
OC-XP. При движении чужого окна картинка восстанавливается. AndyY, Вы полагаете, что это делает (картинку восстанавливает) OC? |
|||
|
||||
| AndyY |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
да, я с таким встречался. у подвисшего окна не перерисовывается только меню (белая полоса) но у вас меню нет...
так что с потоками и сообщениями? |
|||
|
||||
| Gorbatovsky |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 4.9.2003 Где: Киев Репутация: нет Всего: нет |
Привожу фрагмент сообщений полученных утилитой Spy
WM_MOUSEMOVE WM_NCHITTEST я отключил <00001> 001703DC S ..........................................................WM_WINDOWPOSCHANGING lpwp:0012FE7C <00002> 001703DC R ..........................................................WM_WINDOWPOSCHANGING <00003> 001703DC S ..........................................................WM_NCPAINT hrgn:00000001 <00004> 001703DC R ..........................................................WM_NCPAINT <00005> 001703DC S ..........................................................WM_ERASEBKGND hdc:6E010919 <00006> 001703DC R ..........................................................WM_ERASEBKGND fErased:False <00007> 001703DC S ..........................................................WM_WINDOWPOSCHANGED lpwp:0012FE7C <00008> 001703DC R ..........................................................WM_WINDOWPOSCHANGED <00009> 001703DC S ..........................................................WM_ACTIVATEAPP fActive:True dwThreadID:000009DC <00010> 001703DC R ..........................................................WM_ACTIVATEAPP <00011> 001703DC S ..........................................................WM_NCACTIVATE fActive:True <00012> 001703DC R ..........................................................WM_NCACTIVATE <00013> 001703DC S ..........................................................WM_ACTIVATE fActive:WA_ACTIVE fMinimized:False hwndPrevious:(null) <00014> 001703DC S ...........................................................WM_ACTIVATETOPLEVEL fActive:True dwThreadID:0012FC14 <00015> 001703DC R ...........................................................WM_ACTIVATETOPLEVEL <00016> 001703DC S ...........................................................WM_SETFOCUS hwndLoseFocus:(null) <00017> 001703DC R ...........................................................WM_SETFOCUS <00018> 001703DC R ..........................................................WM_ACTIVATE <00019> 001703DC S ..........................................................WM_SYNCPAINT <00020> 001703DC S ...........................................................WM_NCPAINT hrgn:59040997 <00021> 001703DC R ...........................................................WM_NCPAINT <00022> 001703DC S ...........................................................WM_ERASEBKGND hdc:BE010862 <00023> 001703DC R ...........................................................WM_ERASEBKGND fErased:False <00024> 001703DC R ..........................................................WM_SYNCPAINT <00025> 001703DC P WM_PAINT hdc:00000000 <00026> 001703DC P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:1117 yPos:194 <00027> 001703DC P WM_LBUTTONUP fwKeys:0000 xPos:1117 yPos:194 <00028> 001703DC P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:1117 yPos:194 <00029> 001703DC S ..........................................................WM_CANCELMODE <00030> 001703DC R ..........................................................WM_CANCELMODE <00031> 001703DC S ..........................................................WM_KILLFOCUS hwndGetFocus:(null) <00032> 001703DC R ..........................................................WM_KILLFOCUS <00033> 001703DC S ..........................................................WM_ENABLE fEnable:False <00034> 001703DC R ..........................................................WM_ENABLE <00035> 001703DC S ..........................................................WM_CANCELMODE <00036> 001703DC R ..........................................................WM_CANCELMODE <00037> 001703DC S ...........................................................WM_NCACTIVATE fActive:False <00038> 001703DC R ...........................................................WM_NCACTIVATE fDeactivateOK:True <00039> 001703DC S ...........................................................WM_ACTIVATE fActive:WA_INACTIVE fMinimized:False hwndPrevious:001B032E <00040> 001703DC R ...........................................................WM_ACTIVATE <00041> 001703DC S ...........................................................WM_WINDOWPOSCHANGING lpwp:0012D764 <00042> 001703DC R ...........................................................WM_WINDOWPOSCHANGING <00043> 001703DC S ...........................................................WM_WINDOWPOSCHANGED lpwp:0012D764 <00044> 001703DC R ...........................................................WM_WINDOWPOSCHANGED <00045> 001703DC S ......................................................................WM_QUERYCENTERWND hwndUseAsCenteringParent:(null) <00046> 001703DC R ......................................................................WM_QUERYCENTERWND <00047> 001703DC S .....................................................................WM_WINDOWPOSCHANGING lpwp:0012D760 <00048> 001703DC R .....................................................................WM_WINDOWPOSCHANGING <00049> 001703DC S .....................................................................WM_WINDOWPOSCHANGED lpwp:0012D760 <00050> 001703DC R .....................................................................WM_WINDOWPOSCHANGED <00051> 001703DC S ............................................................................WM_WINDOWPOSCHANGING lpwp:0012D804 <00052> 001703DC R ............................................................................WM_WINDOWPOSCHANGING <00053> 001703DC S ............................................................................WM_NCACTIVATE fActive:True <00054> 001703DC R ............................................................................WM_NCACTIVATE <00055> 001703DC S ............................................................................WM_ACTIVATE fActive:WA_ACTIVE fMinimized:False hwndPrevious:001B032E <00056> 001703DC R ............................................................................WM_ACTIVATE <00057> 001703DC S ............................................................................WM_SETFOCUS hwndLoseFocus:001B032E <00058> 001703DC R ............................................................................WM_SETFOCUS <00059> 001703DC S ..............................................................................WM_ENABLE fEnable:True <00060> 001703DC R ..............................................................................WM_ENABLE <00061> 001703DC S ..............................................................................WM_PAINT hdc:00000000 <00062> 001703DC R ..............................................................................WM_PAINT <00063> 001703DC P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:1272 yPos:1003 <00064> 001703DC P WM_LBUTTONUP fwKeys:0000 xPos:1272 yPos:1003 <00065> 001703DC P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:1266 yPos:1004 <00066> 001703DC P WM_LBUTTONUP fwKeys:0000 xPos:1266 yPos:1004 <00067> 001703DC P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:1107 yPos:85 Добавлено @ 16:08 Всем спасибо. Помогло просто ::InvalidateRect(hParent,NULL,FALSE); Вопрос закрыт |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |