春节快乐!代码共享:位运算的模块(LoWord、HiWord、取得RGBA分量……)
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




