• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2896
  • Last Modified:

Draw a Line over child control such PictureBox or Group Box using C#

Hi Experts,

How do I draw line over a control ?
Let say like this, I have a Windows Forms, and top of it there are GroupBox and on top of GroupBox there are PictureBox.
And how do I draw a line over GroupBox and PictureBox ?
0
Aryo1
Asked:
Aryo1
1 Solution
 
bungHocCommented:
Try this:

System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.Red);
 
System.Drawing.Graphics formGraphics;
formGraphics = this.CreateGraphics();
formGraphics.DrawLine(pen, 50, 50, 100, 100);
pen.Dispose();
formGraphics.Dispose();

Open in new window

0
 
Jaime OlivaresSoftware ArchitectCommented:
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
To draw "above" multiple controls, get a DC to the Desktop Window and create a Graphics from that...

In VB.Net:
Public Class Form1
 
    Public Declare Function GetDesktopWindow Lib "user32" () As IntPtr
    Public Declare Function GetWindowDC Lib "user32" (ByVal handle As IntPtr) As IntPtr
    Public Declare Function ReleaseDC Lib "user32" Alias "ReleaseDC" (ByVal handle As IntPtr, ByVal hDc As IntPtr) As Integer
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim desktopHandle As IntPtr = GetDesktopWindow
        Dim desktopDC As IntPtr = GetWindowDC(desktopHandle)
        Dim g As Graphics = Graphics.FromHdc(desktopDC)
 
        Dim ptA As Point = Me.PointToScreen(New Point(0, 0))
        Dim ptB As Point = Me.PointToScreen(New Point(Me.ClientRectangle.Width, Me.ClientRectangle.Height))
        g.DrawLine(Pens.Black, ptA, ptB)
 
        g.Dispose()
        ReleaseDC(desktopDC, desktopHandle)
    End Sub
 
End Class

Open in new window

0
 
Aryo1Author Commented:
@Idle_Mind

Thx, it seems your solutions can answers my problems.

BTW, Do you have suggestion where should I put this code ?
On Form_Paint or everytime there is change in UI (such as moving some control) ?
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Well...a "catch all" approach would be to use the IMessageFilter() Interface and repaint the line whenever ANY control in your app gets a WM_PAINT message.  If your app is partially obscured though you could end up drawing a line over another apps window since we are drawing with the desktop DC.

Here is an example of IMessageFilter being used:
http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_22696110.html
0

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now