Windows 核心编程中头文件CmnHdr.h 遇到的问题

在编译的时候会出现

You   are   not   using   the   latest   Platform   SDK   header/library

d:/windows编程/windows核心编程/cmnhdr.h(212)   :   error   C2065:   'GetWindowLongPtr'   :   undeclared   identifier  
  d:/windows编程/windows核心编程/cmnhdr.h(212)   :   error   C2065:   'GWLP_HINSTANCE'   :   undeclared   identifier  

出现这个问题的时候,我首先安装了 windows sdk sp2,但是后来编译的时候还是会出现这个,无济于事。后来又参考了网上的说法

函数功能:该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值。

 

GetWindowLong

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

  参数:
 

  hWnd:窗口句柄及间接给出的窗口所属的窗口类。
 

  nlndex:指定要检索的基于0的的偏移量。有效值的范围从0到窗口额外内存空间的字节数,减去4。例如,若指定了12位或多于12位的窗体类的额外存储空间,则应设为第三个32位整数的索引位8(12-4=8)。要获得任意其他值,指定下列值之一:
 

  GWL_EXSTYLE;获得扩展窗口风格。
 

  GWL_STYLE:获得窗口风格。
 

  GWL_WNDPROC:获得窗口过程的地址,或代表窗口过程的地址的句柄。必须使用GWL_WNDPROC函数调用窗口过程。
 

  GWL_HINSTANCE:获得应用事例的句柄。
 

  GWL_HWNDPAAENT:如果父窗口存在,获得父窗口句柄。
 

  GWL_ID:获得窗口标识。
 

  GWL_USERDATA:获得与窗口有关的32位值。每一个窗口均有一个与这个窗口相关的给用户使用的32位的数据。具体用途自定义。
 

  在hWnd参数标识了一个对话框时也可用下列值:
 

  DWL_DLGPROC:获得对话框过程的地址,或一个代表对话框过程的地址的句柄。必须使用函数CallWindowProc来调用对话框过程。
 

  DWL_MSGRESULT:获得在对话框过程中一个消息处理的返回值。
 

  DWL_USER:获得应用程序私有的额外信息,例如一个句柄或指针。
 

  返回值:如果函数成功,返回值是所需的32位值;如果函数失败,返回值是0。若想获得更多错误信息请调用 GetLastError函数。
 

  备注:通过使用函数RegisterClassEx将结构WNDCLASSEX中的cbWndExtra单元指定为一个非0值来保留额外类的存储空间。
 

  Windows CE:nlndex参数指定的字节偏移量必须为 4的倍数。不支持 unaligmned access。
 

  Windows CE:不支持在参数nlndex中设定的GWL_HINSTANCE和GWL_HWNDPARENT。
 

  Windows CE1.0也不支持在 nlndex参数中的 DWL_DLGPROC和 GWL_USERDATA。
 

  速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0对以上版本;头文件:winuser.h;库文件:user32.lib;在Windows NT上实现为Unicode和ANSI两种版本。

 

 

GetWindowLongPtr

这个函数是在指定的窗口中获取信息。也可以在指定window内存偏移量的情况下获取值。

可以拿这个函数来代替GetWindowLong函数来获取一个指示器或者句柄(注:指示器和句柄是32位或64位微软windows所特有的概念)。要写一个兼容32位或64位windows版本的代码,就要使用这个函数。

语法:

LONG_PTR GetWindowLongPtr(      
    HWND hWnd,
    int nIndex
);
hWnd
 欲获取信息的窗口(或属于窗口的类)的句柄。
nIndex
  为欲获取的信息指定值。可以是以下其中之一。
  GWL_EXSTYLE
      获取扩展窗口样式。更多信息,查阅CreateWindowEx
   GWL_STYLE
      获取窗口样式(window styles
   GWLP_WNDPROC
      获取窗口程序指示器,或描述指示器的句柄。如果使用此参数,必须使用CallWindowProc回调函数。
   GWLP_HINSTANCE
      获取一个应用程序实例的句柄。
   GWLP_HWNDPARENT
      如果只有一个父窗口,获取父窗口的句柄。
   GWLP_ID
      获取窗口标识符。
   GWLP_USERDATA
      获取窗口关联的数据,是应用程序创建窗口时留给用户的数据。初始值是0。
   DWLP_DLGPROC
      获取一个对话框的指示器,或描述指示器的句柄。如果使用此参数,必须使用CallWindowProc回调函数。

      DWLP_MSGRESULT
获取一个对话框中的被处理的信息的值。
      DWLP_USER
作为指示器或句柄来获取私有应用程序的额外的信息。

返回值:

如果函数执行成功,将返回读取的值。
如果执行失败,将返回零,要获取更多扩展信息,请调用GetLastError.
如果SetWindowLong or SetWindowLongPtr没有被事先调用,就在扩展窗口或类内存中调用GetWindowLongPtr函数,将返回零

最后将GetWindowLongPtr改为GetWindowLong,参数也变化了,然后编译通过了,不知道原因。不过成功了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值