Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Изменить размеры листера
Goto page Previous  1, 2, 3  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Написание плагинов для Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Worros



Joined: 19 Jan 2007
Posts: 1123

Post (Separately) Posted: Thu Jan 15, 2009 00:56    Post subject: Reply with quote

VadiMGP wrote:
Попробуй перед уходом в полноэкранный сохранить хэндл от меню - GetMenu(), а после возврата восстановить его через SetMenu().

Помогает, но только в сочетании с WS_OVERLAPPEDWINDOW.
При WS_BORDER | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX |WS_VISIBLE меню не отображается. А от WS_OVERLAPAPDWINDOW другой побочный эффект, не перерисовывается открывшаяся по сторонам уменьшившегося окна область.
И бордер ни в какую не желает пропадать.
Back to top
View user's profile Send private message
VadiMGP



Joined: 21 Mar 2007
Posts: 1625

Post (Separately) Posted: Thu Jan 15, 2009 01:11    Post subject: Reply with quote

Ну тогда остается только залп из всех орудий. Сначала сохраняешь все стили (обычные и расширенные) и меню. Потом высекаешь заголовок и уходишь на весь экран. По возвращении восстанавливаешь все, что сохранял.
Back to top
View user's profile Send private message
Worros



Joined: 19 Jan 2007
Posts: 1123

Post (Separately) Posted: Thu Jan 15, 2009 01:13    Post subject: Reply with quote

Спасибо, попробую.
Back to top
View user's profile Send private message
Worros



Joined: 19 Jan 2007
Posts: 1123

Post (Separately) Posted: Fri Jan 16, 2009 15:14    Post subject: Reply with quote

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
View user's profile Send private message
VadiMGP



Joined: 21 Mar 2007
Posts: 1625

Post (Separately) Posted: Fri Jan 16, 2009 15:39    Post subject: Reply with quote

Ну тогда не знаю. Наверно надо искать принципиально другие пути. Возможно, временно у своего окна убирать стиль WS_CHILD и показывать его на весь экран. Кстати, напиши автору Imagine - он же это как-то делает, хотя тоже немного коряво.
Back to top
View user's profile Send private message
Worros



Joined: 19 Jan 2007
Posts: 1123

Post (Separately) Posted: Fri Jan 16, 2009 16:16    Post subject: Reply with quote

WS_CHILD убрать? пробовал. Сразу отвалились все хоткеи.
Их и сейчас, похоже, mplayer прихватывает, только нерегулярно как то Shocked
Автор Imagine вроде корейско-корявоанглоязычный? У меня с этим проблемы.Мой английский еще хуже. Да, кстати, коряво.
/offtop
Я только сейчас начал понимать, почему он не синхронизировал fittowindow в своем плагине с листером. Какая жуткая логика у ListSendCommand Sad
Back to top
View user's profile Send private message
VadiMGP



Joined: 21 Mar 2007
Posts: 1625

Post (Separately) Posted: Fri Jan 16, 2009 18:28    Post subject: Reply with quote

Worros wrote:
WS_CHILD убрать? пробовал. Сразу отвалились все хоткеи.
Можно попробовать вручную пересылать все WM_KEYDOWN и WM_KEYUP в окно листера.
А вообще вырисовывается главный вопрос - сколько времени/сил ты готов угрохать на то, чтобы убрать этот треклятый заголовок и рамочку? Оно того стоит?
Back to top
View user's profile Send private message
Worros



Joined: 19 Jan 2007
Posts: 1123

Post (Separately) Posted: Fri Jan 16, 2009 19:15    Post subject: Reply with quote

VadiMGP wrote:
Worros wrote:
WS_CHILD убрать? пробовал. Сразу отвалились все хоткеи.
Можно попробовать вручную пересылать все WM_KEYDOWN и WM_KEYUP в окно листера.
А вообще вырисовывается главный вопрос - сколько времени/сил ты готов угрохать на то, чтобы убрать этот треклятый заголовок и рамочку? Оно того стоит?

Понятно, неутешительно. Не стоит наверное. Спасибо за советы.
Back to top
View user's profile Send private message
Worros



Joined: 19 Jan 2007
Posts: 1123

Post (Separately) Posted: Sat Feb 21, 2009 08:01    Post subject: Reply with quote

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
View user's profile Send private message
Worros



Joined: 19 Jan 2007
Posts: 1123

Post (Separately) Posted: Mon Mar 09, 2009 02:14    Post subject: Reply with quote

Отправляю из отдельного потока
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);

Отслеживаю в пошаговой отладке. Одна эта строчка выполняется несколько секунд на весьма неслабом компе Shocked
В чем может быть моя ошибка?
P.S. VS2003
Back to top
View user's profile Send private message
Worros



Joined: 19 Jan 2007
Posts: 1123

Post (Separately) Posted: Mon Mar 09, 2009 02:55    Post subject: Reply with quote

И даже такая строчка
Code:
MoveWindow(gp->DataForThread.ListerWin,20,20,gp->DataForThread.naturewidth,gp->DataForThread.natureheight,true);
тоже. Та же строчка выполняется мгновенно из ListLoad. Значит плавающая запятая точно не при чем, а у меня проблемы с межпоточным взаимодействием. Но что именно? Я не понимаю Shocked
Back to top
View user's profile Send private message
VadiMGP



Joined: 21 Mar 2007
Posts: 1625

Post (Separately) Posted: Mon Mar 09, 2009 02:56    Post subject: Reply with quote

Worros wrote:
Отслеживаю в пошаговой отладке.
А сколько времени эта строчка выполняется без пошаговой отладки? Если задержка только в дебаггере, то плюнь. Известны заморочки дебаггера при переключении контекста потоков.
Если же она и в самом деле долго выполняется, то разбивай на более простые действия и хронометрируй их. Так и найдешь кто там такой задумчивый.

Кстати, почему ты работаешь с VS2003? По-моему это сплошное недоразумение, а не среда работы. Я через неделю снес его к чертовой матери. VS2005 меня тоже порядком разочаровал. Вот VS2008 с SP1 у меня прижился.
Back to top
View user's profile Send private message
Worros



Joined: 19 Jan 2007
Posts: 1123

Post (Separately) Posted: Mon Mar 09, 2009 03:03    Post subject: Reply with quote

VadiMGP wrote:
А сколько времени эта строчка выполняется без пошаговой отладки?
Столько же. Секунды. Я в отладку и полез потому, что тормоза заметны на глаз и сильно напрягают.
VadiMGP wrote:
Если же она и в самом деле долго выполняется, то разбивай на более простые действия и хронометрируй их. Так и найдешь кто там такой задумчивый.
Где прочитать, как это делается? Я не умею.
VadiMGP wrote:
Кстати, почему ты работаешь с VS2003? По-моему это сплошное недоразумение, а не среда работы. Я через неделю снес его к чертовой матери. VS2005 меня тоже порядком разочаровал. Вот VS2008 с SP1 у меня прижился.
IDE удобнее, чем у VC6 , и в то же время разница между ними не столь велика. Поэтому работаю над проектом в VC7.1, а выкладываемые паблик релизы компилирую в шестерке (код компактнее).
Back to top
View user's profile Send private message
Worros



Joined: 19 Jan 2007
Posts: 1123

Post (Separately) Posted: Mon Mar 09, 2009 03:07    Post subject: Reply with quote

У меня есть кое-какие подозрения.
Вот такой кусок кода не имеет отношения к делу?

В отдельном потоке
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
View user's profile Send private message
Worros



Joined: 19 Jan 2007
Posts: 1123

Post (Separately) Posted: Mon Mar 09, 2009 03:10    Post subject: Reply with quote

И еще, я припоминаю рекомендацию не посылать из потока SendMessage рабочему окну, а использовать исключительно PostMessage. Это не из этой оперы? Кажется, что-то аналогичное.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Написание плагинов для Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3  Next
Page 2 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group