SetWindowLong函数

版权声明:本文为博主原创文章,允许转载,转载请注明出处。 https://blog.csdn.net/KnightOnHourse/article/details/79973097

SetWindowLong函数用来改变指定窗口的属性

LONG WINAPI SetWindowLong(

  __in  HWND hWnd, //指定窗口的句柄,或者间接地,窗口所属的类

  __in  int nIndex, //指定要设置的属性值的偏移地址

  __in  LONG dwNewLong //指定设置的新值

);

参数nIndex的取值如下:

GWL_EXSTYLE       //设置一个新的扩展窗口风格

GWL_HINSTANCE //设置一个新的应用程序实例句柄

GWL_ID //为窗口设置一个新的标识

GWL_STYLE   //设置一个新的窗口风格

GWL_USERDATA  //设置与窗口相关的32位值

GWL_WNDPROC          //设置一个新的窗口过程


函数调用成功,SetWindowLong函数将返回先前为窗口指定的32位整型值。


也就是说,如果为指定窗口设定一个新的窗口过程,

则该函数将返回先前为该窗口类指定的窗口过程的地址。








API函数SetWindowLong

01-16

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

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试