Возможно ли управлять размером контрола внтури диалога? Допустим я хочу менять размер контрола CListBox внутри диалога (не сам диалог!) путем "хватания" контрола за край мышой и перемещения мыши.
Возможно ли это сделать ? Приложение пишется на MFC
Мне кажется надо отлавливать OnMouseMove, OnMouseDown, OnMouseUp.
Может у кого примерчик есть
Resize a control inside a dialog
-
- Уже с Приветом
- Posts: 2013
- Joined: 16 Mar 2002 10:01
- Location: New York City
-
- Уже с Приветом
- Posts: 2264
- Joined: 17 Jun 2003 04:41
- Location: Just like US
-
- Уже с Приветом
- Posts: 2013
- Joined: 16 Mar 2002 10:01
- Location: New York City
да обычно так и делают. Но у меня необычная ситуация. У меня на диалоге три лист бокса. Один под другим. Мне в какие то моменты надо сделать один лист бокс побольше, соотвественно другие два должно пропорциально уменьшить свой размер. Типа того.. Но размер диалога при этом должен оставатся неизменным.
Если бы я знал что так нужно будет. я бы с самого начала использовал CSplitterView, однако сейчас поздно пить боржоми
Если бы я знал что так нужно будет. я бы с самого начала использовал CSplitterView, однако сейчас поздно пить боржоми
-
- Уже с Приветом
- Posts: 17340
- Joined: 28 Jun 2000 09:01
-
- Уже с Приветом
- Posts: 2013
- Joined: 16 Mar 2002 10:01
- Location: New York City
Zuk wrote:идея правильная -мышкины события и перерисовывать. Курсор ручками менять и тд..
примерчик - поищите на codeproejct и прочих..
там идей не так много, надо аккуратно сделать в основном
Да так и делаю. Столкнулся с такими проблемами.
1. События OnMouseMove и тому подобное посылаются диалогу только когда курсор находится НЕ в клиентской части лист бокса. Для этого приходится прямо прямо перед тем как курсор попадает на лист бокс делать SetCapture() чтобы сообщения продолжали поступать в главный диалог, а не в лист бокс.
ReleaseCapture() надо делать тоже аккуратно и вовремя.
2. Такая проблема (никак не пойму почему). При инициализации диалога снимаю размеры лист бокса через GetWindowRect (). Как только приходит пора изменять размер лист бокса в обработчике OnMouseMove, то размеры оказываются почему немного другими.
-
- Уже с Приветом
- Posts: 2264
- Joined: 17 Jun 2003 04:41
- Location: Just like US
Мне кажется без добавления дополнительных контролей (что-то типа контроля splitter), за которые вы будете делать drag-and-drop у вас получится макаронный код. Добавление таких контролей решило бы вашу первую проблему.
Вторая проблема возникает, по-моему, из-за того, что вы снимаете размеры не во время, когда контроли уже прорисованы (OnActivate), а во время их инициализации (OnLoad). Точнее трудно понять.
Вторая проблема возникает, по-моему, из-за того, что вы снимаете размеры не во время, когда контроли уже прорисованы (OnActivate), а во время их инициализации (OnLoad). Точнее трудно понять.
...а мы такой компанией, возьмем, да и припремся к Элис!
-
- Уже с Приветом
- Posts: 2013
- Joined: 16 Mar 2002 10:01
- Location: New York City
Мне кажется без добавления дополнительных контролей (что-то типа контроля splitter), за которые вы будете делать drag-and-drop у вас получится макаронный код. Добавление таких контролей решило бы вашу первую проблему.
согласен. Уже вижу что плоховато, все через одно место. А как добавить сплиттеры в диалог?
Вторая проблема возникает, по-моему, из-за того, что вы снимаете размеры не во время, когда контроли уже прорисованы (OnActivate), а во время их инициализации (OnLoad). Точнее трудно понять.
я на момент инициализации делаю так
RECT rect;
rect.left = 707;
rect.top = 25;
rect.right = 1192;
rect.bottom = 795;
m_editStory.MoveWindow(&rect,1);
На момент отлавливания движений мыши вижу что левый край контрола почему то имеет координату 749 (!) а не 707 которую я указал. Очень странно
координаты снимаю через GetWindowRect ()
-
- Уже с Приветом
- Posts: 2013
- Joined: 16 Mar 2002 10:01
- Location: New York City
-
- Уже с Приветом
- Posts: 2264
- Joined: 17 Jun 2003 04:41
- Location: Just like US