2010-10-25 3 views

ответ

1

LineTo не включает конечную точку линии. Попробуйте использовать другую настройку endcap, чтобы узнать, не имеет значения.

+0

Спасибо Mark за хорошую идею. Проблема решена путем замены вызова функции LineTo вызовом PolyLine. Я использовал простой API CreatePen, который не воспринимается как параметр ограничения конечной точки, как это делает ExtCreatePen. Между тем, этот код отлично работал на Vista и XP. Только Windows 7 с шириной 3 и выше имеет проблемы. - – user486842

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 x64:

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

Благодарим вас за хорошую идею. Проблема решена путем замены вызова функции LineTo вызовом PolyLine. Я использовал простой API CreatePen, который не воспринимается как параметр ограничения конечной точки, как это делает ExtCreatePen. Между тем, этот код отлично работал на Vista и XP. Только Windows 7 с шириной 3 и выше имеет проблемы. – user486842

Смежные вопросы