Najmocniej wszystkim dziękuję za pomoc. Jest jeszcze jeden mały problem, ale o nim za chwilę.
Chciałbym jednak podziękować, że mieliście tyle cierpliwości nad - bądź co bądź - człowiekiem co kręcił nosem, by wszystko było ok :)
Problem rozwiązałem jednak w nieco inny sposób niż proponowaliście. Stworzyłem przezroczysty PictureBox.
Robię to tak:
Class TransPictureBox : Control
{
private Image _image = null;
public Image Image
{
get
{
return _image;
}
set
{
_image = value;
}
}
public TransPictureBox()
{
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
}
protected override void OnPaint(PaintEventArgs pe)
{
if (Image != null)
pe.Graphics.DrawImage(Image, 0, 0);
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x20;
return cp;
}
}
}
I wydaje się, że działa to doskonale. Spójrzcie na obrazek:
http://www19.speedy.sh/vkq7B/download/Bez-nazwy-2.jpg
Niestety, po przesunięciu obrazka (w tym przypadku takiego kalendarzyka) okazuje się, że PictureBox, który stworzyłem działa na zasadzie "kameleona". Dopasowuje się do otoczenia podczas tworzenia, a potem już nie.
I efekt po przesunięciu:
http://www19.speedy.sh/Ubfad/download/Bez-nazwy-1.jpg
Przezroczysty PictureBox tworze w taki sposób:
private TransPictureBox pan;
public Form1()
{
InitializeComponent();
pan = new TransPictureBox();
pan.Parent = this;
pan.Width = 100;
pan.Height = 100;
pan.Left = 220;
pan.Image = Image.FromFile(@"G:\ikonki\calendar_month.png");
pan.Top = 220;
pan.BringToFront();
}
private void timer1_Tick(object sender, EventArgs e)
{
Point mousePt = this.PointToClient(Cursor.Position);
this.pan.Left = mousePt.X - (this.pan.Width / 2);
this.pan.Top = mousePt.Y - (this.pan.Height / 2);
}
Próbowałem również refreshować. Nic to nie dało.
Sądzę, że trzeba jakoś poprawić funkcję odrysowania. Ma ktoś może jakiś pomysł?
Interesuje mnie ten sposób bo kody podane tutaj osiągają wydajność niezłą, ale przy tym moim sposobie byłoby idealnie.