+ -
当前位置:首页 → 问答吧 → GetWindowLong(,)应用及参数解释

GetWindowLong(,)应用及参数解释

时间:2011-11-28

来源:互联网

case WM_LBUTTONDOWN :
   
  SetWindowLong (hwnd, 0, 1 ^ GetWindowLong (hwnd, 0)) ;
   
  InvalidateRect (hwnd, NULL, FALSE) ;
   
  return 0 ;
//以上是Windows程序设计第七章的7-5 P282倒数第7行的部分代码。
对GetWindowLong的使用我有以下几点疑问,在网络搜寻无果的情况下特发此贴以求指点。
1、 LONG GetWindowLong(
  HWND hWnd, // handle to window 
  int nIndex // offset of value to retrieve 
);
  HWND hWnd, // 该参数如果是WNDCLASS类型的,获取窗口类的相关信息
  Windows类型的,获取窗口的相关信息
  Dialog类型的,获取对话框的相关信息  
  关于参数hWnd,不知道我的理解是否正确?
  int nIndex // offset of value to retrieve  
  下面是我结合WNDCLASS类型表述一下我的疑问  
typedef struct _WNDCLASS { 
  UINT style; //偏移量0
  WNDPROC lpfnWndProc; //偏移量4
  int cbClsExtra; //偏移量8
  int cbWndExtra; //偏移量12
  HINSTANCE hInstance; //偏移量...
  HICON hIcon; 
  HCURSOR hCursor; 
  HBRUSH hbrBackground; 
  LPCTSTR lpszMenuName; 
  LPCTSTR lpszClassName; 
} WNDCLASS, *PWNDCLASS; 

/*
 * Class field offsets for GetClassLong()
 */
#define GCL_MENUNAME (-8)
#define GCL_HBRBACKGROUND (-10)
#define GCL_HCURSOR (-12)
#define GCL_HICON (-14)
#define GCL_HMODULE (-16)
#define GCL_CBWNDEXTRA (-18)
#define GCL_CBCLSEXTRA (-20)
#define GCL_WNDPROC (-24)
#define GCL_STYLE (-26)
#define GCW_ATOM (-32)

问题1:头文件中得这些宏定义的数值是怎样计算出来的?
问题2:GetWindowLong (hwnd, 0);中得参数0代表什么?

作者: ly20041012   发布时间: 2011-11-28

你的代码中应该有个对应的调用SetWindowLong(hwnd, 0, ...);之类的吧

作者: VisualEleven   发布时间: 2011-11-28

这是原文代码
 case WM_LBUTTONDOWN :
   
  SetWindowLong (hwnd, 0, 1 ^ GetWindowLong (hwnd, 0)) ;
   
  InvalidateRect (hwnd, NULL, FALSE) ;
   
  return 0 ;

作者: ly20041012   发布时间: 2011-11-28