热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

GetWindowLong函数

今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第

今天在看一个代码里头写了GetWindowLong (hwnd, 0),我当时就有点费解,靠,上网

搜索函数原型说明,死活找不到第2个参数为0是指什么,MD,很恼火,最近终于在一个

国外网站找到,我在这篇文章贴了,网站是

http://www.codeguru.com/forum/archive/index.php/t-243778.html

先收集所有关于此函数的使用方法以及程序代码

希望后来的人看到我的这篇文章能感动哈:

函数功能描述:用这个函数能够获得指定窗口的信息

函数原型:
LONG GetWindowLong( HWND hWnd,int nIndex )

参数:
hWnd:指定窗口的句柄
nIndex:需要获得的信息的类型
     值            功能

nIndex取值如下:
GWL_EXSTYLE    得到扩展的窗口风格
GWL_STYLE      得到窗口风格
GWL_WNDPROC    得到窗口回调函数的地址,或者句柄。得到后必须使用CallWindowProc函数来调用 
GWL_HINSTANCE  得到应用程序运行实例的句柄
GWL_HWNDPARENT 得到父窗口的句柄
GWL_ID         得到窗口的标识符
GWL_USERDATA   得到和窗口相关联的32位的值(每一个窗口都有一个有意留给创建窗口的应用程序是用的32位
               的值)

当hWnd标识一个对话框时可以使用下面的值
Value Action 
DWL_DLGPROC   得到对话框回调函数的地址,或者句柄。得到后必须使用CallWindowProc函数来调用 
DWL_MSGRESULT 得到对话框回调函数中消息处理过程的返回值
DWL_USER      得到额外的应用程序私有信息,如一些句柄和指针等

返回值:
成功时,返回一个请求的32位的值
失败时,返回0,可以使用GetLastError来取得错误信息

注意:

/*
* Window field offsets for GetWindowLong()
*/

#define GWL_WNDPROC (-4)
#define GWL_HINSTANCE (-6)
#define GWL_HWNDPARENT (-8)
#define GWL_STYLE (-16)
#define GWL_EXSTYLE (-20)
#define GWL_USERDATA (-21)
#define GWL_ID (-12)

/*
* Get/SetWindowWord/Long offsets for use with WC_DIALOG windows
*/

#define DWL_MSGRESULT 0
#define DWL_DLGPROC 4
#define DWL_USER 8

 

示例1:
long nStyle = ::GetWindowLong(hWnd, GWL_STYLE);   // hWnd是一个编辑框的句柄
if(nStyle & ES_PASSWORD)
{
    AfxMessageBox("这是一个密码域");
}

示例2:

LONG   GetWindowLong(   
      HWND   hWnd,     //   handle   of   window   
      int   nIndex     //   offset   of   value   to   retrieve   
  );   
  第二个参数是0的话,就是指定GW_HWNDFIRST!!!   
  你想用应用程序自定义数据的话,需要指定第二个参数为GWL_USERDATA(-21) 

、、、、、、、、、、、、、、、、、、

 

SetWindowLong   (hwnd,   0,   1^GetWindowLong   (hwnd,   0))   ;   
  小弟初学API,对这个函数不是很了解,看了MSDN也还不清楚,特别是作为参数的1
^GetWindowLong   (hwnd,   0),这个“^”是什么意思,望高手指点迷津 


SetWindowLong函数,该函数将改变指定窗口的特殊属性.下面是它的声明:   
    
  Declare   Function   SetWindowLong   Lib   
"user32"   Alias   "SetWindowLongA"(ByVal   hwnd   As   Long,   ByVal   nIndex   As   Long,ByVal   dwNewLong   As   Long)   As   Long   
    
  第一个参数代表要进行子类处理的窗口,第二个参数应该是GWL_WNDPROC(
-4),第三个参数是新的窗口函数的地址   
    
  此函数将在窗口取得焦点,发生事件,或其他情况下(如其他进程改变了系统的某些参数)被随时调用.   
    
  如果发生错误SetWindowLong函数将返回0,否则将返回原来的窗口函数的地址.这个地址特别重要,你应该把它保存在一个变量中或其他地方.当你不处理某些消息时(实际上,你可能只处理不到1
%的消息,其他的都将由原窗口函数处理),调用原来的窗口函数就需要该地址.  
////
其他人提出的疑问::::::
^是异或。   
  因为GetWindowLong失败后返回0,这条语句的意思就是说当窗口没有这种属性的时候才给它添加这种属性。通俗点说,就是先Get,得不到,再Set。   
  另外Index   
==   0设置的是什么属性呢?二楼的说应该是GWL_WNDPROC(-4),依据是什么?


1楼yxwmxkq(酷得经动了党)回复于 2002-12-12 21:06:32 得分 0 我的目的是:创建子类时:CreateWindow(...,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),NULL);   
  我只是想确定一下,SetWindowLong(hwnd,
0,0)是不是把extra     window     memory   中的long置0,而SetWindowLong(hwnd,0,1)则置为1,如果不是,该如何设置SetWindowLong函数使extra     window     memory   中的Long型数值为0或1,当然0和1的变换我用1^GetWindowLong(hwnd,0)不知是否正确。3x!!
Top

2 楼sans(长风半日)回复于 2002-12-13 09:56:03 得分 50如果要操作User   data,你首先要在该窗口WNDCLASS的cbWndExtra中设定扩展数据的大小,然后RegisterClass,之后使用GetWindowLong(   hWnd,   GWL_USERDATA   +   0   );、GetWindowLong(   hWnd,   GWL_USERDATA   +   1   );等进行读操作,使用SetWindowLong(   hWnd,   GWL_USERDATA   +   0,   lData   );、SetWindowLong(   hWnd,   GWL_USERDATA   +   1,   lData   );等进行写操作。   
  

转帖:http://blog.csdn.net/hnhyhongmingjiang/article/details/2154410


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文探讨了如何通过最小生成树(MST)来计算严格次小生成树。在处理过程中,需特别注意所有边权重相等的情况,以避免错误。我们首先构建最小生成树,然后枚举每条非树边,检查其是否能形成更优的次小生成树。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 深入理解 H5C3 和 JavaScript 核心问题
    本文详细探讨了 H5C3 和 JavaScript 中的一些核心编程问题,通过实例解析和代码示例,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
author-avatar
朵朵妞er
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有