用MovetoEx和Lineto画线,需要改变颜色和线宽,不知道该怎么处理。是要用CreatePen或SetROP2之类的吗?请说详细一点,解决之后马上结贴:)

解决方案 »

  1.   

    Option ExplicitPrivate Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As LongPrivate Sub Command1_Click()
        Me.DrawWidth = 3
        Me.ForeColor = vbRed
        LineTo Me.hdc, 50, 50
    End Sub
      

  2.   

    用 CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
    函数生成pen对象,nPenstyle是线型,nwidth是线宽,crColor是线的颜色。然后将pen选入DC。用完后记得要销毁对象。
      

  3.   

    CreatePen VB声明 
    Declare Function CreatePen Lib "gdi32" Alias "CreatePen" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long 
    说明 
    用指定的样式、宽度和颜色创建一个画笔 
    返回值 
    Long,如函数执行成功,就返回指向新画笔的一个句柄;否则返回零 
    参数表 
    参数 类型及说明 
    nPenStyle Long,指定画笔样式,可以是下述常数之一 
    PS_SOLID 画笔画出的是实线 
    PS_DASH 画笔画出的是虚线(nWidth必须是1) 
    PS_DOT 画笔画出的是点线(nWidth必须是1) 
    PS_DASHDOT 画笔画出的是点划线(nWidth必须是1) 
    PS_DASHDOTDOT 画笔画出的是点-点-划线(nWidth必须是1) 
    PS_NULL 画笔不能画图 
    PS_INSIDEFRAME 画笔在由椭圆、矩形、圆角矩形、饼图以及弦等生成的封闭对象框中画图。如指定的准确RGB颜色不存在,就进行抖动处理 
    nWidth Long,以逻辑单位表示的画笔的宽度 
    crColor Long,画笔的RGB颜色 
    注解 
    一旦不再需要画笔,记得用DeleteObject函数将其删除
     
    然后用selectobject将上面函数返回的画笔的句柄选进DC,然后用MovetoEx和Lineto画线~~~~~~
      

  4.   

    Option ExplicitPrivate Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
    Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
    Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Private Const PS_SOLID = 0
    Private Sub Command1_Click()
        Dim old As Long
        Dim p As Long
        
        p = CreatePen(PS_SOLID, 3, vbRed)
        old = SelectObject(Me.hdc, p)
        LineTo Me.hdc, 50, 50
        SelectObject Me.hdc, old
        DeleteObject p
    End Sub
      

  5.   

    HPEN对象在VB中怎样声明?wzzwwz,我写的函数要封装成dll给别人调用,你的方法不合适。
      

  6.   

    Public Type POINTAPI
            x As Long
            y As Long
    End TypePublic Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
    Public Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
    Public Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
    Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
    Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As LongPublic Const PS_SOLID = 0
    Sub drawdcline(hdc As Long, startpx As Long, startpy As Long, endpx As Long, endpy As Long)
        Dim old As Long
        Dim p As Long
        Dim a As POINTAPI
        
        p = CreatePen(PS_SOLID, 3, vbRed)
        old = SelectObject(hdc, p)
        MoveToEx hdc, startpx, startpy, a
        LineTo hdc, endpx, endpy
        SelectObject hdc, old
        DeleteObject p
    End Sub
      

  7.   

    调用方法:drawdcline Me.hdc, 20, 20, 80, 80
      

  8.   

    Dim hPen as long ,hOldPen as long