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


推荐阅读
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细介绍了美国最具影响力的十大财团,包括洛克菲勒、摩根、花旗银行等。这些财团在历史发展过程中逐渐形成,并对美国的经济、政治和社会产生深远影响。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
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社区 版权所有