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

一个简单问题:如何在一幅图片上绘制一个可拖动的半透明矩形?

楼主BBB2005(最近在写一个类Word图文编辑器)2005-12-28 09:56:31 在 VB / 基础类 提问

就像Windows桌面那种可拖动的半透明矩形效果。  
  关键是半透明矩形如何绘制? 问题点数:80、回复次数:4Top

1 楼BBB2005(最近在写一个类Word图文编辑器)回复于 2005-12-28 10:09:07 得分 0

我是想用来在图片上方覆盖一层半透明的矩形用于遮盖,用于拖动矩形框来改变矩形大小。应该要使用GDI绘图吧?Top

2 楼BBB2005(最近在写一个类Word图文编辑器)回复于 2005-12-28 10:10:09 得分 0

UPTop

3 楼chewinggum(口香糖·个人二五计划第一年)回复于 2005-12-28 14:21:24 得分 80

中无闲来无事做了个简单实现给你  
  新建一个窗体,放一个picture1,在picture1里面再放一个picture2,然后粘贴下面的代码。picture里面最好放一张图用作为比较用。  
  目前这段代码在鼠标超出picture1范围和拖动picture2超出picture1范围的时候有点问题,需要在AlphaBlend的时候判断pciture2是否超出picture1。但是现在上班时间到了,没时间继续完善代码了,楼主自行完善吧  
   
   
  Option   Explicit  
   
  Private   Declare   Function   AlphaBlend   Lib   "msimg32.dll"   (ByVal   hdcDest   As   Long,   ByVal   nXOriginDest   As   Long,   ByVal   nYOriginDest   As   Long,   ByVal   nWidthDest   As   Long,   ByVal   hHeightDest   As   Long,   ByVal   hdcSrc   As   Long,   ByVal   nXOriginSrc   As   Long,   ByVal   nYOriginSrc   As   Long,   ByVal   nWidthSrc   As   Long,   ByVal   nHeightSrc   As   Long,   ByVal   blendFunction   As   Long)   As   Long  
   
  Dim   blnMouseDown   As   Boolean  
  Dim   blnDrag   As   Boolean  
  Dim   CurX   As   Single  
  Dim   CurY   As   Single  
  Dim   DX   As   Single  
  Dim   DY   As   Single  
   
  Private   Sub   Form_Load()  
          Picture2.Visible   =   False  
          Picture2.BorderStyle   =   0  
          Picture2.BackColor   =   vbBlue  
           
          Picture1.ScaleMode   =   3  
          Picture2.ScaleMode   =   3  
          Me.ScaleMode   =   3  
  End   Sub  
   
  Private   Sub   Picture1_MouseDown(Button   As   Integer,   Shift   As   Integer,   X   As   Single,   Y   As   Single)  
          blnMouseDown   =   True  
          CurX   =   X  
          CurY   =   Y  
          Picture1.Refresh  
          Picture2.Left   =   X  
          Picture2.Top   =   Y  
          Picture2.Width   =   0  
          Picture2.Height   =   0  
          Picture2.Visible   =   True  
  End   Sub  
   
  Private   Sub   Picture1_MouseMove(Button   As   Integer,   Shift   As   Integer,   X   As   Single,   Y   As   Single)  
          If   blnMouseDown   Then  
                  Picture2.Width   =   Abs(X   -   CurX)  
                  Picture2.Height   =   Abs(Y   -   CurY)  
                  If   X   <   CurX   Then  
                          Picture2.Left   =   X  
                  End   If  
                  If   Y   <   CurY   Then  
                          Picture2.Top   =   Y  
                  End   If  
                  Picture2.Refresh  
                  AlphaBlend   Picture2.hDC,   0,   0,   Picture2.Width,   Picture2.Height,   _  
                                Picture1.hDC,   Picture2.Left,   Picture2.Top,   Picture2.Width,   Picture2.Height,   100   *   &H10000  
          End   If  
  End   Sub  
   
  Private   Sub   Picture1_MouseUp(Button   As   Integer,   Shift   As   Integer,   X   As   Single,   Y   As   Single)  
          blnMouseDown   =   False  
  End   Sub  
   
  Private   Sub   Picture2_MouseDown(Button   As   Integer,   Shift   As   Integer,   X   As   Single,   Y   As   Single)  
          DX   =   X  
          DY   =   Y  
          blnDrag   =   True  
  End   Sub  
   
  Private   Sub   Picture2_MouseUp(Button   As   Integer,   Shift   As   Integer,   X   As   Single,   Y   As   Single)  
          Picture2.Left   =   Picture2.Left   +   X   -   DX  
          Picture2.Top   =   Picture2.Top   +   Y   -   DY  
          Picture2.Refresh  
          AlphaBlend   Picture2.hDC,   0,   0,   Picture2.Width,   Picture2.Height,   _  
                                Picture1.hDC,   Picture2.Left,   Picture2.Top,   Picture2.Width,   Picture2.Height,   100   *   &H10000  
          blnDrag   =   False  
  End   Sub  
  Top

4 楼BBB2005(最近在写一个类Word图文编辑器)回复于 2005-12-28 15:14:44 得分 0

感谢chewinggum(口香糖·把减肥列入下一个五年计划)  
   
  另外,Picture1的AutoRedraw需要设置为True才行。  
  Top

相关问题

  • 有难度的半透明矩形
  • 如何实现在拖动一个TImage时,拖动图标显示该image的内容(半透明的)?
  • 请教 想做一个简单的界面操作类似visio的程序,主要是可以把拖动几个矩形框,放到合适位置,绘制箭头等
  • 请教VC停靠窗口矩形的拖动规则
  • 怎样实现按下鼠标并拖动来画矩形框?
  • form 半透明
  • 请问用CDC类怎样画出填充色是半透明的矩形?有颜色,但是可以看到图形下面的图形。
  • 怎样在TBitmap或TImage中绘制一个空心矩形
  • 如何定义鼠标绘制矩形框
  • 如何在web上随着鼠标的移动绘制矩形

关键词

  • 矩形
  • 代码
  • picture
  • 拖动
  • 半透明
  • singledim
  • byval
  • scalemode
  • 超出
  • long

得分解答快速导航

  • 帖主:BBB2005
  • chewinggum

相关链接

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

广告也精彩

反馈

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