Как получить от листера WM_EXITSIZEMOVE?

Только для тех, кто пишет плагины под Total Commander. Обмен опытом, решение проблем.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
Worros
Сообщения: 1123
Зарегистрирован: Пт янв 19, 2007 18:46

Как получить от листера WM_EXITSIZEMOVE?

Сообщение Worros »

Или любой другой способ вытащить итоговые координаты, полученные по окончании ресайза окошка листера.
Dec
Сообщения: 466
Зарегистрирован: Чт сен 07, 2006 18:56

Re: Как получить от листера WM_EXITSIZEMOVE ?

Сообщение Dec »

Worros писал(а):Или любой другой способ вытащить итоговые координаты, полученные по окончании ресайза окошка листера.
Попробуйте так:

Код: Выделить всё

...
FOldWndProc := SetWindowLong(ListerWindow, GWL_WNDPROC, integer(@NewWindowProc));
...
function NewWindowProc(AWindow: HWND; AMsg: UINT; AWParam: WPARAM; ALParam: LPARAM): LRESULT; stdcall;
var R: TRect;
begin
  FOldWndProc(AWindow, AMsg, AWParam, ALParam);
  if AMsg = WM_EXITSIZEMOVE then
    begin
      GetWindowRect(AWindow, R);
    end;
end;
Worros
Сообщения: 1123
Зарегистрирован: Пт янв 19, 2007 18:46

Сообщение Worros »

Работает, спасибо!
Не знал, что сабклассинг можно так каскадировать.
Worros
Сообщения: 1123
Зарегистрирован: Пт янв 19, 2007 18:46

Сообщение Worros »

Есть проблемы с несколькими экземплярами плагина.
Как выкручиваться?
Dec
Сообщения: 466
Зарегистрирован: Чт сен 07, 2006 18:56

Сообщение Dec »

Worros писал(а):Есть проблемы с несколькими экземплярами плагина.
Как выкручиваться?
Какие проблемы
Worros
Сообщения: 1123
Зарегистрирован: Пт янв 19, 2007 18:46

Сообщение Worros »

У меня NewWindowProc глобальной получилась :( со всеми вытекающими последствиями: исключения так и сыплются, и визуальные артефакты при переключении между окнами листера с плагином.
Dec
Сообщения: 466
Зарегистрирован: Чт сен 07, 2006 18:56

Сообщение Dec »

Среда программирования?
Worros
Сообщения: 1123
Зарегистрирован: Пт янв 19, 2007 18:46

Сообщение Worros »

VS2003
Dec
Сообщения: 466
Зарегистрирован: Чт сен 07, 2006 18:56

Сообщение Dec »

Если скину свой исходник на Delphi, то сможете разобраться?
Worros
Сообщения: 1123
Зарегистрирован: Пт янв 19, 2007 18:46

Сообщение Worros »

Попробую :)
Спасибо заранее. Мыло сброшу в личку.
Worros
Сообщения: 1123
Зарегистрирован: Пт янв 19, 2007 18:46

Сообщение Worros »

Получил, спасибо.

Насколько я понимаю, Delphi позволяет не поморщившись объявить одну оконную процедуру внутри другой. VC такого не допускает. После длительного гугления я нашёл максимум пример того, как после танцев с бубнами можно загнать WNDPROC внутрь класса. Но как этот пример следует привести к моему случаю (WNDPROC внутри WNDPROC) я не понял :( Мне такое не по зубам.
VadiMGP
Сообщения: 1625
Зарегистрирован: Ср мар 21, 2007 20:58

Сообщение VadiMGP »

Worros писал(а):объявить одну оконную процедуру внутри другой.
A зачем это нужно?
Worros
Сообщения: 1123
Зарегистрирован: Пт янв 19, 2007 18:46

Сообщение Worros »

VadiMGP писал(а):
Worros писал(а):объявить одну оконную процедуру внутри другой.
A зачем это нужно?
Да, я поторопился с выводами. Не нужно это. Мне Dec уже объяснил мою ошибку.
Ответить