热门标签 | 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


推荐阅读
  • 在现代Web应用中,当用户滚动到页面底部时,自动加载更多内容的功能变得越来越普遍。这种无刷新加载技术不仅提升了用户体验,还优化了页面性能。本文将探讨如何实现这一功能,并介绍一些实际应用案例。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 本文介绍如何在华为CE交换机上配置M-LAG(多链路聚合组),以实现CE1和CE2设备作为VLAN 10网关的高可用性。通过详细的配置步骤,确保网络冗余和稳定性。 ... [详细]
  • 解决SVN图标显示异常问题的综合指南
    本文详细探讨了SVN图标无法正常显示的问题,并提供了多种有效的解决方案,涵盖不同环境下的具体操作步骤。通过本文,您将了解如何排查和修复这些常见的SVN图标显示故障。 ... [详细]
  • 本文详细介绍了 org.apache.commons.io.IOCase 类中的 checkCompareTo() 方法,通过多个代码示例展示其在不同场景下的使用方法。 ... [详细]
  • 磁盘健康检查与维护
    在计算机系统运行过程中,硬件或电源故障可能会导致文件系统出现异常。为确保数据完整性和系统稳定性,定期进行磁盘健康检查至关重要。本文将详细介绍如何使用fsck和badblocks工具来检测和修复文件系统及硬盘扇区的潜在问题。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 本文详细探讨了如何通过分析单个或多个线程在瓶颈情况下的表现,来了解处理器资源的消耗。无论是单进程还是多进程环境,监控关键指标如线程数量、占用时间及调度优先级等,有助于揭示潜在的性能问题。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 本文详细介绍了流编辑器sed中的G、H、g、h命令,探讨了它们的工作原理及应用场景。通过实例解析和图解分析,帮助读者掌握这些高级命令的使用方法。 ... [详细]
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社区 版权所有