С помощью WPF и XAML окну можно придать любую форму. Любое изображение любой формы можно сделать окном программы. Изображение должно иметь формат png, его фон должен быть прозрачным.
Это легко сделать в Photoshop.
1. Взять любое изображение, выделить на нем фрагмент, который будет окном нашей программы.
2. Создать новое изображение, обязательно установить галочку "Прозрачность" (Transparency).
3. Перетащить на новое изображение выделенный фрагмент.
4. Сохранить в формате png
Далее в Visual Studio (2008+) создаем новый WPF проект. XAML-описание главного окна программы должно содержать примерно следующее:
<window title="ShapedWindow" windowstartuplocation="CenterScreen"
allowstransparency="True" opacitymask="White" windowstyle="None"
background="Transparent" width="620" height="267"
xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
x:class="ShapedWPFForm.ShapedWindow">
<grid>
<img name="imgBackground" source="Shape.png" stretch="Fill" />
</grid>
</window>
Все. Особое внимание уделяем выделенным курсивом фрагментам. Если при компиляции будут возникать ошибки - меняем "allowstransparency" на "AllowsTransparency" или "img" на "Image" и так далее в том же духе )))
Небольшой простой пример, как сделать окно программы или кнопку круглыми. Для WinForms
private void Form1_Load(object sender, EventArgs e)
{
//Делаем форму круглой
System.Drawing.Drawing2D.GraphicsPath Form_Path=new System.Drawing.Drawing2D.GraphicsPath();
Form_Path.AddEllipse(0, 0, this.Width, this.Height);
Region Form_Region = new Region(Form_Path);
this.Region = Form_Region;
//Делаем кнопку круглой
System.Drawing.Drawing2D.GraphicsPath Button_Path=new System.Drawing.Drawing2D.GraphicsPath();
Button_Path.AddEllipse(0, 0, this.button1.Width, this.button1.Height);
Region Button_Region = new Region(Button_Path);
this.button1.Region = Button_Region;
}