Private Sub Command1_Click()
Dim cf As Long
cf = GetWindowLong(Form2.hwnd, GWL_STYLE)
cf = cf Or WS_SYSMENU
cf = cf Or WS_MAXIMIZEBOX
cf = cf Or WS_MINIMIZEBOX
cf = cf Or WS_CAPTION
SetWindowLong Form2.hwnd, GWL_EXSTYLE, cf
End Sub
这里的 and not 什么意思呀
我这是在 课本上超的 怎么不对呀
谢谢你啦 可是 不是你说的那个问题 我把or改成 and not 就可以的 可是这个 and not什么意思
vb窗口风格的设置
答案:2 悬赏:50
解决时间 2021-12-13 05:25
- 提问者网友:乏味沐染
- 2021-12-12 20:53
最佳答案
- 二级知识专家网友:留下所有热言
- 2021-12-12 22:32
首先,你使用
cf = GetWindowLong(Form2.hwnd, GWL_STYLE)
获取了 Form2 的标准样式设置,
然后修改设置,使其具有
WS_SYSMENU
WS_MAXIMIZEBOX
WS_MINIMIZEBOX
WS_CAPTION
的样式。
然后你本应该使用:
SetWindowLong Form2.hwnd, GWL_STYLE, cf
将你的窗口样式设置为 cf 中指定的值,
可是你使用的是:
SetWindowLong Form2.hwnd, GWL_EXSTYLE, cf
EXSTYLE 是附加窗口样式(即高级窗口样式),
它使用的标志都是以 WS_EX 开头的,
例如 WS_EX_TOPMOST。
因此当然不对了……
至于你说的 And、Not 那些是逻辑运算符,
我这里有一些解释(你也可以参考 MSDN):
首先是逻辑和/或/非的运算法则,即:
0 And 0 = 0
1 And 0 = 0
0 And 1 = 0
1 And 1 = 1
0 Or 0 = 0
1 Or 0 = 1
0 Or 1 = 1
1 Or 1 = 1
Not 0 = 1
Not 1 = 0
0 Xor 0 = 0
1 Xor 0 = 1
0 Xor 1 = 1
1 Xor 1 = 0
(Xor 的意思是互斥运算)
*在 VB 中,运算符的优先级从高到低是:
算数运算符:
指数运算 (^)
负数 (–)
乘法和除法 (*、 /)
整数除法 (\)
求模运算 (Mod)
加法和减法 (+、 –)
字符串连接 (&)
比较运算符:
相等 (=)
不等 (<>)
小于 (<)
大于 (>)
小于或相等 (<=)
大于或相等 (>=)
Like
Is
逻辑运算符:
Not
And
Or
Xor
Eqv
Imp
以上所说的逻辑运算是针对两个 Boolean 操作数。
但在 VB 中,如果参与逻辑运算的是整数,
那么会对操作数进行按(二进制)位进行逻辑运算。
例如,要计算 26 And 23,
由于
(26)D = (11010)B
(23)D = (10111)B
(D = 十进制,B = 二进制)
对每一位进行 And 运算:
11010
And 10111
==========
10010
得到的二进制数为:
(10010)B = (18)D
因此
26 And 23 = 18
其他的按位逻辑运算也是这样的。
至于说这样有什么意义,对于有些属性,
其设置只有对立的两种(是/否),就像窗口样式,
如果使用一堆的 Boolean 属性或是数组,则不方便管理,同时也占用了大量的内存空间(一个 Boolean 占 1 字节,虽然在使用时只有 1 位是有效的,在 VB 中,有效位是最高位)。
====================
回答补充
====================
首先,根据优先级,运算时先进行 Not,再进行 And。
举个例子(二进制,比较直观)(我这里用的是 8位,即一个 Byte):
计算:(11111100)B And Not (00100001)B
∵Not (00100001)B = (11011110)B
(11111100)B And (11011110)B = (11011100)B
∴(11111100)B And Not (00100001)B = (11011100)B
由此可知,使用 And Not 只是为了把指定的位设置为 0。
例如此处是把 (11111100)B 中的第一位和倒数第 3 位设置为 0。
其实从某种程度上来讲,And Not 是 Or 的“逆运算”。
Or 是把指定位设置为 1。
cf = GetWindowLong(Form2.hwnd, GWL_STYLE)
获取了 Form2 的标准样式设置,
然后修改设置,使其具有
WS_SYSMENU
WS_MAXIMIZEBOX
WS_MINIMIZEBOX
WS_CAPTION
的样式。
然后你本应该使用:
SetWindowLong Form2.hwnd, GWL_STYLE, cf
将你的窗口样式设置为 cf 中指定的值,
可是你使用的是:
SetWindowLong Form2.hwnd, GWL_EXSTYLE, cf
EXSTYLE 是附加窗口样式(即高级窗口样式),
它使用的标志都是以 WS_EX 开头的,
例如 WS_EX_TOPMOST。
因此当然不对了……
至于你说的 And、Not 那些是逻辑运算符,
我这里有一些解释(你也可以参考 MSDN):
首先是逻辑和/或/非的运算法则,即:
0 And 0 = 0
1 And 0 = 0
0 And 1 = 0
1 And 1 = 1
0 Or 0 = 0
1 Or 0 = 1
0 Or 1 = 1
1 Or 1 = 1
Not 0 = 1
Not 1 = 0
0 Xor 0 = 0
1 Xor 0 = 1
0 Xor 1 = 1
1 Xor 1 = 0
(Xor 的意思是互斥运算)
*在 VB 中,运算符的优先级从高到低是:
算数运算符:
指数运算 (^)
负数 (–)
乘法和除法 (*、 /)
整数除法 (\)
求模运算 (Mod)
加法和减法 (+、 –)
字符串连接 (&)
比较运算符:
相等 (=)
不等 (<>)
小于 (<)
大于 (>)
小于或相等 (<=)
大于或相等 (>=)
Like
Is
逻辑运算符:
Not
And
Or
Xor
Eqv
Imp
以上所说的逻辑运算是针对两个 Boolean 操作数。
但在 VB 中,如果参与逻辑运算的是整数,
那么会对操作数进行按(二进制)位进行逻辑运算。
例如,要计算 26 And 23,
由于
(26)D = (11010)B
(23)D = (10111)B
(D = 十进制,B = 二进制)
对每一位进行 And 运算:
11010
And 10111
==========
10010
得到的二进制数为:
(10010)B = (18)D
因此
26 And 23 = 18
其他的按位逻辑运算也是这样的。
至于说这样有什么意义,对于有些属性,
其设置只有对立的两种(是/否),就像窗口样式,
如果使用一堆的 Boolean 属性或是数组,则不方便管理,同时也占用了大量的内存空间(一个 Boolean 占 1 字节,虽然在使用时只有 1 位是有效的,在 VB 中,有效位是最高位)。
====================
回答补充
====================
首先,根据优先级,运算时先进行 Not,再进行 And。
举个例子(二进制,比较直观)(我这里用的是 8位,即一个 Byte):
计算:(11111100)B And Not (00100001)B
∵Not (00100001)B = (11011110)B
(11111100)B And (11011110)B = (11011100)B
∴(11111100)B And Not (00100001)B = (11011100)B
由此可知,使用 And Not 只是为了把指定的位设置为 0。
例如此处是把 (11111100)B 中的第一位和倒数第 3 位设置为 0。
其实从某种程度上来讲,And Not 是 Or 的“逆运算”。
Or 是把指定位设置为 1。
全部回答
- 1楼网友:一池湖水
- 2021-12-12 22:50
我暂时保留我的看法!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |