Hola a todos, tengo un problema que no sé solucionar con un control que me estoy creando.
Verán, estoy intentando hacerme un control para hacer mapas para rpg's a base de tiles.
Comencé a hacerlo como una clase que hereda de un panel y dentro otro panel que es donde dibujo una malla.
No usé el diseñador, y lo hice de esta manera porque asi el scroll me lo hace solo.
Bueno, pues hago el code, me pinta y todo muy bonito pero cuando la ventana pierde el foco, lo que he pintao dentro del 2º panel se pierde.
He intentando hookear el WndProc del panel interior, pero no se hacerlo.
Pueden decirme que puedo hacer para repintar el contenido del control ?
Les dejo aqui el code:
class Grid2:Panel
{
Panel p2;
private int hcells;
private int vcells;
private int theigth;
private int twidth;
private const int WM_PAINT = 0xF;
public Grid2(int sizetile, int height, int width)
{
this.AutoScroll=true;
this.BorderStyle=BorderStyle.FixedSingle;
this.Width=600;
this.Height=600;
// N1 de celdas
this.hcells=height;
this.vcells=width;
this.twidth=sizetile;
this.theigth=sizetile;
p2=new Panel();
p2.Height=this.vcells*this.theigth;
p2.Width=this.hcells*this.twidth;
p2.Paint += new PaintEventHandler(p2_Paint);
p2.MouseMove += new MouseEventHandler(p2_MouseMove);
this.Controls.Add(p2);
}
void p2_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button==MouseButtons.Left) {
int x;
int y;
Panel p;
Pen pn=new Pen(Color.Green,2);
Graphics g;
x=(e.X/32); // Averiguo en que casilla esta el raton
y=(e.Y/32);
g=((Panel)sender).CreateGraphics();
// DrawRectangle (x,y(origen),ancho, alto)
g.DrawRectangle(pn,new Rectangle(x*this.twidth,y*this.theigth,this.twidth,this.theigth));
g.Dispose();
}
}
#region Propiedades
/// <summary>
/// Nº de celdas de ancho
/// </summary>
public int Hcells
{
get
{
return(this.hcells);
}
set
{
this.hcells=value;
}
}
/// <summary>
/// Nº de celdas de alto
/// </summary>
public int Vcells
{
get
{
return(this.vcells);
}
set
{
this.vcells=value;
}
}
/// <summary>
/// Alto del tile
/// </summary>
public int Theigth
{
get
{
return(this.theigth);
}
set
{
this.theigth=value;
}
}
/// <summary>
/// Ancho del tile
/// </summary>
public int Twidth
{
get
{
return(this.twidth);
}
set
{
this.twidth=value;
}
}
#endregion
void p2_Paint(object sender, PaintEventArgs e)
{
int x;
int y;
Pen mypen=new Pen(Color.Gray);
// lineas verticales
for (x=0;x<this.hcells*this.twidth; x+=this.twidth)
e.Graphics.DrawLine(mypen,x,0,x, this.hcells*this.twidth);
// lineas horizontales
for (y = 0; y < this.vcells * this.theigth; y += this.theigth)
e.Graphics.DrawLine(mypen, 0, y, this.hcells * this.theigth, y);
e.Graphics.DrawRectangle(mypen, 1, 1, this.theigth * this.hcells - 2, this.twidth * this.vcells - 2);
}
}
}
Gracias