Стиль Chrome приложения C#?

Насколько мне известно, ваше решение не очень хорошее

Мое решение

Просто я изменяю ваши данные следующим образом

[115 ] enter image description here

Теперь я вижу, что это отношение находится в 0-й нормальной форме

Так что удалите столбец имени и создайте новое отношение, как показано ниже

[ 116] enter image description here

Теперь отношение клиента находится в

  • 1-й нормальной форме, потому что нет многозначной
  • 2-й нормальной формы, потому что нет частичных зависимостей [ 1111]
  • 3-я нормальная форма, потому что содержит только столбцы, которые не являются транзитивно зависимыми от первичного ключа

Отношение покупателя такое же, но оно все еще находится в 0-й нормальной форме [117 ] enter image description here

Теперь я удаляю столбец купил_сайт из отношения покупателя и создаю новое отношение, как показано ниже enter image description here

Теперь приобретенное отношение находится в

  • 1-я нормальная форма, потому что нет многозначной
  • 2-я нормальная форма, потому что нет частичной зависимости Это
  • 3-я нормальная форма, поскольку содержит только столбцы, которые не являются транзитивно зависимыми

Так что теперь я обновляю отношение покупателя, как показано ниже enter image description here [ 1130]

и ID, и Item_ID являются первичными ключами (составной первичный ключ)

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

Окончательные отношения:

  • Клиент ( ID , Имя)
  • Закупленные_элементы ( Item_ID , Item_Name)
  • [1118 ] Shopper ( Customer_ID, Item_ID )

Мой плохой, я забыл специально упомянуть, что в нормализации мы не можем добавить новый атрибут или удалить атрибуты . Так что здесь я просто изменяю ваше отношение к данным только на более понятное отношение. Спасибо @Mike Sherrill 'Cat Recall за указание на эту проблему.

14
задан Kredns 12 May 2010 в 18:36
поделиться

4 ответа

Необходимо сделать некоторый Win32 interop для достижения того эффекта. В зависимости от того, используете ли Вы Winforms или WPF, способ, которым Вы сцепляетесь с обработкой сообщения, отличается (я не помню Winforms, таким образом, я дам все примеры для WPF). Но в обоих случаях, Вы должны:

  1. Прерывание создание окна и изменяют стили окна и расширенные стили. В WPF необходимо наследоваться от [1 112] HwndSource и изменить HwndSourceParameters для достижения этого. Вам нужны WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS и WS_VISIBLE для регулярного стиля и WS_EX_WINDOWEDGE и расширенных стилей WS_EX_APPWINDOW.

  2. Добавляют обработчика сообщений через него параметры HwndSource HwndSourceHook.

  3. В сообщении proc добавленный через рычаг на шаге два, необходимо обработать несколько сообщений:

    • WM_NCACTIVATE - для изменения рисования заголовка, когда приложение активируется или не
    • WM_NCCALCSIZE - для возврата к ОС, что у Вас нет неклиентских областей
    • WM_NCPAINT - в целом, Вам нужно к invaldate, окно реагирует только здесь, WPF будет заботиться о фактическом рисовании)
    • WM_NCHITTEST - для обработки перемещения окна, уменьшения и максимизации.
  4. , После того как Вы делаете вышеупомянутое, Ваша клиентская область, куда WPF собирается нарисовать Ваше визуальное дерево, собирается охватить целую область окна. Необходимо будет добавить "non-cliet" зрительный ряд так, чтобы приложение было похоже на регулярное применение пользователю.

  5. Вам, возможно, понадобились бы еще несколько сообщений:

    • WM_THEMECHANGED , если Вы хотите изменить свое "неклиентское" рисование области, чтобы согласовываться с темой ОС
    • WM_DWMCOMPOSITIONCHANGED , если Вы хотите расширить стекло и получить стандартное рисование стекла NC ОС, когда стекло включено и переключатель к Вашей пользовательской логике, когда стекло не.
  6. Вы могли бы хотеть посмотреть на API Темы Win32, если Вы хотите, идут, заставляют стандартные активы Win32 для границ, подписи, близко, mininmize и кнопок развертывания окна использовать в Вашем 'неклиенте" область.

  7. , Если Вы хотите расширить Стекло в свое окно, можно посмотреть на:

    • DwmExtendFrameIntoClientArea - чтобы заставить стандартную стеклянную область NC
    • DwmDefWindowProc - заставлять среду рабочего стола красить Стекло и стандартные средства управления NC
    • DwmIsCompositionEnabled - чтобы определить, включено ли Стекло; можно использовать вышеупомянутые два API только, когда Стекло включено. Если Стекло не включено, необходимо сделать собственный рисунок области NC.

можно найти надлежащие определения C# всех сообщений, стилей и соответствующих API Win32, в которых Вы нуждаетесь на [1 123] P/Invoke.

Вы могли также достигнуть подобного эффекта при помощи стандартного окна WPF с WindowStyle=none. Однако будут некоторые различия между поведением рабочего стола к Вашему приложению и другими приложениями; самый очевидный из них то, что Вы не сможете сложить или разместить Ваше окно рядом путем щелчка правой кнопкой по панели задач.

можно также изучить некоторые сторонние компоненты, которые добавляют часть этой функциональности. Я не использовал никого (как Вы видите, я не боюсь Win32 interop :-)), таким образом, я не могу рекомендовать Вам никакой конкретный.

22
ответ дан 1 December 2019 в 06:59
поделиться

У Joe Castro, разработчика команды продукта WPF, есть проект галереи кода MSDN, названный "WPF Chrome", который может использоваться для создания офиса подобный 2007 UI (т.е.: средства управления, которые охватывают и клиент и неклиентские области окна).

Находят его здесь: http://code.msdn.microsoft.com/chrome

8
ответ дан 1 December 2019 в 06:59
поделиться

Как упоминания Franci, что Вы хотите, DwmExtendFrameIntoClientArea. Вот пример от Codeproject, который показывает, как сделать это.

http://www.codeproject.com/KB/dialog/AeroNonClientAreaButtons.aspx

8
ответ дан 1 December 2019 в 06:59
поделиться

Я использовал комплект управления DotNetBar с хорошим успехом.

2
ответ дан 1 December 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: