Создание плавающих инструментальных палитр в стиле Photoshop - PullRequest
2 голосов
/ 09 июля 2010

Есть предложения о том, как создать плавающую палитру инструментов в стиле Photoshop? Я пробовал несколько идей, таких как:

  1. Создание дочернего окна, установка его FormBorderStyle в FixedToolWindow и показ его как дочернего элемента основной формы, но окно инструмента крадет фокус из основной формы.
  2. Создание дочернего окна, как описано выше, и использование различных комбинаций флагов, передаваемых в CreateParams, но все еще сталкивающихся с теми же проблемами фокуса.
  3. Создание палитры инструментов в виде UserControl и «плавание» путем установки его родителя в качестве рабочего стола (с помощью функции user32 # SetParent), но тогда он больше не является дочерним элементом основной формы и не минимизирует / восстанавливает с основной формой.

Я думаю, что # 3 - это путь, и мне нужно написать код, чтобы синхронизировать состояние окна палитры инструментов с основной формой, а также реализовать возможность перетаскивания палитры, рисовать границы и т.д ...

Предложения о лучших способах решения этой проблемы?

1 Ответ

0 голосов
/ 10 июля 2010

Мне известен только один способ сделать это, но он ограничивает вас дочерними формами, которые не могут оставить родительскую форму, как в Photoshop. Переопределите CreateParams в дочерней форме:

const int WS_EX_NOACTIVATE = 0x8000000;
const int WS_CHILD = 0x40000000;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams ret = base.CreateParams;
        ret.Style |= WS_CHILD;
        ret.ExStyle |= WS_EX_NOACTIVATE;
        return ret;
    }
}

Убедитесь, что при вызове Show в дочерней форме вы используете перегрузку, которая принимает IWin32Window и передает родительский элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...