Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Сообщение

Varg


Архифлеймер

Зарегистрирован:
18 February 2005
Сообщения: 2733
Примеры кода: 0
 

Дочернее окно внутри стороннего приложения

15 October 2007 10:10  


если форму надо встроить как контрол в другое окно, то как вариант, можно сделать следующее:
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

public partial class MainForm : Form
{
    public MainForm()
    {
        this.Menu = new MainMenu(new MenuItem[] {
			  	 new MenuItem("Trace", new EventHandler(Trace)),
			});
    }

    private void Trace(object sender, EventArgs e)
    {
        IChildFormProxy cfa = new ChildFormProxy();
        cfa.SetParent(this.Handle);
    }
}

public interface IChildFormProxy
{
    void SetParent(IntPtr hwnd);
}

public class Win32Window : IWin32Window
{
    public Win32Window(IntPtr hwnd)
    {
        _Handle = hwnd;
    }
    public IntPtr Handle
    {
        get { return _Handle; }
    }
    private IntPtr _Handle;
}

public class ChildFormProxy : IChildFormProxy
{
    public void SetParent(IntPtr hwnd)
    {
        ChildForm cf = new ChildForm(hwnd);
        cf.Show();
    }
}

public class ChildForm : Form
{
    public ChildForm(IntPtr parentHwnd)
    {
        this.FormBorderStyle = FormBorderStyle.FixedSingle;
        this.ControlBox = false;
        this.TopLevel = false;
        this.BackColor = System.Drawing.Color.Red;
        _ParentHwnd = parentHwnd;
    }
    private IntPtr _ParentHwnd;

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.Parent = _ParentHwnd;
            return cp;
        }
    }
}



если parentHwnd будет передавать в форму не через конструктор, то надо вызвать метод RecreateHandle, см. здесь.



Данное сообщение получено с сайта GotDotNet.RU
Последний раз редактировалось 15 October 2007 10:10
Наверх
  



Winforms

 Дочернее окно внутри стороннего приложенияFeddmiser  14 October 2007 11:00
 Дочернее окно внутри стороннего приложенияVarg  14 October 2007 17:45
 Дочернее окно внутри стороннего приложенияgaidar  14 October 2007 15:08
 Дочернее окно внутри стороннего приложенияFeddmiser  14 October 2007 16:29
 Дочернее окно внутри стороннего приложенияVarg  14 October 2007 18:06
 Дочернее окно внутри стороннего приложенияFeddmiser  15 October 2007 02:45
 Дочернее окно внутри стороннего приложенияVarg  15 October 2007 10:10
 Дочернее окно внутри стороннего приложенияVarg  15 October 2007 09:56
 Дочернее окно внутри стороннего приложенияFeddmiser  18 October 2007 11:23
 Дочернее окно внутри стороннего приложенияFeddmiser  19 October 2007 15:30
 Дочернее окно внутри стороннего приложенияДимон  15 October 2007 10:04
 
Наш Киев

Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта