API函数之SetWindowLong解决办法
API函数之SetWindowLong
近来本人程序需要一个功能,从网下下载到如下代码,运行很好。
code=vb]Private Sub Command2_Click()
Dim h As Long
h = Val(Text1.Text)
ShowWindow h, 0
SetWindowLong h, &HFFFFFFEC, &H80
ShowWindow h, 5
End Sub[/code]
但窗口属性需要改变一下,就研究了下SetWindowLong这个函数,
一研究就是5个小时(一上午),越研究越乱,有几个问题始终搞不懂,
现将度娘SetWindowLong结果如下: SetWindowLong hwnd, nIndex,dwNewLong
http://baike.baidu.com/link?url=YaNepIhT4BU4BXhEJC4H9lrJ6XrUuSeOX1OqmNd6sAVNj9t9mSnsKY0ii8c6eeX01PvBlIyeMnt_NYwZgiroGK
问题一:
我看到hwnd参数解释:
网上查了查,&HFFFFFFEC转换成十进制是:4294967276
可上面常量值只有:-20,-6,-12,-16,-21,-4,-8呀。(4294967276到底是哪一个)?
同理:dwNewLong的参数解释
这个&H80对应于上面哪一个呢?
二、为什么非得用&H80呢,用常量“LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT”不是更好吗?或者用十进制
-20,-6,-12,-16,-21,-4,-8多好
不夸张得说,我真得要疯了。
------解决思路----------------------
VB 中是有符合整数,所以&HFFFFFFEC 就是 -20。
应该使用常量而不是魔法数,这是基本的编程规则。
近来本人程序需要一个功能,从网下下载到如下代码,运行很好。
code=vb]Private Sub Command2_Click()
Dim h As Long
h = Val(Text1.Text)
ShowWindow h, 0
SetWindowLong h, &HFFFFFFEC, &H80
ShowWindow h, 5
End Sub[/code]
但窗口属性需要改变一下,就研究了下SetWindowLong这个函数,
一研究就是5个小时(一上午),越研究越乱,有几个问题始终搞不懂,
现将度娘SetWindowLong结果如下: SetWindowLong hwnd, nIndex,dwNewLong
http://baike.baidu.com/link?url=YaNepIhT4BU4BXhEJC4H9lrJ6XrUuSeOX1OqmNd6sAVNj9t9mSnsKY0ii8c6eeX01PvBlIyeMnt_NYwZgiroGK
问题一:
我看到hwnd参数解释:
nlndex
指定将设定的大于等于0的偏移值。有效值的范围从0到额外类的存储空间的字节数减4:例如若指定了12或多于12个字节的额外窗口存储空间,则应设索引位8来访问第三个4字节,同样设置0访问第一个4字节,4访问第二个4字节。要设置其他任何值,可以指定下面值之一:[1]
常量
常量值
意义
GWL_EXSTYLE
-20
设定一个新的扩展风格。
GWL_HINSTANCE
-6
设置一个新的应用程序实例句柄。
GWL_ID
-12
设置一个新的窗口标识符。
GWL_STYLE
-16
设定一个新的窗口风格。
GWL_USERDATA
-21
设置与窗口有关的32位值。每个窗口均有一个由创建该窗口的应用程序使用的32位值。
GWL_WNDPROC
-4
为窗口过程设定一个新的地址。
GWL_HWNDPARENT -8 改变子窗口的父窗口,应使用SetParent函数。
当hWnd参数标识了一个对话框时,也可使用下列值:[1]
常量
常量值
意义
DWL_DLGPROC
DWLP_MSGRESULT + sizeof(LRESULT) (值:4)
设置对话框过程的新地址。
DWL_MSGRESULT
0
设置在对话框过程中处理的消息的返回值。
DWL_USER
DWLP_DLGPROC + sizeof(DLGPROC) (值:8)
设置的应用程序私有的新的额外信息,例如一个句柄或指针。
网上查了查,&HFFFFFFEC转换成十进制是:4294967276
可上面常量值只有:-20,-6,-12,-16,-21,-4,-8呀。(4294967276到底是哪一个)?
同理:dwNewLong的参数解释
dwNewLong
指定的替换值。[1]
dwNewLong中可以使用以下一些列表控件的专用风格:
LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT
这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:
大图标显示,小图标显示,列表显示,详细报表显示
LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。
LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点
LVS_SINGLESEL 同时只能选中列表中一项[2]
这个&H80对应于上面哪一个呢?
二、为什么非得用&H80呢,用常量“LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT”不是更好吗?或者用十进制
-20,-6,-12,-16,-21,-4,-8多好
不夸张得说,我真得要疯了。
------解决思路----------------------
VB 中是有符合整数,所以&HFFFFFFEC 就是 -20。
应该使用常量而不是魔法数,这是基本的编程规则。