CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

急切求知:用VB画菱形并填充的方法

楼主litong33_61(李童)2002-06-06 11:21:54 在 VB / 基础类 提问

最好把程序写一下,小弟菜鸟一个!:) 问题点数:20、回复次数:6Top

1 楼hycao(海草)回复于 2002-06-06 13:53:25 得分 10

不算什么好方法,但很有趣:  
   
  Private   Sub   Form_Load()  
          Dim   x   As   Integer,   y   As   Integer  
          Dim   i   As   Integer  
          i   =   0  
          Form1.AutoRedraw   =   True  
          Form1.ForeColor   =   vbGreen  
          Form1.ScaleHeight   =   300  
          Form1.ScaleWidth   =   500  
          For   y   =   51   To   150  
                  For   x   =   1   To   2   *   i   +   1  
                          Form1.PSet   (250   -   i   +   x,   y)  
                  Next   x  
                  i   =   i   +   2  
          Next   y  
          i   =   i   -   2  
          For   y   =   151   To   250  
                  For   x   =   1   To   2   *   i   +   1  
                          Form1.PSet   (250   -   i   +   x,   y)  
                  Next   x  
                  i   =   i   -   2  
          Next   y  
  End   Sub  
  Top

2 楼czztk(星光)回复于 2002-06-06 14:47:28 得分 0

反上面的PSet改为Line,速度会快很多。Top

3 楼litong33_61(李童)回复于 2002-06-06 18:57:19 得分 0

菱形的角度是给定的怎么画!快帮帮我:)Top

4 楼lgd211(lgd211)回复于 2002-06-06 19:00:38 得分 10

Option   Explicit  
   
  Private   Type   POINTAPI  
          X   As   Long  
          Y   As   Long  
  End   Type  
  Private   Type   size  
          cx   As   Long  
          cy   As   Long  
  End   Type  
  Private   Declare   Function   CreatePen&   Lib   "gdi32"   (ByVal   nPenStyle   As   Long,   ByVal   nWidth   As   Long,   ByVal   crColor   As   Long)  
  Private   Declare   Function   CreateSolidBrush&   Lib   "gdi32"   (ByVal   crColor   As   Long)  
  Private   Declare   Function   SelectObject&   Lib   "gdi32"   (ByVal   hdc   As   Long,   ByVal   hObject   As   Long)  
  Private   Declare   Function   DeleteObject&   Lib   "gdi32"   (ByVal   hObject   As   Long)  
  Private   Declare   Function   Polyline&   Lib   "gdi32"   (ByVal   hdc   As   Long,   lpPoint   As   POINTAPI,   ByVal   nCount   As   Long)  
  Private   Declare   Function   Polygon&   Lib   "gdi32"   (ByVal   hdc   As   Long,   lpPoint   As   POINTAPI,   ByVal   nCount   As   Long)  
  Private   Declare   Function   SetViewportOrgEx   Lib   "gdi32"   (ByVal   hdc   As   Long,   ByVal   nX   As   Long,   ByVal   nY   As   Long,   lpPoint   As   POINTAPI)   As   Long  
  Private   Declare   Function   SetViewportExtEx   Lib   "gdi32"   (ByVal   hdc   As   Long,   ByVal   nX   As   Long,   ByVal   nY   As   Long,   lpSize   As   size)   As   Long  
  Private   Declare   Function   SetMapMode   Lib   "gdi32"   (ByVal   hdc   As   Long,   ByVal   nMapMode   As   Long)   As   Long  
  Private   Declare   Function   PlayMetaFile   Lib   "gdi32"   (ByVal   hdc   As   Long,   ByVal   hMF   As   Long)   As   Long  
  Private   Declare   Function   RestoreDC   Lib   "gdi32"   (ByVal   hdc   As   Long,   ByVal   nSavedDC   As   Long)   As   Long  
  Private   Declare   Function   SaveDC   Lib   "gdi32"   (ByVal   hdc   As   Long)   As   Long  
  Private   Declare   Function   TextOut   Lib   "gdi32"   Alias   "TextOutA"   (ByVal   hdc   As   Long,   ByVal   X   As   Long,   ByVal   Y   As   Long,   ByVal   lpString   As   String,   ByVal   nCount   As   Long)   As   Long  
   
  Private   Const   PS_SOLID   =   0  
  Private   Const   PS_DASH   =   1  
  Private   Const   PS_DASHDOT   =   3  
  Private   Const   PS_DASHDOTDOT   =   4  
  Private   Const   MM_ANISOTROPIC   =   8  
  Private   Const   MM_TEXT   =   1  
  Dim   dcPicSM   As   Long,   saved   As   Long,   usewmf   As   Long                           '图片框的句柄  
  Dim   di   As   Long                                                                                                   'API函数返回值  
   
  Dim   PointArray(4)   As   POINTAPI  
  Dim   lngPointNum   As   Long  
   
  Private   Sub   Pic_MouseDown(Button   As   Integer,   Shift   As   Integer,   X   As   Single,   Y   As   Single)  
           
          Dim   Direction   As   Single  
           
          dcPicSM   =   pic.hdc  
          saved   =   SaveDC(dcPicSM)  
           
          pic.DrawMode   =   vbXorPen  
  '         pic.ForeColor   =   &HFFFFC0  
          pic.ScaleMode   =   2  
          '画图  
          pic.AutoRedraw   =   True  
           
          Dim   angle   As   Single                                                           '角度  
          lngPointNum   =   4  
          Direction   =   0  
          angle   =   (90   -   Direction)   *   0.01745329252  
          PointArray(0).X   =   X   +   13   *   Cos(angle)  
          PointArray(0).Y   =   Y   -   13   *   Sin(angle)  
          angle   =   angle   +   148   *   0.01745329252  
          PointArray(1).X   =   X   +   13   *   Cos(angle)  
          PointArray(1).Y   =   Y   -   13   *   Sin(angle)  
          angle   =   angle   +   32   *   0.01745329252  
          PointArray(2).X   =   X   +   13   *   Cos(angle)   /   2  
          PointArray(2).Y   =   Y   -   13   *   Sin(angle)   /   2  
          angle   =   angle   +   32   *   0.01745329252  
          PointArray(3).X   =   X   +   13   *   Cos(angle)  
          PointArray(3).Y   =   Y   -   13   *   Sin(angle)  
          Call   DrawFill(PS_SOLID,   0,   &HFF00C0,   &HFFC0)                   '画箭头  
          di   =   RestoreDC(dcPicSM,   saved)  
          pic.Refresh  
          pic.DrawMode   =   vbCopyPen                     '恢复笔状态  
                   
           
  End   Sub  
   
  Private   Sub   DrawFill(ByVal   LineStyle   As   Long,   ByVal   LineWidth   As   Long,   ByVal   LineColor   As   Long,   ByVal   FillColor   As   Long)  
  '给出线段的线形,宽度,颜色画填充  
           
          Dim   oldPen   As   Long,   newPen   As   Long  
          Dim   oldBrush   As   Long,   newBrush   As   Long  
           
          newPen   =   CreatePen(LineStyle,   LineWidth,   LineColor)                             '设置新笔  
          If   newPen   <>   0   Then   oldPen   =   SelectObject(dcPicSM,   newPen)               '选择新笔,保存旧笔  
          newBrush   =   CreateSolidBrush(FillColor)                                                       '设置新刷子  
          If   newBrush   <>   0   Then   oldBrush   =   SelectObject(dcPicSM,   newBrush)   '选择新刷子,保存旧刷子  
          di   =   Polygon(dcPicSM,   PointArray(0),   lngPointNum)                                       '填充图形  
          If   oldPen   <>   0   Then   di   =   SelectObject(dcPicSM,   oldPen)                       '恢复旧笔  
          If   newPen   <>   0   Then   di   =   DeleteObject(newPen)                                         '删除新笔  
          If   oldBrush   <>   0   Then   di   =   SelectObject(dcPicSM,   oldBrush)               '恢复旧刷子  
          If   newBrush   <>   0   Then   di   =   DeleteObject(newBrush)                                 '删除新刷子  
   
  End   Sub  
  可以用。  
  Top

5 楼litong33_61(李童)回复于 2002-06-06 19:18:25 得分 0

怎么实现不了?  
  多点注释好吗:)Top

6 楼lgd211(lgd211)回复于 2002-06-06 19:24:09 得分 0

可以阿。我用的蛮好的。  
  你在form上加一个名为pic的pictuerbox控件。这个方法是可以填充pictuerbox的  
  我做的东西就是用这个方法。给你的是另写的。Top

相关问题

  • 求知
  • 求知~!
  • vb向excel模板中填充数据的问题?
  • 在VB中如何实现“画图”程序中快速填充多边形颜色
  • 在vb中实现显示奇数阶正方形每行每列作和相同的 数字填充问题
  • 请问使用Datatable填充DataGrid时,要把它定义为全局变量吗(VB)?
  • 填充背景
  • 求救,填充!!!!!!!!!!!!!!!
  • 图形填充!
  • 填充数据

关键词

  • dcpicsm
  • newbrush
  • 填充
  • gdi32
  • 刷子
  • byval
  • newpen
  • pointapi
  • oldbrush
  • oldpen

得分解答快速导航

  • 帖主:litong33_61
  • hycao
  • lgd211

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo