View previous topic :: View next topic |
Author |
Message |
Worros
Joined: 19 Jan 2007 Posts: 1123
|
(Separately) Posted: Thu Jan 15, 2009 00:56 Post subject: |
|
|
VadiMGP wrote: | Попробуй перед уходом в полноэкранный сохранить хэндл от меню - GetMenu(), а после возврата восстановить его через SetMenu(). |
Помогает, но только в сочетании с WS_OVERLAPPEDWINDOW.
При WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX |WS_VISIBLE меню не отображается. А от WS_OVERLAPAPDWINDOW другой побочный эффект, не перерисовывается открывшаяся по сторонам уменьшившегося окна область.
И бордер ни в какую не желает пропадать. |
|
Back to top |
|
|
VadiMGP
Joined: 21 Mar 2007 Posts: 1625
|
(Separately) Posted: Thu Jan 15, 2009 01:11 Post subject: |
|
|
Ну тогда остается только залп из всех орудий. Сначала сохраняешь все стили (обычные и расширенные) и меню. Потом высекаешь заголовок и уходишь на весь экран. По возвращении восстанавливаешь все, что сохранял. |
|
Back to top |
|
|
Worros
Joined: 19 Jan 2007 Posts: 1123
|
(Separately) Posted: Thu Jan 15, 2009 01:13 Post subject: |
|
|
Спасибо, попробую. |
|
Back to top |
|
|
Worros
Joined: 19 Jan 2007 Posts: 1123
|
(Separately) Posted: Fri Jan 16, 2009 15:14 Post subject: |
|
|
VadiMGP wrote: | Ну тогда остается только залп из всех орудий. Сначала сохраняешь все стили (обычные и расширенные) и меню. Потом высекаешь заголовок и уходишь на весь экран. По возвращении восстанавливаешь все, что сохранял. |
Сделал. Все равно меню пропадает. Более того, даже и заголовок не появляется, если
Code: | SetWindowLong(GetParent(ListWin), GWL_STYLE,tmp.Lister_GWL_STYLE);
SetWindowLong(GetParent(ListWin),GWL_EXSTYLE,tmp.Lister_GWL_EX_STYLE);
SetWindowPos(GetParent(ListWin),HWND_TOP,tmp.rcC.left,tmp.rcC.top,(tmp.rcC.right-tmp.rcC.left),(tmp.rcC.bottom-tmp.rcC.top), SWP_SHOWWINDOW);
SetMenu(GetParent(ListWin),tmp.hmenu);
UpdateWindow(GetParent(ListWin));
|
Ну а принудительное выставление tmp.Lister_GWL_STYLE| WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX |WS_VISIBLE
восстанавливает заголовок, но не меню. |
|
Back to top |
|
|
VadiMGP
Joined: 21 Mar 2007 Posts: 1625
|
(Separately) Posted: Fri Jan 16, 2009 15:39 Post subject: |
|
|
Ну тогда не знаю. Наверно надо искать принципиально другие пути. Возможно, временно у своего окна убирать стиль WS_CHILD и показывать его на весь экран. Кстати, напиши автору Imagine - он же это как-то делает, хотя тоже немного коряво. |
|
Back to top |
|
|
Worros
Joined: 19 Jan 2007 Posts: 1123
|
(Separately) Posted: Fri Jan 16, 2009 16:16 Post subject: |
|
|
WS_CHILD убрать? пробовал. Сразу отвалились все хоткеи.
Их и сейчас, похоже, mplayer прихватывает, только нерегулярно как то
Автор Imagine вроде корейско-корявоанглоязычный? У меня с этим проблемы.Мой английский еще хуже. Да, кстати, коряво.
/offtop
Я только сейчас начал понимать, почему он не синхронизировал fittowindow в своем плагине с листером. Какая жуткая логика у ListSendCommand |
|
Back to top |
|
|
VadiMGP
Joined: 21 Mar 2007 Posts: 1625
|
(Separately) Posted: Fri Jan 16, 2009 18:28 Post subject: |
|
|
Worros wrote: | WS_CHILD убрать? пробовал. Сразу отвалились все хоткеи. | Можно попробовать вручную пересылать все WM_KEYDOWN и WM_KEYUP в окно листера.
А вообще вырисовывается главный вопрос - сколько времени/сил ты готов угрохать на то, чтобы убрать этот треклятый заголовок и рамочку? Оно того стоит? |
|
Back to top |
|
|
Worros
Joined: 19 Jan 2007 Posts: 1123
|
(Separately) Posted: Fri Jan 16, 2009 19:15 Post subject: |
|
|
VadiMGP wrote: | Worros wrote: | WS_CHILD убрать? пробовал. Сразу отвалились все хоткеи. | Можно попробовать вручную пересылать все WM_KEYDOWN и WM_KEYUP в окно листера.
А вообще вырисовывается главный вопрос - сколько времени/сил ты готов угрохать на то, чтобы убрать этот треклятый заголовок и рамочку? Оно того стоит? |
Понятно, неутешительно. Не стоит наверное. Спасибо за советы. |
|
Back to top |
|
|
Worros
Joined: 19 Jan 2007 Posts: 1123
|
(Separately) Posted: Sat Feb 21, 2009 08:01 Post subject: |
|
|
Code: | ::SetMenu(::GetParent(ListWin), NULL);
::SetWindowLong(::GetParent(ListWin), GWL_STYLE, ((::GetWindowLong((::GetParent(ListWin)), GWL_STYLE) & (~WS_OVERLAPPEDWINDOW))|WS_POPUP));
::SetWindowPos (::GetParent(ListWin), HWND_TOP,0,0,XScreenResolution,YScreenResolution,SWP_SHOWWINDOW); |
В таком виде всё нормально.
Может кому ещё пригодится. Я по этим граблям несколько дней ходил. |
|
Back to top |
|
|
Worros
Joined: 19 Jan 2007 Posts: 1123
|
(Separately) Posted: Mon Mar 09, 2009 02:14 Post subject: |
|
|
Отправляю из отдельного потока Code: | ::MoveWindow(gp->DataForThread.ListerWin,floor((FLOAT)((r1.right-gp->DataForThread.naturewidth)/2)),floor((FLOAT)((r1.bottom-gp->DataForThread.natureheight)/2)),gp->DataForThread.naturewidth,gp->DataForThread.natureheight,true); |
Отслеживаю в пошаговой отладке. Одна эта строчка выполняется несколько секунд на весьма неслабом компе
В чем может быть моя ошибка?
P.S. VS2003 |
|
Back to top |
|
|
Worros
Joined: 19 Jan 2007 Posts: 1123
|
(Separately) Posted: Mon Mar 09, 2009 02:55 Post subject: |
|
|
И даже такая строчка Code: | MoveWindow(gp->DataForThread.ListerWin,20,20,gp->DataForThread.naturewidth,gp->DataForThread.natureheight,true); | тоже. Та же строчка выполняется мгновенно из ListLoad. Значит плавающая запятая точно не при чем, а у меня проблемы с межпоточным взаимодействием. Но что именно? Я не понимаю |
|
Back to top |
|
|
VadiMGP
Joined: 21 Mar 2007 Posts: 1625
|
(Separately) Posted: Mon Mar 09, 2009 02:56 Post subject: |
|
|
Worros wrote: | Отслеживаю в пошаговой отладке. | А сколько времени эта строчка выполняется без пошаговой отладки? Если задержка только в дебаггере, то плюнь. Известны заморочки дебаггера при переключении контекста потоков.
Если же она и в самом деле долго выполняется, то разбивай на более простые действия и хронометрируй их. Так и найдешь кто там такой задумчивый.
Кстати, почему ты работаешь с VS2003? По-моему это сплошное недоразумение, а не среда работы. Я через неделю снес его к чертовой матери. VS2005 меня тоже порядком разочаровал. Вот VS2008 с SP1 у меня прижился. |
|
Back to top |
|
|
Worros
Joined: 19 Jan 2007 Posts: 1123
|
(Separately) Posted: Mon Mar 09, 2009 03:03 Post subject: |
|
|
VadiMGP wrote: | А сколько времени эта строчка выполняется без пошаговой отладки? | Столько же. Секунды. Я в отладку и полез потому, что тормоза заметны на глаз и сильно напрягают. VadiMGP wrote: | Если же она и в самом деле долго выполняется, то разбивай на более простые действия и хронометрируй их. Так и найдешь кто там такой задумчивый. | Где прочитать, как это делается? Я не умею.
VadiMGP wrote: | Кстати, почему ты работаешь с VS2003? По-моему это сплошное недоразумение, а не среда работы. Я через неделю снес его к чертовой матери. VS2005 меня тоже порядком разочаровал. Вот VS2008 с SP1 у меня прижился. | IDE удобнее, чем у VC6 , и в то же время разница между ними не столь велика. Поэтому работаю над проектом в VC7.1, а выкладываемые паблик релизы компилирую в шестерке (код компактнее). |
|
Back to top |
|
|
Worros
Joined: 19 Jan 2007 Posts: 1123
|
(Separately) Posted: Mon Mar 09, 2009 03:07 Post subject: |
|
|
У меня есть кое-какие подозрения.
Вот такой кусок кода не имеет отношения к делу?
В отдельном потоке Code: | MoveWindow(gp->DataForThread.ListerWin,20,20,gp->DataForThread.naturewidth,gp->DataForThread.natureheight,true);
SetEvent(hEventParsingThreadReady[gp->DataForThread.iExsCounter]); |
В ListLoad Code: | WaitForSingleObject(hEventParsingThreadReady[gp->DataForThread.iExsCounter],10000); |
Но у меня задержка не 10 сек, а примерно 5
В отладке задержка именно при отработке MoveWindow, до установки ивента. |
|
Back to top |
|
|
Worros
Joined: 19 Jan 2007 Posts: 1123
|
(Separately) Posted: Mon Mar 09, 2009 03:10 Post subject: |
|
|
И еще, я припоминаю рекомендацию не посылать из потока SendMessage рабочему окну, а использовать исключительно PostMessage. Это не из этой оперы? Кажется, что-то аналогичное. |
|
Back to top |
|
|
|