как сделать так, чтобы форма, не имеющая стандартных окон, выглядела как C # - PullRequest
1 голос
/ 10 декабря 2010

Надеюсь, в этом есть смысл ...

Это относится не только к c #, но именно для этого мы и делаем, поэтому я пометил это

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

Спасибо, если вы понимаете, какого черта я говорю.

Ответы [ 3 ]

1 голос
/ 10 декабря 2010

Официальный способ сделать это - обработать сообщение WM_NCPAINT , которое Windows отправляет в ваше окно, когда хочет, чтобы вы нарисовали не-клиентскую область формы (строка заголовка, кнопка закрытия, границы,и т. д.) Это может быть довольно хлопотно, но в этом нет необходимости.Скотт предложил способ получить окно WPF без полей, и подход Windows Forms аналогичен.Обратитесь к свойству FormBorderStyle.

Для поддержки перетаскивания окна, как если бы перетаскивалась строка заголовка, вам необходимо отправить сообщение WM_NCLBUTTONDOWN в окно, передающее HT_CAPTION.константа как wParam.

Например, обработайте событие MouseDown для элемента управления, который нужно «перетаскивать».

if (e.Button == MouseButtons.Left) {
    SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}

Для этого требуются следующие объявления P / Invoke.

const int WM_NCLBUTTONDOWN = 0xA1;
const int HT_CAPTION = 0x2;

[DllImportAttribute("user32.dll")]
static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

Наконец, чтобы получить непрямоугольное окно, вам нужно взглянуть на свойство Region .Вы можете назначить непрямоугольную область для формы, и она будет вырезана в этой области.

0 голосов
/ 10 декабря 2010

Хотя в предыдущем ответе говорилось, что вы можете сделать это с помощью WPF, вы можете сделать это с помощью Windows Forms.

Создание непрямоугольных форм Windows.Вот как .

0 голосов
/ 10 декабря 2010

Вы можете сделать это с WPF.

  1. Создать окно WPF
  2. Window.WindowStyle = "WindowStyle.None"
  3. Window.AllowsTransparency = "True"
  4. Window.Background =" Transparent "

Это дает вам прозрачный Window.Затем вставьте Ellipse в Window:

<Ellipse Height="80" Width="80" Fill="White"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...