yxd199512041 发表于 2011-9-18 17:45:49

gdi的问题。。。

我用getdc和moveto,lineto在屏幕上画线,可画出来的都是黑线,怎么改颜色呢?还有线的粗细程度

马大哈 发表于 2011-9-18 23:57:04

你要创建一个画笔,先CreatePen,指定样式,粗细和颜色.

然后再用SelectObject选到你得到的那个DC中去.

再调用LineTo画图,就OK了.

马大哈 发表于 2011-9-19 00:07:10

Option Explicit

Private Const PS_SOLID As Long = 0
Private Const PS_DASH As Long = 1                   'nWidth必须是1
Private Const PS_DOT As Long = 2                  'nWidth必须是1
Private Const PS_DASHDOT As Long = 3                'nWidth必须是1
Private Const PS_DASHDOTDOT As Long = 4             'nWidth必须是1
Private Const PS_NULL As Long = 5
Private Const PS_INSIDEFRAME As Long = 6

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 Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long

Private Sub Form_Load()
    Me.ScaleMode = vbPixels
End Sub

Private Sub Form_Resize()
    Form_Paint
End Sub

Private Sub Form_Paint()
    Dim hPen As Long, I As Long, J As Long, K As Long
   
    Me.Cls

    hPen = CreatePen(PS_DASHDOTDOT, 1, vbBlue)
   
    DeleteObject SelectObject(Me.hdc, hPen)
   
    For K = 0 To 100
      I = Int(Rnd(1) * 300)
      J = Int(Rnd(1) * 310)
      
      LineTo Me.hdc, I, J
    Next
   
    DeleteObject hPen
End Sub

yxd199512041 发表于 2011-9-22 17:39:12

马大哈 发表于 2011-9-19 00:07 static/image/common/back.gif


嘿嘿。有空试试。
谢谢了~

yxd199512041 发表于 2011-9-22 17:39:13

马大哈 发表于 2011-9-19 00:07 static/image/common/back.gif


嘿嘿。有空试试。
谢谢了~

yxd199512041 发表于 2011-9-24 16:47:40

马大哈 发表于 2011-9-19 00:07 static/image/common/back.gif


Option Explicit


Private Const PS_SOLID As Long = 0

Private Const PS_DASH As Long = 1                   'nWidth必须是1

Private Const PS_DOT As Long = 2                  'nWidth必须是1

Private Const PS_DASHDOT As Long = 3                'nWidth必须是1

Private Const PS_DASHDOTDOT As Long = 4             'nWidth必须是1

Private Const PS_NULL As Long = 5

Private Const PS_INSIDEFRAME As Long = 6

   Dim P
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 Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long




Private Sub Command1_Click()
a
End Sub

Private Sub Form_Load()

    Me.ScaleMode = vbPixels

      P = GetDC(0)

End Sub





Private Sub a()

    Dim hPen As Long, I As Long, J As Long, K As Long

   
    Me.Cls


    hPen = CreatePen(PS_DASHDOTDOT, 1, vbBlue)

   
    DeleteObject SelectObject(Me.hdc, hPen)

   
    For K = 0 To 100

      I = Int(Rnd(1) * 300)

      J = Int(Rnd(1) * 310)

      
'MsgBox Me.hdc
      LineTo P, I, J

    Next

   
    DeleteObject hPen

End Sub







为什么改成屏幕的DC就又是黑色的呢?
请教

马大哈 发表于 2011-9-26 16:10:15

yxd199512041 发表于 2011-9-24 16:47 static/image/common/back.gif
Option Explicit




DeleteObject SelectObject(Me.hdc, hPen)

你把创建的画笔选到窗体的DC了.

应该选到桌面的DC去.

yxd199512041 发表于 2011-9-29 17:37:06

马大哈 发表于 2011-9-26 16:10 static/image/common/back.gif
DeleteObject SelectObject(Me.hdc, hPen)

你把创建的画笔选到窗体的DC了.


:L失误了。。。

马大哈 发表于 2011-10-1 02:12:19

粗心孩子.............

zhouhui222 发表于 2012-4-23 11:03:53

屏幕画图???话说我也正在学习Gdi+ 写控件呢!
页: [1]
查看完整版本: gdi的问题。。。