Здравствуйте, kliff, Вы писали:
K>Короче подытожив — SetCapture() не опасен, надо просто знать как его готовить.
Ну, скажем, у меня не придумалось контрпримеров Факт тот, что SetCapture имеет смысл юзать только тогда, когда мы можем как-то корректно обработать потерю захвата.
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>Здравствуйте, kliff, Вы писали:
K>>Короче подытожив — SetCapture() не опасен, надо просто знать как его готовить. SM>Ну, скажем, у меня не придумалось контрпримеров Факт тот, что SetCapture имеет смысл юзать только тогда, когда мы можем как-то корректно обработать потерю захвата.
Во всех случаях, когда вообще удастся юзать SetCapture, потерю захвата можно отработать корректно. А использовать хуки имеет смысл только тогда, когда других средств нет (ну, не совсем — таймеры иногда еще хуже).
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, kliff, Вы писали:
K>Здравствуйте, Slicer [Mirkwood], Вы писали:
S>>>Что такое Desktop Toys? В принципе, понятно что это какой-то твикер десктопа, но что конкретно оно делает? SM>>Какая разница, скачать хочешь? Например, держишь левую кнопку и расстреливаешь десктоп из пулемета. Хотя, боюсь, опять не вполне корректный пример. Он, вроде, морозит десктоп на время выполнения. SM>>Ну и ладно, может, и правда это я загнул. Снимаю с рассмотрения этот пункт, про длительное отслеживание.
K>Прммер отслеживания при котором не стоит применять SetCapture — тебе надо отследить выход мыши за область окна — типа самому написать TrackMouseEvents().
Слово "не стоит" здесь неуместно — SetCapture там просто не применишь
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
S>Во всех случаях, когда вообще удастся юзать SetCapture, потерю захвата можно отработать корректно. А использовать хуки имеет смысл только тогда, когда других средств нет (ну, не совсем — таймеры иногда еще хуже).
А чем таймеры хуже ?
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Hello, AndrewJD!
You wrote on Mon, 01 Dec 2003 17:39:55 GMT:
S>> Во всех случаях, когда вообще удастся юзать SetCapture, потерю захвата S>> можно отработать корректно. А использовать хуки имеет смысл только S>> тогда, когда других средств нет (ну, не совсем — таймеры иногда еще S>> хуже).
A> А чем таймеры хуже ?
Отлажавать сильно мешают Ну и просто неэстетичны — как, впрочем, и хуки.
Best regards,
Sergey.
Posted via RSDN NNTP Server 1.8 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>Ну так хватай WM_NCPAINT... и заодно WM_NCHITTEST. SM>Никакую максимизацию и т.п. менять не придется, только переопределить, где лежат в заголовке разные элементы. Но, откровенно говоря, я как-то немного с этим поэкспериментировал, и, помнится, то ли мерцание было, то ли еще что-то... SM>Оно и понятно — например, поток-владелец окна повис, а система ведь все равно рисует заголовок, видели, наверное? То есть есть еще кто-то помимо DefWindowProc, кто отрисовывает non-client area. SM>Кстати, коллеги, не просвятите, кто это и как с ним договориться, чтобы он поумерил активность?
SM>Slicer
Именно DefWindowProc и перерисовывает caption и всю non-client area. Я справился с этой проблемой просто: по событиям WM_NCPAINT и WM_NCACTIVATE рисую всю non-client area, включая титл и кнопки с иконкой на нем, возвращаю true, не вызывая DefWindowProc.
rc2 — это RECT который хранит размеры окна. (Хех, ща подумал, что rc2.left и rc2.top всегда равны нулю... нахрена я их вписывал...)
Это далеко не образец для подражания. Я с удовольствием выслушаю гораздо более лудшие предложения. Ведь бордер окна юзверь может изменить и тогда получаем глюк с отрисовкой...
Но проблема полностью таким способом не решается, т.к.
1. при клике на титле отрисовываются старые кнопки с голубой рамочкой.
2. нарисоваными кнопками еще рулить надо.
Ето значит, что в бой вступают WM_NCLBUTTONDOWN, WM_NCRBUTTONDOWN и WM_NCMOUSEMOVE и свой обработчик для перемещения окна...
Вот с последним я пока не справился. Не хочу делать SetCapture для окна и двигать его по WM_MOUSEMOVE. Хочу поручить перемещение окна винде.
1) А разве не достаточно будет перехватить WM_NCHITTEST и никогда не возвращать нахождение мыши над одной из стд. кнопок? А своими рулить вроде как не очень проблемно
2) Насчет перерисовки — оплошал Мне потом свои люди объяснили, что в MFC за non-client сообщения, если не определить свой обработчик, отвечает каркас (в отдельном потоке — потому и не висит). А если написать тестовое приложение на API, лекго убедиться, что налицо полное равноправие
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>1) А разве не достаточно будет перехватить WM_NCHITTEST и никогда не возвращать нахождение мыши над одной из стд. кнопок? А своими рулить вроде как не очень проблемно
SM>2) Насчет перерисовки — оплошал Мне потом свои люди объяснили, что в MFC за non-client сообщения, если не определить свой обработчик, отвечает каркас (в отдельном потоке — потому и не висит). А если написать тестовое приложение на API, лекго убедиться, что налицо полное равноправие
SM>Slicer
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>2) Насчет перерисовки — оплошал Мне потом свои люди объяснили, что в MFC за non-client сообщения, если не определить свой обработчик, отвечает каркас (в отдельном потоке — потому и не висит). А если написать тестовое приложение на API, лекго убедиться, что налицо полное равноправие
Я не использую MFC.
Интересно, так можно всетаки сделать так, чтобы не перерисоваывая non-client, перерисовать caption и кнопки на нем? Я так и не нашел как это сделать. Один хрен caption стандартный рисуется, а поверх него уже свой... и получаем мигание... Что не есть хорошо...