在API中,繪制數學曲線的函式:
Public Declare Function GdipDrawCurve2 Lib "gdiplus" (ByVal Graphics As Long, ByVal pen As Long, Points As POINTF, ByVal count As Long, ByVal tension As Single) As GpStatus
呼叫時,Points怎樣得到?
敬請高手指點。
謝謝。
uj5u.com熱心網友回復:
參考:http://msdn.microsoft.com/en-us/library/ms536144(v=vs.85).aspxuj5u.com熱心網友回復:
這是GDI+的函式,首先你的創建設備場景、畫筆看看這個
uj5u.com熱心網友回復:
承蒙兩位及時指教,十分感激。遵囑,都看了。但沒有找到答案。
過去用過繪制弧線的API,相對簡單,引數中沒有Points和pen引數。現在的難題是不知道怎樣設定引數,來呼叫繪制數學曲線的API函式。
敬請明示。
謝謝。
uj5u.com熱心網友回復:
'Points引數是個型別POINTF:
Private Type POINTFX
x As FIXED
y As FIXED
End Type
private pp as POINTF
'用PP來設定座標值:
debug.print pp.x,pp.y
uj5u.com熱心網友回復:
'定義FIXED型別Private Type FIXED
fract As Integer
Value As Integer
End Type
'定義POINTFX型別
Private Type POINTFX
x As FIXED
y As FIXED
End Type
private pp as POINTFX
'用PP來設定座標值:
debug.print pp.x.fract ,pp.y.fract
uj5u.com熱心網友回復:
高手拔冗指教,幸甚。從上午試驗到現在,還是不得要領。實在是我太笨。
兩個問題擋道。
(1)引數中的points不能作為引數型別,試運行時提示錯誤。
(2)暫時洗掉這一引數,軟體可運行。因為曲線至少需要三個點,所以定義一個陣列dians(1 to 4),是pointf資料型別。但呼叫繪制曲線的API函式,提示編譯錯誤:ByRef引數型別不符。
呈上原始碼:
Private Sub Command23_Click() '臨時除錯按鈕
Dim wdians(1 To 4) As POINTF
Dim wdianshu As Long
Dim wzhangli As Single
Dim huabi As Long
wdians(1).X = 100: wdians(1).Y = 100: wdians(2).X = 200: wdians(1).Y = 150: wdians(3).X = 400: wdians(3).Y = 50
wdianshu = 3: wzhangli = 1
GdipDrawCurve2 Picture1.hdc, huabi, (wdians()), wdianshu, wzhangli
End Sub
耽誤您的寶貴時間,真很抱歉。
謝謝。
uj5u.com熱心網友回復:
POINTF型別中還有一個型別FIXED,忘了嗎?要這樣用:wdians(1).X.Value = 100
uj5u.com熱心網友回復:
你的用法不正確啊uj5u.com熱心網友回復:
推薦使用tlb的,穩定uj5u.com熱心網友回復:
'使用Gdiplus.tlb,將其放到system32中,然后添加對其的參考
'手動設定Form的AutoRedraw=True,ScaleMode=Pixels
Option Explicit
Dim lngGraphics As Long
Dim gpP As GpStatus
Dim lngPen1 As Long
Dim lngToken As Long
Dim GpInput As GdiplusStartupInput
Dim p As POINTF
Private Sub Command1_Click()
gpP = GdipCreateFromHDC(Me.hDC, lngGraphics)
gpP = GdipCreatePen1(&H80FF0000, 2, UnitPixel, lngPen1)
p.X = 100
p.Y = 100
gpP = GdipDrawCurve2(lngGraphics, lngPen1, p, 10, 5)
Me.Refresh
End Sub
Private Sub Form_Load()
Dim bolP As Boolean
With Me
.Caption = "GDIPlus范例"
.Width = 960 * 15
.Height = 720 * 15
.Left = (Screen.Width - .Width) * 0.5
.Top = (Screen.Height - .Height) * 0.5
End With
GpInput.GdiplusVersion = 1
If lngToken = 0 Then bolP = (GdiplusStartup(lngToken, GpInput) = Ok)
End Sub
uj5u.com熱心網友回復:
試了又試,還是不得要領。懷疑是VB6.0的版本問題,下載,安裝了中文企業版。運行時,編譯通不過。慚愧。按東方所教格式,定義Type,提示是“無效內部程序”。定義pp,報錯:“子程式和函式中的屬性無效”。
至于tlb,實在是啃不動。
繪制數學曲線的API函式:
Private Declare Function GdipDrawCurve2 Lib "gdiplus" (ByVal Graphics As Long, ByVal pen As Long, Points As POINTF, ByVal count As Long, ByVal tension As Single) As Long
如何呼叫?
謝謝。
uj5u.com熱心網友回復:
其實很簡單,只需要你下載Gdiplus.tlb放到Systen32目錄下,然后再在工程中對其參考就可以了。
'使用Gdiplus.tlb,將其放到system32中,然后添加對其的參考
'手動設定Form的AutoRedraw=True,ScaleMode=Pixels
Option Explicit
Dim lngGraphics As Long
Dim gpP As GpStatus
Dim lngPen1 As Long
Dim lngToken As Long
Dim GpInput As GdiplusStartupInput
Dim p(0 To 99) As POINTF
Private Sub Command1_Click()
Dim intP As Integer
Me.Cls
gpP = GdipCreateFromHDC(Me.hDC, lngGraphics)
gpP = GdipCreatePen1(&H80808080, 2, UnitPixel, lngPen1)
For intP = 0 To 99
p(intP).X = intP * 10
p(intP).Y = 200 + 50 * Sin((intP * 10) / 100 * 2 * 3.1415926)
Next intP
gpP = GdipDrawCurve2(lngGraphics, lngPen1, p(0), 100, 10)
Me.Refresh
End Sub
Private Sub Form_Load()
Dim bolP As Boolean
With Me
.Caption = "GDIPlus范例"
.Width = 960 * 15
.Height = 720 * 15
.Left = (Screen.Width - .Width) * 0.5
.Top = (Screen.Height - .Height) * 0.5
End With
GpInput.GdiplusVersion = 1
If lngToken = 0 Then bolP = (GdiplusStartup(lngToken, GpInput) = Ok)
End Sub
uj5u.com熱心網友回復:
高手如此認真,深以為感。橫下一條心,下功夫啃一星期。有老師,沒有過不去的火焰山。
謝謝。
uj5u.com熱心網友回復:
問一下這個FIXED型別的fract代表什么?轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/122871.html
標籤:API
上一篇:記事本萬年歷
下一篇:VB能在64位系統上運行嗎
