ImageAreaBaseOwnerDraw Property

This is used to turn owner draw mode on and off

Definition

Namespace: EWSoftware.ImageMaps.Windows.Forms
Assembly: EWSoftware.ImageMaps.Windows.Forms (in EWSoftware.ImageMaps.Windows.Forms.dll) Version: 2024.12.31.0
public bool OwnerDraw { get; set; }

Property Value

Boolean
When true, the control will fire the DrawImage event to allow you to draw the image map and the individual image areas. Note that image areas can still be set to owner drawn even if the image map is not.

Example

This is an example of an owner drawn image area event handler. For some other examples, see the demo application. As shown, the image area event properties are not accessible in the designer so you must write code to connect the event handlers. For example, add the code in the form's constructor after the call to InitializeComponent.
C#
public ImageMapEventsForm()
{
    InitializeComponent();

    // Hook up the event handlers.  Since they are not accessible in the
    // designer, we must do it manually.
    ImageAreaBase a = (ImageAreaBase)imMap.Areas[4];
    a.DrawImage += Button_DrawImage;

    a = (ImageAreaBase)imMap.Areas[5];
    a.DrawImage += Button_DrawImage;

    a = (ImageAreaBase)imMap.Areas[6];
    a.DrawImage += Button_DrawImage;

    .
    .
    .
}


/// <summary>
/// Draw the "button" image areas
/// </summary>
/// <param name="sender">The sender of the event (the image area)</param>
/// <param name="e">The event arguments</param>
private void Button_DrawImage(object sender, DrawImageEventArgs e)
{
    ImageAttributes ia;
    Graphics g = e.Graphics;

    // All are ellipse image areas
    ImageAreaEllipse a = (ImageAreaEllipse)sender;
    Rectangle r = a.Ellipse;

    // Offset the area rectangle by the draw event offset
    r.Offset(e.ImageOffset.X, e.ImageOffset.Y);

    if(!a.Enabled)
        ia = iaDisabled;
    else
        ia = iaNormal;

    using TextureBrush tb = new(imgFiller, new Rectangle(0, 0, imgFiller.Width, imgFiller.Height), ia);

    tb.WrapMode = WrapMode.Tile;

    // Translate the brush coordinates to account for the offset
    using Matrix m = new();

    m.Translate(r.X, r.Y);
    tb.Transform = m;

    // If the area is focused or hot lighted, give it a glow effect
    if(e.DrawState == DrawState.Focus || e.DrawState == DrawState.HotLight)
    {
        using GraphicsPath pth = new();

        pth.AddEllipse(r);

        using PathGradientBrush pgb = new(pth);
        pgb.CenterColor = Color.LightSteelBlue;

        if(e.DrawState == DrawState.Focus)
            pgb.SurroundColors = [Color.Yellow];
        else
            pgb.SurroundColors = [Color.Blue];

        pgb.FocusScales = new PointF(0.8f, 0.8f);

        g.FillEllipse(pgb, r);
    }

    // Draw the filler
    g.FillEllipse(tb, r);
    g.DrawString((string)a.Tag, buttonFont, Brushes.Black, r, sfFormat);
}

See Also