«Панель быстрого доступа» для окна winforms? - PullRequest
0 голосов
/ 16 ноября 2010

Для небольшой программы, которую я разрабатываю, я решил, что лучше всего реализовать панель быстрого доступа (например, те, которые поставляются с элементами управления ленты (Office 2007, 2010?)).Теперь моя проблема в том, что я не могу найти бесплатный элемент управления ленты для winforms, из которого я мог бы извлечь панель инструментов.

В настоящий момент у меня есть псевдо-QAC, но есть проблема рендеринга со стандартной панелью инструментов.

Так может кто-нибудь показать мне хорошую реализацию для этого элемента управления?Он должен быть независимым от ОС.(Никакие не-DWM-только удаления удаляются.)


Для других это мой результат:

В новой форме я добавляю следующий код:

protected override CreateParams CreateParams
{
    get
    {
        var cp = base.CreateParams; // Retrieve the normal parameters.
        cp.Style = 0x40000000 | 0x4000000; // WS_CHILD | WS_CLIPSIBLINGS
        cp.ExStyle &= 0x00080000; // WS_EX_LAYERED
        cp.Parent = GetDesktopWindow(); // Make "GetDesktopWindow()" from your own namespace.
        return cp;
    }
}

А затем поместите набор инструментов в стиле, предоставленном Коди Греем, и я всегда перемещаю эту форму вместе с ее владельцем, и теперь у меня есть панель быстрого доступа!: D

1 Ответ

2 голосов
/ 17 ноября 2010

Из того, что я понял, читая комментарии, вы ищете простой элемент управления панели инструментов, который обеспечивает быстрый способ для пользователя выполнять общие задачи / операции.Однако, в отличие от панели быстрого доступа, включенной в ленту в стиле Microsoft Office, вам не нужно решение, которое требует рисования в области, не являющейся клиентом, поскольку это решение не переносимо.Рисование в области, не являющейся клиентом, требует развертывания полностью настраиваемого окна Chrome, которое не будет работать без проблем во всех версиях Windows (из-за DWM и множества других причин).

Я предложил использоватьСтандартный ToolStrip элемент управления предоставляется в Framework, но вы выразили обеспокоенность тем, что он рисует белую линию под ним, и сказали, что при попытке скрыть эту белую линию, поместив ее внутри панели, выделяется граница (который вы хотите) также покрывается.

Поэтому я предлагаю пару возможных решений:

1. ToolStrip 'Нижняя белая граница отображается только в том случае, если для свойства RenderMode установлено значение «Система».Вместо этого вы можете установить значение «Профессиональный» и изгнать белую линию навсегда, сохраняя эффект затемненной границы при наведении.


2. Если вам не нравится «Профессиональный»«Стиль рендеринга и желание придерживаться« Система », вы можете просто унаследовать от существующего ToolStripSystemRenderer и остановить его от рисования нижней белой границы:

public class CorrectedToolStripRenderer : ToolStripSystemRenderer
{
    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
    {
        //do nothing here
    }
}

А затемпросто установите элемент управления ToolStrip на использование своего пользовательского рендерера, например:

myToolStrip.Renderer = new CorrectedToolStripRenderer();


3. Вы можете реализовать полностью пользовательский рендерер дляToolStrip, полученный непосредственно из базового ToolStripRenderer класса , и определите для себя, как именно вы хотите, чтобы он выглядел.

Например, потому что я ненавижу элементы управления, которые неПохоже на стандартные элементы пользовательского интерфейса Windows, у меня есть пользовательский рендер, который я использую, чтобы меню и панели инструментов во всех моих приложениях WinForms были нарисованы так же, как в ОС.(«Система» не понимает это близко к правде в Vista / 7.) Моя сильно измененная версия этого образца .

Другие (здесь на вас смотрит, Officeкоманда) очень нравится пользовательский интерфейс, и этот способ позволяет вам действительно изо всех сил и соответствовать внешнему виду вашего приложения.Например, вот пользовательские средства визуализации, которые выглядят как Visual Studio 2010 или Office 2007 , чтобы начать работу.Поиск в Google увеличится на несколько тонн.

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