2010-10-25 71 views

回答

1

LineTo不包括該行的最後一個點。嘗試一個不同的endcap設置,看看它是否有所作爲。

+0

謝謝你馬克的好主意。通過用PolyLine調用替換LineTo函數調用解決了該問題。我使用普通的CreatePen API,它不像ExtCreatePen那樣將參數結束標誌設置爲參數。 Intertstingly,這段代碼在Vista和XP上運行良好。只有寬度爲3及以上的Windows 7有問題。 - – user486842 2010-10-27 14:57:07

0

它是否返回一個句柄或NULL?
你有沒有考慮過使用CreatePenIndirect和結構LOGPEN?
http://msdn.microsoft.com/en-us/library/dd183510(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/dd145041(v=VS.85).aspx
這只是正常工作在我的電腦中,Windows 7 64位系統上:

Option Explicit 

Private Declare Function CreatePen Lib "gdi32" (_ 
    ByVal nPenStyle As Long, _ 
    ByVal nWidth As Long, _ 
    ByVal crColor 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 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 

Dim x As Long 
Dim y As Long 
Dim w As Long 

Private Sub Command1_Click() 
    w = w + 1 
    Dim hpen As Long: hpen = CreatePen(0, w, 0) 
    Dim ret As Long: ret = SelectObject(Me.hDC, hpen) 
    If ret <> 0 Then 
     x = x + 10 
     y = y + 10 
     Call LineTo(Me.hDC, x, y) 
    End If 
    Call DeleteObject(hpen) 
End Sub 

單擊按鈕多次

+0

謝謝馬克是個好主意。通過用PolyLine調用替換LineTo函數調用解決了該問題。我使用普通的CreatePen API,它不像ExtCreatePen那樣將參數結束標誌設置爲參數。 Intertstingly,這段代碼在Vista和XP上運行良好。只有寬度爲3及以上的Windows 7有問題。 – user486842 2010-10-27 14:55:40