hellfirehj 发表于 2011-4-5 10:34:58

关于SetWindowPos函数


下面一段代码是用复选框使窗口置顶的。有些问题想问问大家。
引用
Const HWND_TOPMOST = -1
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Sub Check1_Click()
Dim lngWindowFront As Long
If Check1.Value = 1 Then '窗口置前
lngWindowFront = SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, 3)
If lngWindowFront = 0 Then
MsgBox "设置失败!", vbInformation, "友情提示"
Else
MsgBox "设置成功!", vbInformation, "友情提示"
End If
Else
lngWindowFront = SetWindowPos(Me.hwnd, -2, 0, 0, 0, 0, 3)
If lngWindowFront = 0 Then
MsgBox "设置失败!", vbInformation, "友情提示"
Else
MsgBox "设置成功!", vbInformation, "友情提示"
End If
End If
End Sub

引用
Const HWND_TOPMOST = -1

为什么要在这里声明常量HWND_TOPMOST = -1呢?
它不是hWndInsertAfter中的值吗?
引用
lngWindowFront = SetWindowPos(Me.hwnd, -2, 0, 0, 0, 0, 3)

而这个-2又代表了什么?
引用
引用第1楼geriald于2008-04-14 17:01发表的:
HWND_TOPMOST = -1
设置当前窗体处于最上层,HWND_TOPMOST窗体只能设置一个
-2也是设置窗体


我是说这个-1跟-2是固定的,但为什么呢?
在书上没见到给这些参数赋值呀,这值不是随便赋的吧。

一阵狂风 发表于 2011-4-5 10:35:15

HWND_TOPMOST = -1
设置当前窗体处于最上层,HWND_TOPMOST窗体只能设置一个
-2也是设置窗体

只会挂一档 发表于 2011-4-5 10:35:24

再提个建议,可以把
If lngWindowFront = 0 Then
  MsgBox "设置失败!", vbInformation, "友情提示"
Else
  MsgBox "设置成功!", vbInformation, "友情提示"
End If
写到最后,程序要错落有至。

会思考的树 发表于 2011-4-5 10:35:33

-1,-2就是参数

-1 表示 当前句柄的窗台在最前

-2就表示取消最前

建议多看看MSDN

树上爬的猪 发表于 2011-4-5 10:35:47

常量,只是为了便于记忆而产生的
对于一个常量而言,他里面的值是相对固定的,
所以,你调用时,可以写常量,也可以直接写常量里的值,都是一样的效果

程序执行时,如果你是写的常量,他也会把常量的值带进来调用。
页: [1]
查看完整版本: 关于SetWindowPos函数