آموزش توابع API ویندوز گروه: Lines
منبع: انجمن تخصصی برنامه نویسان ایران
AngleArc, Arc, ArcTo, Chord, Ellipse, GetArcDirection, GetPolyFillMode,
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Any) As Long
Private Declare Function AngleArc Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal dwRadius As Long, ByVal eStartAngle As Single, ByVal eSweepAngle As Single) As Long
Private Sub Form_Paint()
MoveToEx Me.hdc, 100, 100, ByVal 0&
AngleArc Me.hdc, 100, 130, 30, 90, 190
End Sub Private Declare Function Arc Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Private Sub Form_Load()
Me.AutoRedraw = True
'Draw to arcs
Arc Me.hdc, 0, 0, 100, 100, 100, 50, 50, 100
Arc Me.hdc, 49, 49, 149, 149, 49, 99, 99, 49
End Sub Const AD_CLOCKWISE = 2
Const AD_COUNTERCLOCKWISE = 1
Private Declare Function ArcTo Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Private Declare Function SetArcDirection Lib "gdi32" (ByVal hdc As Long, ByVal ArcDirection As Long) As Long
Private Declare Function GetArcDirection Lib "gdi32" (ByVal hdc As Long) As Long
Private Sub Form_Paint()
If GetArcDirection(Me.hdc) = AD_CLOCKWISE Then
SetArcDirection Me.hdc, AD_COUNTERCLOCKWISE
End If
ArcTo Me.hdc, 20, 20, 50, 60, 50, 60, 20, 60
End Sub Private Declare Function Chord Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Private Sub Command1_Click()
Chord Me.hdc, 10, 10, 100, 100, 40, 60, 60, 40
End Sub 'This project needs:
'- two picture boxes
'- a button
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
Private Declare Function PaintDesktop Lib "user32" (ByVal hdc As Long) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function GetBkColor Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, lpPoint As POINTAPI) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Const ScrCopy = &HCC0020
Const Yellow = &HFFFF&
Private Sub Form_Load()
Dim Cnt1 As Byte, Cnt2 As Byte, Point As POINTAPI
'Set the graphic mode to persistent
Me.AutoRedraw = True
'API uses pixels
Me.ScaleMode = vbPixels
Picture1.ScaleMode = vbPixels
Picture2.ScaleMode = vbPixels
'No borders
Picture1.BorderStyle = 0: Picture2.BorderStyle = 0
'Set the button's caption
Command1.Caption = "Paint && Stretch"
'Set the graphic mode to 'non persistent'
Picture1.AutoRedraw = False: Picture2.AutoRedraw = False
For Cnt1 = 0 To 100 Step 3
For Cnt2 = 0 To 100 Step 3
'Set the start-point's co?rdinates
Point.X = Cnt1: Point.Y = Cnt2
'Move the active point
MoveToEx Me.hdc, Cnt1, Cnt2, Point
'Draw a line from the active point to the given point
LineTo Me.hdc, 200, 200
Next Cnt2
Next Cnt1
For Cnt1 = 0 To 100 Step 5
For Cnt2 = 0 To 100 Step 5
'Draw a pixel
SetPixel Me.hdc, Cnt1, Cnt2, Yellow
Next Cnt2
Next Cnt1
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim XX As Long, YY As Long, A As Long
XX = X: YY = Y
'Set the picturebox' backcolor
Picture2.BackColor = GetPixel(Picture1.hdc, XX, YY)
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
Dim XX As Long, YY As Long, A As Long
XX = X: YY = Y
'Set the picturebox' backcolor
Picture2.BackColor = GetPixel(Picture1.hdc, XX, YY)
End If
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim XX As Long, YY As Long, A As Long
XX = X: YY = Y
'Set the picturebox' backcolor
Picture2.BackColor = GetPixel(Picture1.hdc, XX, YY)
End Sub
Private Sub Command1_Click()
'Set the width and height
Picture2.Width = 100: Picture2.Height = 100
Picture1.Width = 50: Picture1.Height = 50
'No pictures
Picture1.Picture = LoadPicture("")
DoEvents
Copy the desktop to our picturebox
PaintDesktop Picture1.hdc
'Stretch the picture
StretchBlt Picture2.hdc, 0, 0, 100, 100, Picture1.hdc, 0, 0, 50, 50, ScrCopy
End Sub Const AD_CLOCKWISE = 2
Const AD_COUNTERCLOCKWISE = 1
Private Declare Function ArcTo Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Private Declare Function SetArcDirection Lib "gdi32" (ByVal hdc As Long, ByVal ArcDirection As Long) As Long
Private Declare Function GetArcDirection Lib "gdi32" (ByVal hdc As Long) As Long
Private Sub Form_Paint()
If GetArcDirection(Me.hdc) = AD_CLOCKWISE Then
SetArcDirection Me.hdc, AD_COUNTERCLOCKWISE
End If
ArcTo Me.hdc, 20, 20, 50, 60, 50, 60, 20, 60
End Sub ' Display the current polygon fill mode of window Form1.
Dim fillmode As Long ' receives fill mode
fillmode = GetPolyFillMode(Form1.hDC) ' get the polygon fill mode
If fillmode = ALTERNATE Then
Debug.Print "Form1 currently uses alternating filling."
Else
Debug.Print "Form1 currently uses winding filling."
End If
نام تابع: AngleArc
اعلان: Declare Function AngleArc Lib "gdi32.dll" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal dwRadius As Long, ByVal eStartAngle As Single, ByVal eSweepAngle As Single) As Long
سيستم عامل: NT 3.1
توضيحات: اين تابع يك كمان دايره وار در يك ديوايس با قلم جاري را ميكشد. دايره اي كه اين كمان قسمتي از آن است با يك شعاع و مختصات مركز مشخص ميگردد.نقاط آغاز كمان بوسيله يك زاويه مشخص ميشود(مقدار زاويه است از سمت مثبت محور X ها و در جهت خلاف عقربه هاي ساعت) و خود كمان مقدار زاويه است در جهت عقربه هاي ساعت و يا خلاف عقربه ساعت . (همچنين اين تابع يك خط از محل فعلي نقطه دستگاه به نقطه آغاز كمان ميكشد . منظور اين است كه اگر شما در داخل يك دستگاه خروجي مانند يك صفحه در حال كار باشيد و قبلا مكان قلم خود را به يك نقطه خاص ببريد و حال بخواهيد يك كمان بوسيله اين تابع بكشيد سيستم خود ميان نقطه فعلي قلم و نقطه شروع كمان يك خط ميكشد)
مقدار بازگشتي: اگر تابع در كشيدن كمان دچار مشكل شود مقدار صفر برميگرداند ( براي يافتن اشكال بوجود آمده به تابع GetLastError مراجعه نماييد) و در غير اين صورت مقدار غير صفر برميگرداند
پارامترها: hdc هندل ديوايس كنتكست كه كمان روي آن كشيده ميشود. x مختصات افقي مركز دايره y مختصات عمودي مركز دايره dwRadius شعاع دايره eStartAngle زاويه (برحسب درجه) كه نقطه شروع كمان را مشخص ميكند eSweepAngle مقدار كمان(برحسب درجه)
ثابتهاي مورد استفاده: ---
کتابخانه: GDI32
توابع مرتبط: Arc, ArcTo, Ellipse, GetArcDirection, SetArcDirection
نکات: ---
کد نمونه:
اعلان: Declare Function Arc Lib "gdi32.dll" (ByVal hdc As Long, ByVal nLeftRect As Long, ByVal nTopRect As Long, ByVal nRightRect As Long, ByVal nBottomRect As Long, ByVal nXStartArc As Long, ByVal nYStartArc As Long, ByVal nXEndArc As Long, ByVal nYEndArc As Long) As Long
سيستم عامل: NT , 2000 , 98 , 95 , CE
توضيحات: اين تابع يك كمان بيضي وار را داخل يك دستگاه خروجي با قلم فعلي ميكشد. اين بيضي توسط يك مستطيل محاط شده كه مختصات و ابعاد آن به تابع داده ميشود.نقاط شروع و پايان نشاندهنده دو نقطه آغاز و پايان كمان ميباشد . ويندوز همواره كمان را در جهت خلاف عقربه ساعت از نقطه شروع به نقطه پايان ميكشد. جهت كشيدن كمان در ويندوز NT بر اساس مسير مشخص شده در تنظيمات دستگاه خروجي ميباشد.
مقدار بازگشتي: اگر در موقع كشيدن كمان اشكالي روي دهد تابع مقدار صفر برميگرداند(براي دانستن نوع اشكال براي ويندوز NTبه تابع GetLastError نگاه كنيد)
پارامترها: hdc هندل ديوايس كنتكست كه كمان روي آن كشيده ميشود. nLeftRect مختصات X نقطع سمت چپ بالايي مستطيل محاط كننده بيضي. nTopRect مختصات Y نقطه سمت چپ بالايي مستطيل محاط كننده بيضي. nRightRect مختصاتX نقطه سمت راست پاييني مستطيل محاط كننده بيضي. nBottomRect مختصاتY نقطه سمت راست پاييني مستطيل محاط كننده بيضي. nXStartArc مختصات X نقطه شروع كمان nYStartArc مختصات Y نقطه شروع كمان nXEndArc مختصات X نقطه پايان كمان nYEndArc مختصات Y نقطه پايان كمان
ثابتهاي مورد استفاده: ---
کتابخانه: GDI32
توابع مرتبط: AngleArc, ArcTo, Ellipse, GetArcDirection, SetArcDirection
نکات: ---
کد نمونه:
اعلان: Declare Function ArcTo Lib "gdi32.dll" (ByVal hdc As Long, ByVal nLeftRect As Long, ByVal nTopRect As Long, ByVal nRightRect As Long, ByVal nBottomRect As Long, ByVal nXRadial1 As Long, ByVal nYRadial1 As Long, ByVal nXRadial2 As Long, ByVal nYRadial2 As Long) As Long
سيستم عامل: NT 3.1
توضيحات: اين تابع يك كمان بيضي وار در يك دستگاه با نوع قلم جاري آن ديوايس ميكشد. پس از كشيدن كمان محل نقطه جاري سيستم در داخل ديوايس به انتهاي كمان منتقل ميشود. بيضي مورد نظر بوسيله يك مستطيل محاط شده است كه مختصات اين مستطيل به تابع پاس داده ميشود. ابتدا و انتهاي كمان توسط دو شعاع مشخص ميگرددكه از مركز بيضي خطي به نقطه شروع يا پايان وصل ميگردد محل تقاطع اين خطوط با بيضي محدوده كمان را مشخص ميكند. مسير حركت (كشيدن كمان در جهت يا خلاف جهت عقربه هاي ساعت) بستگي به تعريف آن در ديوايس مربوطه دارد
مقدار بازگشتي: اگر در موقع كشيدن كمان اشكالي روي دهد تابع مقدار صفر برميگرداند(براي دانستن نوع اشكال براي ئيندوز NTبه تابع GetLastError نگاه كنيد)
پارامترها: hdc هندل ديوايس كنتكست كه كمان روي آن كشيده ميشود. nLeftRect مختصات X نقطع سمت چپ بالايي مستطيل محاط كننده بيضي. nTopRect مختصات Y نقطه سمت چپ بالايي مستطيل محاط كننده بيضي. nRightRect مختصاتX نقطه سمت راست پاييني مستطيل محاط كننده بيضي. nBottomRect مختصاتY نقطه سمت راست پاييني مستطيل محاط كننده بيضي. nXRadial1 مختصات X شعاع ابتداي كمان nYRadial1 مختصات Y شعاع ابتداي كمان nXRadial2 مختصات X شعاع انتهاي كمان nYRadial2 مختصات Y شعاع انتهاي كمان
ثابتهاي مورد استفاده: ---
کتابخانه: GDI32
توابع مرتبط: AngleArc, Arc, Ellipse, GetArcDirection, SetArcDirection
نکات: ---
کد نمونه:
اعلان: Declare Function Chord Lib "gdi32.dll" (ByVal hdc As Long, ByVal nLeftRect As Long, ByVal nTopRect As Long, ByVal nRightRect As Long, ByVal nBottomRect As Long, ByVal nXRadial1 As Long, ByVal nYRadial1 As Long, ByVal nXRadial2 As Long, ByVal nYRadial2 As Long) As Long
سيستم عامل: NT , 2000 , 98 , 95
توضيحات: اين تابع يك قاچ(بيضي وار توپر) در يك ديوايس ميكشد. اين تابع قاچ را با قلم فعال(فعلي)ميكشد و آن را با قلم موي(brush) فعال (فعلي) رنگ ميكند.اين قاچ تشكيل شده است از يك خط (خط مستقيم ميان دو نقطه)همراه كماني كه در جهت عقربه هاي ساعت كشيده ميشود.نقاطع شروع و پايان كمان (ابتدا و انتهاي خط نيز هست) توسط دو شعاع كه از مركز بيضي به نقاط اتصال (به تابع پاس داده ميشود) وصل ميگردد و توسط بيضي قطع ميشود تعيين ميگردد.
مقدار بازگشتي: اگر اين تابع به خطا برخورد كند مقدار صفر برميگرداند(براي تعيين نوع خطا در ويندوز 2000ميتوان از تابع GetLastError استفاده نمود) و اگر موفقيت آميز باشد مقدار غير صفر بر ميگرداند.
پارامترها: hdc هندل ديوايسي كه قاچ داخل آن كشيده ميشود nLeftRect مختصات X لبه بالايي سمت چپ مستطيلي كه بيضي داخل آن محاط شده nTopRect مختصات Y لبه بالايي سمت چپ مستطيلي كه بيضي داخل آن محاط شده nRightRect مختصات X لبه پاييني سمت راست مستطيلي كه بيضي داخل آن محاط شده nBottomRect مختصات Y لبه پاييني سمت راست مستطيلي كه بيضي داخل آن محاط شده nXRadial1 مختصات X شعاعي كه تقاطع آن بابيضي نقطه شروع قاچ را مشخص ميكند. nYRadial1 مختصات Y شعاعي كه تقاطع آن بابيضي نقطه شروع قاچ را مشخص ميكند. nXRadial2 مختصات X شعاعي كه تقاطع آن بابيضي نقطه پايان قاچ را مشخص ميكند. nYRadial2 مختصات Y شعاعي كه تقاطع آن بابيضي نقطه پايان قاچ را مشخص ميكند.
ثابتهاي مورد استفاده: ---
کتابخانه: GDI32
توابع مرتبط: Ellipse, Pie
نکات: ---
کد نمونه:
اعلان: Declare Function Ellipse Lib "gdi32.dll" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
سيستم عامل: NT , 98 , 95
توضيحات: يك بيضي داخل يك ديوايس ميكشد . مختصات ارسال شده مختصات بيضي بيستند بلكه مختصات و گوشه سمت چپ بالا و سمت راست پايين كوچكترين مستطيلي است كه اين بيضي داخل آن قرار ميگيرد.رنگ بيضي و رنگ داخل آن(قلم مو) توسط رنگهاي جاري ديوايس مشخص ميگردد. اگر دستور درست انجام نشود مقدار صفر برميگرداند و در صورت درست بودن مقدار يك برميگردد.
مقدار بازگشتي: ---
پارامترها: hdc هندل ديوايسي كه بيضي داخل آن كشيده ميشود. X1 مختصات X گوشه سمت چپ بالاي مستطيل Y1 مختصات Y گوشه سمت چپ بالاي مستطيل X2 مختصات X گوشه سمت راست پاييني مستطيل Y2 مختصات Y گوشه سمت راست پاييني مستطيل
ثابتهاي مورد استفاده: ---
کتابخانه: GDI32
توابع مرتبط: AngleArc , Arc , ArcTo , Chord , Pie , LineTo
نکات: ---
کد نمونه:
اعلان: Declare Function GetArcDirection Lib "gdi32.dll" (ByVal hdc As Long)
سيستم عامل: NT , 98 , 95
توضيحات: اين تابع تعيين ميكند كه مسير حركت براي كشيدن يك كمان چگونه باشد . كمان را ميتوان از نقطه شروع به نقطه پايان با دو مسير متفاوت وصل نمود 1)درجهت عقربه هاي ساعت 2)در جهت خلاف عقربه ساعت . گرچه اين تابع توسط ويندوز 95و98 پشتيباني ميشوداما هميشه كمان كشيده شده برخلاف عقربه هاي ساعت ميباشد(در واقع سيستم گمراه ميشود)!! . اگر به خطا برسد مقدار صفر برميگرداند يا درست يكي از فلگهاي زير مشخص ميكند كه مسير كشيدن كمان داخل ديوايس چگونه است.
مقدار بازگشتي: ---
پارامترها: AD_CLOCKWISE = 2 از نقطه شروع به نقطه پايان درجهت عقربه هاي ساعت AD_COUNTERCLOCKWISE = 1 از نقطه شروع به نقطه پايان برو در خلاف جهت عقربه هاي ساعت. hdc هندل ديوايس كنتكست كه كمان داخل آن كشيده خواهد شد.
ثابتهاي مورد استفاده: ---
کتابخانه: GDI32
توابع مرتبط: AngleArc , Arc , ArcTo , SetArcDirection
نکات: ---
کد نمونه:
اعلان: Declare Function GetPolyFillMode Lib "gdi32.dll" (ByVal hdc As Long) As Long
سيستم عامل: 32s , NT , 98 , 95
توضيحات: اين تابع نحوه پركردن(Fill) يك چند ضلعي و شكلها در يك ديوايس را مشخص ميكند اين دو مد (در زير گفته شده است) فقط در نوع هندل كردن چندضلعي هاي مركب با هم تفاوت دارند(مثلا چند ضلعي هايي كه با هم تقاطع دارند.اگر به صفر برگردد خطا و اگر موفق باشد يكي از دو فلگ را برميگرداند GetPolyFillMode determines how a given device fills polygonal areas and shapes. These two modes only differ in how they handle complex overlapping polygons (i.e., polygons whose boundaries criss-cross themselves). The function returns 0 if an error occured, or exactly one of the following flags if successful: ALTERNATE = 1 ديوايس متناوبا ميان پركردن و پر نكردن قسمت هاي همجوار كه محدوده را تعيين ميكنند بوسيله نقاط چند ضلعي و محل تقاطع داخل چند ضلعي . WINDING = 2 هر قسمت داخلي جند ضلعي پر شده است . صرف نظر از محدوده داخلي چند ضلعي و نقاط . hdc هندل ديواي كنتكست كه ميخواهيم داخل آن نحوه پركردن چند ضلعي را مشخص نماييم.
مقدار بازگشتي: ---
پارامترها: ---
ثابتهاي مورد استفاده: ---
کتابخانه: GDI32
توابع مرتبط: SetPolyFillMode
نکات: ---
کد نمونه:
