CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

春节快乐!代码共享:位运算的模块(LoWord、HiWord、取得RGBA分量……)

楼主zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)2003-02-04 11:18:31 在 VB / API 提问

 
  Option   Explicit  
   
  Public   BitPosMask(0   To   31)   As   Long  
  Public   BitMapMask(0   To   31)   As   Long  
   
  Private   m_Inited   As   Boolean  
   
  Public   Property   Get   Inited()   As   Boolean  
          Inited   =   m_Inited  
  End   Property  
   
  Public   Function   Init()   As   Boolean  
          If   m_Inited   Then   Exit   Function  
           
           
          Dim   I   As   Long  
           
          For   I   =   0   To   30  
                  BitPosMask(I)   =   2&   ^   I  
          Next   I  
          BitPosMask(31)   =   &H80000000  
           
          For   I   =   0   To   7  
                  BitMapMask(I)   =   BitPosMask(7   -   I)  
          Next   I  
          For   I   =   8   To   &HF  
                  BitMapMask(I)   =   BitPosMask(&HF   -   I   +   8)  
          Next   I  
          For   I   =   &H10   To   &H17  
                  BitMapMask(I)   =   BitPosMask(&H17   -   I   +   &H10)  
          Next   I  
          For   I   =   &H18   To   &H1F  
                  BitMapMask(I)   =   BitPosMask(&H1F   -   I   +   &H18)  
          Next   I  
           
          m_Inited   =   True  
          Init   =   True  
           
  End   Function  
   
  '################################################  
   
  Public   Property   Get   LoWord(ByRef   dword   As   Long)   As   Integer  
          LoWord   =   (dword   And   &H7FFF&)   Or   (((dword   And   &H8000&)   <>   0)   And   &H8000)  
  End   Property  
   
  Public   Property   Get   HiWord(ByRef   dword   As   Long)   As   Integer  
          HiWord   =   ((dword   And   &H7FFF0000)   \   &H10000)   Or   (((dword   And   &H80000000)   <>   0)   And   &H8000)  
  End   Property  
   
  Public   Property   Let   LoWord(ByRef   dword   As   Long,   ByVal   vData   As   Integer)  
          dword   =   (dword   And   &HFFFF0000)   Or   (vData   And   &H7FFF)   Or   (((vData   And   &H8000)   <>   0)   And   &H8000&)  
  End   Property  
   
  Public   Property   Let   HiWord(ByRef   dword   As   Long,   ByVal   vData   As   Integer)  
          dword   =   (dword   And   &HFFFF&)   Or   ((vData   And   &H7FFF)   *   &H10000)   Or   (((vData   And   &H8000)   <>   0)   And   &H80000000)  
  End   Property  
   
  Public   Function   MakeDWord(ByVal   HiWord   As   Integer,   ByVal   LoWord   As   Integer)   As   Long  
          MakeDWord   =   ((HiWord   And   &H7FFF)   *   &H10000   Or   (((HiWord   And   &H8000)   <>   0)   And   &H80000000))   _  
                          Or   ((LoWord   And   &H7FFF)   Or   (((LoWord   And   &H8000)   <>   0)   And   &H8000&))  
  End   Function  
   
  Public   Function   MAKELPARAM(ByVal   l   As   Integer,   ByVal   H   As   Integer)   As   Long  
          MAKELPARAM   =   MakeDWord(H,   l)  
  End   Function  
   
  'DWORD   MAKELONG(  
  '     WORD   wLow,     //   low-order   word   of   long   value  
  '     WORD   wHigh     //   high-order   word   of   long   value  
  ');  
  Public   Function   MAKELONG(ByVal   wLow   As   Integer,   ByVal   wHigh   As   Integer)   As   Long  
          MAKELONG   =   MakeDWord(wHigh,   wLow)  
  End   Function  
   
  '################################################  
   
  Public   Property   Get   LoByte(ByRef   Word   As   Integer)   As   Byte  
          LoByte   =   Word   And   &HFF  
  End   Property  
   
  Public   Property   Get   HiByte(ByRef   Word   As   Integer)   As   Byte  
          HiByte   =   ((Word   And   &H7F00)   \   &H100)   Or   (((Word   And   &H8000)   <>   0)   And   &H80)  
  End   Property  
   
  Public   Property   Let   LoByte(ByRef   Word   As   Integer,   ByVal   vData   As   Byte)  
          Word   =   (Word   And   &HFF00)   Or   vData  
  End   Property  
   
  Public   Property   Let   HiByte(ByRef   Word   As   Integer,   ByVal   vData   As   Byte)  
          Word   =   (Word   And   &HFF)   Or   ((vData   And   &H7F)   *   &H100)   Or   (((vData   And   &H80)   <>   0)   And   &H8000)  
  End   Property  
   
  Public   Function   MakeWord(ByVal   HiByte   As   Byte,   ByVal   LoByte   As   Byte)   As   Integer  
          MakeWord   =   ((HiByte   And   &H7F)   *   &H100   Or   (((HiByte   And   &H80)   <>   0)   And   &H8000))   Or   LoByte  
  End   Function  
   
  '################################################  
   
  Public   Property   Get   ColorR(ByRef   Color   As   Long)   As   Byte  
          ColorR   =   Color   And   &HFF  
  End   Property  
   
  Public   Property   Get   ColorG(ByRef   Color   As   Long)   As   Byte  
          ColorG   =   (Color   And   &HFF00&)   \   &H100&  
  End   Property  
   
  Public   Property   Get   ColorB(ByRef   Color   As   Long)   As   Byte  
          ColorB   =   (Color   And   &HFF0000)   \   &H10000  
  End   Property  
   
  Public   Property   Get   ColorA(ByRef   Color   As   Long)   As   Byte  
          ColorA   =   ((Color   And   &H7F000000)   \   &H1000000)   Or   (((Color   And   &H80000000)   <>   0)   And   &H80)  
  End   Property  
   
  Public   Property   Let   ColorR(ByRef   Color   As   Long,   ByVal   vData   As   Byte)  
          Color   =   (Color   And   &HFFFFFF00)   Or   vData  
  End   Property  
   
  Public   Property   Let   ColorG(ByRef   Color   As   Long,   ByVal   vData   As   Byte)  
          Color   =   (Color   And   &HFFFF00FF)   Or   (vData   *   &H100&)  
  End   Property  
   
  Public   Property   Let   ColorB(ByRef   Color   As   Long,   ByVal   vData   As   Byte)  
          Color   =   (Color   And   &HFF00FFFF)   Or   (vData   *   &H10000)  
  End   Property  
   
  Public   Property   Let   ColorA(ByRef   Color   As   Long,   ByVal   vData   As   Byte)  
          Color   =   (Color   And   &HFFFFFF)   Or   ((vData   And   &H7F)   *   &H1000000)   Or   (((vData   And   &H80)   <>   0)   And   &H80000000)  
  End   Property  
   
  Public   Function   RGBA(ByVal   Red   As   Byte,   ByVal   Green   As   Byte,   ByVal   Blue   As   Byte,   ByVal   Alpha   As   Byte)   As   Long  
          RGBA   =   Red   Or   Green   *   &H100&   Or   Blue   *   &H10000   Or   ((Alpha   And   &H7F)   *   &H1000000   Or   (((Alpha   And   &H80)   <>   0)   And   &H80000000))  
  End   Function  
  问题点数:123、回复次数:32Top

1 楼thirdapple(.:RNPA:.陨落雕 - 芝兰宝树)回复于 2003-02-04 11:21:12 得分 5

好东西,UpTop

2 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2003-02-04 11:22:20 得分 0

LoWord、HiWord、ColorR、ColorG、ColorA……都是作为属性  
  既可以取得,又可以设置  
   
  Dim   c   as   Long  
  c=&H123456  
  debug.print   Hex(c)   &   ":"   &   ColorR(c)   &   ","   &   ColorG(c)   &   ","   &   ColorB(c)  
  ColorR(c)=&HFF   '注意  
  debug.print   Hex(c)   &   ":"   &   ColorR(c)   &   ","   &   ColorG(c)   &   ","   &   ColorB(c)  
  Top

3 楼gang75(*^&^*)回复于 2003-02-04 12:15:30 得分 5

sjTop

4 楼myhfit()回复于 2003-02-04 19:06:29 得分 5

是这样好,还是用CopyMemory好?Top

5 楼ravenkatte(Oracle Applications DBA/Technical Consultant)回复于 2003-02-04 19:07:29 得分 5

upTop

6 楼boyzhang(张郎)(爱你爱到Windows没BUG的那天)回复于 2003-02-05 08:44:44 得分 5

upTop

7 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2003-02-06 15:36:07 得分 0

在大规模循环中,动态连接库中的函数速度慢些  
   
  虽然在调试环境下快一些,这是由于动态连接库中的函数是已经编译好的。编译成可执行文件后,自身函数就快多了Top

8 楼chenyu5188(来自东方的狼)回复于 2003-02-06 16:27:28 得分 5

UP  
  谢谢Top

9 楼chanet(牧师)回复于 2003-02-08 02:21:03 得分 5

正在找...  
   
  刚好~~~~Top

10 楼minajo21(大眼睛)回复于 2003-02-08 09:13:56 得分 4

upTop

11 楼nik_Amis(...)回复于 2003-02-08 15:25:22 得分 4

upTop

12 楼smartluwei(斯马特卤味)回复于 2003-02-08 15:44:14 得分 4

佩服佩服  
  UPTop

13 楼dsclub(任搏软)回复于 2003-02-08 16:31:59 得分 4

upTop

14 楼JennyVenus()回复于 2003-02-08 17:57:21 得分 4

学习Top

15 楼lihonggen0(李洪根,MS MVP,标准答案来了)回复于 2003-02-09 08:31:34 得分 4

upTop

16 楼13161795500(活着真累)回复于 2003-02-09 09:00:40 得分 4

upTop

17 楼zyl910(编程的乐趣在于编程控制硬件,与用图形学实现绚丽效果)回复于 2003-02-09 21:57:55 得分 0

刚才是谁给我发的短消息?  
   
  我不小心把删除当成回复了  
   
   
  -----------------------------------  
  LoWord就是实现VC的LOWORD宏的功能  
   
  至于为什么要And   &H7FFF0000  
  这是由于VB的整形是带符号的Top

18 楼linfuyong(林子)回复于 2003-02-13 10:12:44 得分 4

好东东,学习Top

19 楼wxy_xiaoyu(猪是的看来过倒)回复于 2003-03-10 02:17:52 得分 4

upTop

20 楼cbr7619(cbr7619)回复于 2003-03-10 11:25:10 得分 4

学习Top

21 楼zhenxizhou(东门行)回复于 2003-03-10 20:17:26 得分 4

upTop

22 楼suntt(两条腿的狗)回复于 2003-03-11 11:08:45 得分 4

upTop

23 楼softlead(向.Net)回复于 2003-03-11 11:42:46 得分 4

studyingTop

24 楼zhenxizhou(东门行)回复于 2003-04-13 10:43:27 得分 4

upTop

25 楼lihonggen0(李洪根,MS MVP,标准答案来了)回复于 2003-04-13 17:05:09 得分 4

 
   
  ------------------------------------------------------------------  
  个人专栏:http://www.csdn.net/develop/author/netauthor/lihonggen0/  
  ------------------------------------------------------------------Top

26 楼GrassDragon(被蚊子咬了一下,就失眠了!)回复于 2003-04-15 11:01:13 得分 4

收Top

27 楼ketao_78(树欲静而风不止)回复于 2003-04-15 11:14:29 得分 4

upTop

28 楼welon(辉哥)回复于 2003-04-26 20:10:06 得分 4

怎么用,用在哪里?Top

29 楼gamestory(无叶菜)回复于 2003-06-28 13:12:09 得分 4

Copy下来,回去慢慢研究Top

30 楼wshuo(wshuo)回复于 2003-06-29 20:46:03 得分 4

不错啊Top

31 楼lirun(笨笨狗)回复于 2003-06-29 21:52:05 得分 4

有意思,不谢!Top

32 楼Fnems(Fnems)回复于 2003-06-30 19:39:44 得分 4

谢!收藏!  
   
  不过,如果封装成一个类,调用起来不更方便吗?Top

相关问题

  • 矩阵运算
  • 位运算
  • 运算符?
  • 大数运算
  • 位运算
  • ---------------日期运算-------------------
  • 浮点运算???
  • 指针运算
  • 有关运算
  • 请问^运算

关键词

  • word
  • 函数
  • propertypublic
  • vdata
  • bitposmask
  • colorr
  • byref
  • loword
  • hiword
  • colorg

得分解答快速导航

  • 帖主:zyl910
  • thirdapple
  • gang75
  • myhfit
  • ravenkatte
  • boyzhang
  • chenyu5188
  • chanet
  • minajo21
  • nik_Amis
  • smartluwei
  • dsclub
  • JennyVenus
  • lihonggen0
  • 13161795500
  • linfuyong
  • wxy_xiaoyu
  • cbr7619
  • zhenxizhou
  • suntt
  • softlead
  • zhenxizhou
  • lihonggen0
  • GrassDragon
  • ketao_78
  • welon
  • gamestory
  • wshuo
  • lirun
  • Fnems

相关链接

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

广告也精彩

反馈

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