Заголовок окна
От: Кока  
Дата: 27.04.04 21:39
Оценка:
Собственно, как сделать свой заголовок окна?
Re: Заголовок окна
От: Yuri Россия http://spbdetails.ru
Дата: 28.04.04 10:18
Оценка:
Здравствуйте, Кока, Вы писали:

К>Собственно, как сделать свой заголовок окна?


Не понял, какого окна? Если обычной формы, то за это отвечает св-во Text.
Take it easy.
Re[2]: Заголовок окна
От: Кока  
Дата: 28.04.04 16:39
Оценка:
Здравствуйте, Yuri, Вы писали:

Y>Здравствуйте, Кока, Вы писали:


К>>Собственно, как сделать свой заголовок окна?


Y>Не понял, какого окна? Если обычной формы, то за это отвечает св-во Text.


Да, формы. Но не текст, а нарисовать свой.
Re[3]: Заголовок окна
От: Yuri Россия http://spbdetails.ru
Дата: 28.04.04 17:32
Оценка:
Здравствуйте, Кока, Вы писали:

К>Да, формы. Но не текст, а нарисовать свой.


ну я бы создал свой контрол для заголовка, в нем нарисовал бы все, что нужно — и положил бы его на форму
Take it easy.
Re[4]: Заголовок окна
От: Кока  
Дата: 28.04.04 17:42
Оценка:
Здравствуйте, Yuri, Вы писали:

Y>Здравствуйте, Кока, Вы писали:


К>>Да, формы. Но не текст, а нарисовать свой.


Y>ну я бы создал свой контрол для заголовка, в нем нарисовал бы все, что нужно — и положил бы его на форму



А как при клике на этом контроле, послать то сообщене, которое приходит при клике на заголовке?
Re: Заголовок окна
От: Ael США  
Дата: 29.04.04 07:34
Оценка:
Здравствуйте, Кока, Вы писали:

К>Собственно, как сделать свой заголовок окна?


Посмотрите вот такой пример — если сделаете проще, расскажите как.

    public class MyTitle:Panel
    {
        public MyTitle(int width, int height){
            
            using (Bitmap bmpTemp=new Bitmap(@"c:\windows\soap bubbles.bmp"))
            {
                this.BackgroundImage=new Bitmap(bmpTemp,new Size(width,height));
            }
            this.Width=width;
            this.Height=height;
            Button btnClose=new Button();
            btnClose.Bounds=new Rectangle(width-40,2,35,this.Height-5);
            btnClose.Parent=this;
            btnClose.ForeColor=Color.Red;
            btnClose.TextAlign=ContentAlignment.MiddleCenter;
            btnClose.Text="Exit";
            btnClose.Click+=new EventHandler(btnClose_Click);
        }
        private int xPrev=0,yPrev=0;
        protected override void OnMouseMove(MouseEventArgs e)
        {
           Point ptScreen;
           int eX,eY;
            if(e.Button==MouseButtons.Left)
            {
                ptScreen=this.PointToScreen(new Point(e.X,e.Y));
                eX=ptScreen.X;eY=ptScreen.Y;
                if (!(xPrev==0&&yPrev==0))
                {
                        this.Parent.Location=new Point(this.Parent.Location.X+eX-xPrev,
                        this.Parent.Location.Y+eY-yPrev);
                }
                  xPrev=eX;yPrev=eY;
                }
                       base.OnMouseMove (e);
        }
        const int WM_CLOSE=16;
        private void btnClose_Click(object sender, EventArgs e)
        {
            Message msg=Message.Create(this.Parent.Handle,WM_CLOSE,IntPtr.Zero,IntPtr.Zero);
            this.WndProc(ref msg);
        }
    }

А вот как я им пользовался:
.................................

public Form1()
        {
            this.Bounds=new Rectangle(50,50,400,300);
            this.FormBorderStyle=FormBorderStyle.None;
            mt=new MyTitle(this.Width,30);
            mt.Parent=this;
        }
Re[2]: Заголовок окна
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 30.04.04 20:17
Оценка: 2 (1)
Здравствуйте, Ael, Вы писали:

Ael>Посмотрите вот такой пример — если сделаете проще, расскажите как.


Почитай про WM_NCHITTEST
... << RSDN@Home 1.1.3 beta 2 (mobile station) >>
AVK Blog
Re[3]: Заголовок окна
От: Ael США  
Дата: 02.05.04 18:47
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Ael, Вы писали:


Ael>>Посмотрите вот такой пример — если сделаете проще, расскажите как.


AVK>Почитай про WM_NCHITTEST


Другими словами, ты предлагаешь вместо обработки OnMouseMove, в котором я синхронно перемещаю форму, на которой расположен этот контрол-заголовок, примерно следующее, правильно?:

                const int WM_NCHITTEST = 0x0084;
        const int HTCAPTION = 2;
        protected override void WndProc(ref Message msg) {
            if (msg.Msg == WM_NCHITTEST)  { 
                msg.Result = (IntPtr)HTCAPTION;  
                return; 
            }  
            base.WndProc (ref msg);
        }

Так я так вначале и сделал, но в этом случае передвигается сам контрол-заголовок, а не вся форма вместе с этим контролом на ней. Может msg.Result нужно присваивать не HTCAPTION?
Re[4]: Заголовок окна
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.05.04 15:26
Оценка: 2 (1)
Здравствуйте, Ael, Вы писали:

Ael>Так я так вначале и сделал, но в этом случае передвигается сам контрол-заголовок, а не вся форма вместе с этим контролом на ней. Может msg.Result нужно присваивать не HTCAPTION?


Так надо не для контрола, а для самой формы.
... << RSDN@Home 1.1.3 beta 2 (mobile station) >>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.