60000191 HowTo override DrawBackground event of VectorDrawBaseControl

Article 60000191
Type HowTo
Product Engine
Date Added 6/26/2007 12:00:00 AM
Fixed (6/26/2007 12:00:00 AM)
Submitted by Trung Pham

Summary

HowTo override DrawBackground event of VectorDrawBaseControl in order to draw an Image to the Background.

Solution


 The following example override the DrawBackground and vdScroll events of VectorDrawBaseControl in order to draw an image as background when rendermode is Wire2d.



Bitmap m_Bitmap;



        private void Form1_Load(object sender, EventArgs e)
        {
            vdFramedControl.BaseControl.DrawBackground += new VectorDraw.Professional.Control.DrawBackgroundEventHandler(BaseControl_DrawBackground);
            vdFramedControl.BaseControl.vdScroll += new VectorDraw.Professional.Control.ScrollEventHandler(BaseControl_vdScroll);



//create a bitmap object at runtime
            m_Bitmap = new Bitmap(vdFramedControl.BaseControl.Size.Width, vdFramedControl.BaseControl.Size.Height);
            Graphics g = Graphics.FromImage(m_Bitmap);
            g.Clear(vdFramedControl.BaseControl.ActiveDocument.Palette.Background);
            g.DrawString("VDraw", SystemFonts.DefaultFont, Brushes.Red, new PointF(vdFramedControl.BaseControl.Size.Width / 2, vdFramedControl.BaseControl.Size.Height/2));
            g.Dispose();
       }



//override the vdScroll event in order the pan and scroll draw the background properly.



        void BaseControl_vdScroll(object sender, ref double cx, ref double cy, ref bool cancel)
        {
            vdRender render = sender as vdRender;
            render.ViewCenter += new gPoint(cx, cy);
            vdFramedControl.BaseControl.ActiveDocument.Redraw(false);
        }



       void BaseControl_DrawBackground(object sender, VectorDraw.Render.vdRender render, ref bool cancel)
        {
            System.Diagnostics.Debug.WriteLine("DrawBackground");
            if (m_Bitmap == null) return;
            if (!render.IsWire2d) return;//the following code is working only when 3d render is not active
            render.UnLock();
            Graphics g = render.graphics;
            if (g == null) return;
            g.Clear(render.BkColor);
            g.DrawImage(m_Bitmap, new Point(0, 0));
            g.DrawLine(Pens.Red, new Point(0, 0), new Point(render.Width, render.Height));
            render.Lock();



            cancel = true;
        }






 






 

Send comments on this topic.