SetClassLong-将指定的偏移量中指定的32位(长)值替换为指定窗口所属的类的额外类内存或WNDCLASSEX结构

平台 SDK: Windows 用户接口

SetClassLong

SetClassLong函数将指定的偏移量中指定的32位(长)值替换为指定窗口所属的类的额外类内存或WNDCLASSEX结构。

注意 该函数已被SetClassLongPtr函数取代。 要编写与32位和64位版本的Windows兼容的代码,请使用SetClassLongPtr。

DWORD SetClassLong(
  HWND hWnd,       // 窗口句柄
  int nIndex,      // 要改变的值索引
  LONG dwNewLong   // 新值
);

参数

  • hWnd

  • [in] 窗口句柄,间接处理窗口所属的类。

  • nIndex

  • [in] 指定要替换的32位值。 要在额外的类内存中设置32位值,请指定要设置的值的正值,从零开始的字节偏移量。 有效值的范围为0至额外班级记忆的字节数减去4; 例如,如果您指定了12个或更多字节的额外的类内存,则值8将是第三个32位整数的索引。 要设置WNDCLASSEX结构中的任何其他值,请指定以下值之一。

    Action
    GCL_CBCLSEXTRA设置与该类关联的额外内存的大小(以字节为单位)。 设置此值不会更改已分配的额外字节数。
    GCL_CBWNDEXTRA设置与类中每个窗口关联的额外窗口内存的大小(以字节为单位)。 设置此值不会更改已分配的额外字节数。 有关如何访问此内存的信息,请参阅SetWindowLong。
    GCL_HBRBACKGROUND替换与该类关联的背景画笔的句柄。
    GCL_HCURSOR替换与该类关联的游标的句柄。
    GCL_HICON替换与该类关联的图标的句柄。
    GCL_HICONSM将句柄替换为与班级关联的小图标。
    GCL_HMODULE替换注册该类的模块的句柄。
    GCL_MENUNAME替换菜单名称字符串的地址。 该字符串标识与该类关联的菜单资源。
    GCL_STYLE替换窗口类样式位。
    GCL_WNDPROC替换与该类关联的窗口过程的地址。


  • dwNewLong

  • [in] 指定替换值。

返回值

如果函数成功,则返回值是指定的32位整数的前一个值。 如果该值以前未设置,则返回值为零。

如果函数失败,返回值为零。 要获得扩展的错误信息,请调用GetLastError。

备注

如果使用SetClassLong函数和GCL_WNDPROC索引来替换窗口过程,则窗口过程必须符合WindowProc回调函数描述中指定的准则。

使用GCL_WNDPROC索引调用SetClassLong将创建窗口类的子类,该子类将影响随后使用该类创建的所有窗口。 应用程序可以继承一个系统类,但不应该继承由另一个进程创建的窗口类。

通过在RegisterClassEx函数使用的WNDCLASSEX结构的cbClsExtra成员中指定一个非零值来保留额外的类内存。

小心使用SetClassLong函数。 例如,可以使用SetClassLong更改类的背景颜色,但此更改不会立即重新绘制属于该类的所有窗口。

Windows 95/98/Me: SetClassLongW由Microsoft层为Unicode支持。 请注意,随后调用此函数将覆盖以前调用的结果,因此您必须保存稍后要使用的任何结果。 要使用此版本,您必须将某些文件添加到您的应用程序中,如Windows 95/98 / Me系统上的Microsoft Layer for Unicode所述。

示例代码

有关示例,请参阅显示图标。

要求

  Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。

  Windows 95/98/Me: 包含在Windows 95和更高版本中。

  头文件: 声明于 Winuser.h; 包含于 Windows.h.
  库: 使用 User32.lib.

  Unicode: 在Windows NT/2000/XP上作为Unicode和ANSI版本实现。 Microsoft层还支持Unicode。


SetCapture-将鼠标捕获设置为属于当前线程的指定窗口

平台 SDK: Windows 用户接口

SetCapture

SetCapture函数将鼠标捕获设置为属于当前线程的指定窗口。 当鼠标移动到捕获窗口时,或者当鼠标移动到捕获窗口并且按钮仍然关闭时按下鼠标按钮时,SetCapture捕获鼠标输入。 一次只有一个窗口可以捕捉鼠标。

如果鼠标指针位于另一个线程创建的窗口之上,则只有在鼠标按钮关闭的情况下,系统才会将鼠标指针指向指定的窗口。

HWND SetCapture(
  HWND hWnd   // 窗口句柄
);

参数

  • hWnd

  • [in] 当前捕获鼠标的线程中的窗口句柄。

返回值

返回值是先前捕获鼠标的窗口的句柄。 如果没有这样的窗口,则返回值为NULL。

备注

只有前景窗口才能捕捉鼠标。 当背景窗口尝试这样做时,窗口仅接收鼠标事件的消息,当光标热点位于窗口的可见部分内时发生。 另外,即使前景窗口捕捉到了鼠标,用户仍然可以点击另一个窗口,将其带到前台。

当窗口不再需要全部鼠标输入时,创建该窗口的线程应调用ReleaseCapture函数释放鼠标。

此函数不能用于捕获针对其他进程的鼠标输入。

捕获鼠标时,菜单热键和其他键盘快捷键不起作用。

Windows 95/98/Me: 调用SetCapture会导致失去鼠标捕获的窗口收到WM_CAPTURECHANGED消息。

示例代码

有关示例,请参见使用鼠标绘制线条。

要求

  Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。

  Windows 95/98/Me: 包含在Windows 95和更高版本中。

  头文件: 声明于 Winuser.h; 包含于 Windows.h.
  库: 使用 User32.lib.


SetActiveWindow-激活一个窗口

平台 SDK: Windows 用户接口

SetActiveWindow

SetActiveWindow函数激活一个窗口。 该窗口必须附加到调用线程的消息队列。

HWND SetActiveWindow(
  HWND hWnd   // 窗口句柄
);

参数

  • hWnd

  • [in] 要激活的顶层窗口句柄。

返回值

如果函数成功,则返回值是先前活动的窗口的句柄。

如果函数失败,返回值为NULL。 要获得扩展的错误信息,请调用GetLastError。

备注

SetActiveWindow函数激活一个窗口,但不是如果应用程序在后台。 当系统激活窗口时,如果窗口的应用程序位于前台,该窗口将被置于前台(Z顺序的顶部)。

如果由hWnd参数标识的窗口是由调用线程创建的,则调用线程的活动窗口状态将设置为hWnd。 否则,调用线程的活动窗口状态将设置为NULL。

通过使用AttachThreadInput函数,线程可以将其输入处理附加到另一个线程。 这允许线程调用SetActiveWindow来激活附加到另一个线程的消息队列的窗口。

要求

  Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。

  Windows 95/98/Me: 包含在Windows 95和更高版本中。

  头文件: 声明于 Winuser.h; 包含于 Windows.h.
  库: 使用 User32.lib.


ScrollWindowEx-滚动指定窗口客户区的内容

平台 SDK: Windows 用户接口

ScrollWindowEx

ScrollWindowEx函数滚动指定窗口客户区的内容。

int ScrollWindowEx(
  HWND hWnd,             // 窗口句柄
  int dx,                // 水平滚动
  int dy,                // 垂直滚动
  CONST RECT *prcScroll, // 客户区
  CONST RECT *prcClip,   // 剪切矩形
  HRGN hrgnUpdate,       // 要更新的区域句柄
  LPRECT prcUpdate,      // 无效区域
  UINT flags             // 滚动选项
);

参数

  • hWnd

  • [in] 客户区滚动的窗口句柄。

  • dx

  • [in] 指定水平滚动的数量(以设备单位表示)。 此参数必须为负值才能滚动到左侧。

  • dy

  • [in] 指定垂直滚动的数量(以设备单位表示)。 此参数必须为负值才能向上滚动。

  • prcScroll

  • [in] 指向RECT结构的指针,指定要滚动的客户区的部分。 如果此参数为NULL,则会滚动整个客户区。

  • prcClip

  • [in] 指向包含剪切矩形坐标的RECT结构的指针。 剪裁矩形内的设备位仅受影响。 从矩形外侧滚动到内侧的位被绘制; 从矩形内部滚动到外部的位不被绘制。 该参数可能为NULL。

  • hrgnUpdate

  • [in] 修改后的区域以保持滚动失效的区域句柄。 该参数可能为NULL。

  • prcUpdate

  • [out] 指向RECT结构的指针,该结构接收通过滚动无效的矩形的边界。 该参数可能为NULL。

  • flags

  • [in] 指定控制滚动的标志。 该参数可以是以下值之一。

    含义
    SW_ERASE当使用SW_INVALIDATE标志指定时,通过向窗口发送WM_ERASEBKGND消息擦除新失效的区域。
    SW_INVALIDATE滚动后,使hrgnUpdate参数标识的区域失效。
    SW_SCROLLCHILDREN滚动与prcScroll参数指向的矩形相交的所有子窗口。 子窗口按dx和dy参数指定的像素数滚动。 系统向所有与prcScroll矩形相交的子窗口发送WM_MOVE消息,即使它们不移动。
    SW_SMOOTHSCROLLWindows 98/Me, Windows 2000/XP: 使用平滑滚动滚动。 使用flags参数的HIWORD部分指示平滑滚动操作需要多长时间。


返回值

如果函数成功,则返回值为SIMPLEREGION(矩形无效区域),COMPLEXREGION(非矩形无效区域;重叠矩形)或NULLREGION(无效区域)。

如果函数失败,返回值为ERROR。 要获得扩展的错误信息,请调用GetLastError。

备注

如果未指定SW_INVALIDATE和SW_ERASE标志,则ScrollWindowEx不会使从中滚动的区域失效。 如果设置了这些标志中的任何一个,则ScrollWindowEx将使该区域失效。 在应用程序调用UpdateWindow函数,调用RedrawWindow函数(指定RDW_UPDATENOW或RDW_ERASENOW标志)或从应用程序队列中检索WM_PAINT消息之前,该区域不会更新。

如果窗口具有WS_CLIPCHILDREN样式,则由hrgnUpdate和prcUpdate指定的返回区域表示必须更新的滚动窗口的总面积,包括需要更新的子窗口中的任何区域。

如果指定了SW_SCROLLCHILDREN标志,则如果子窗口的一部分被滚动,则系统不会正确更新屏幕。 位于源矩形外部的滚动子窗口的部分未被擦除,并且未在其新目标中正确重绘。 要移动不完全位于由prcScroll指定的矩形内的子窗口,请使用DeferWindowPos函数。 如果设置了SW_SCROLLCHILDREN标志且光标矩形与滚动矩形相交,则光标将重新定位。

无论窗口是否具有CS_OWNDC或CS_CLASSDC类样式,所有输入和输出坐标(对于prcScroll,prcClip,prcUpdate和hrgnUpdate)均被确定为客户端坐标。 如有必要,使用LPtoDP和DPtoLP函数来转换逻辑坐标和从逻辑坐标转换。

示例代码

有关示例,请参阅滚动文本示例。

要求

  Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。

  Windows 95/98/Me: 包含在Windows 95和更高版本中。

  头文件: 声明于 Winuser.h; 包含于 Windows.h.
  库: 使用 User32.lib.


ScrollWindow-滚动指定窗口客户区的内容

平台 SDK: Windows 用户接口

ScrollWindow

ScrollWindow函数滚动指定窗口客户区的内容。

注意  ScrollWindow函数是为了向后兼容而提供的。 新的应用程序应该使用ScrollWindowEx函数。

BOOL ScrollWindow(
  HWND hWnd,              // 窗口句柄
  int XAmount,            // 水平滚动
  int YAmount,            // 垂直滚动
  CONST RECT *lpRect,     // 客户区
  CONST RECT *lpClipRect  // 剪切矩形
);

参数

  • hWnd

  • [in] 客户区滚动的窗口句柄。

  • XAmount

  • [in] 指定水平滚动的数量(以设备单位表示)。 如果正在滚动的窗口具有CS_OWNDC或CS_CLASSDC样式,则此参数使用逻辑单位而不是设备单位。 此参数必须为负值,才能将窗口的内容向左滚动。

  • YAmount

  • [in] 指定垂直滚动的数量(以设备单位表示)。 如果正在滚动的窗口具有CS_OWNDC或CS_CLASSDC样式,则此参数使用逻辑单位而不是设备单位。 该参数必须是一个负值,用于向上滚动窗口的内容。

  • lpRect

  • [in] 指向RECT结构的指针指定要滚动的客户区的部分。 如果此参数为NULL,则会滚动整个客户区。

  • lpClipRect

  • [in] 指向包含剪切矩形坐标的RECT结构的指针。 剪裁矩形内的设备位仅受影响。 从矩形外侧滚动到内侧的位被绘制; 从矩形内部滚动到外部的位不被绘制。

返回值

如果函数成功,返回值为非零。

如果函数失败,返回值为零。 要获得扩展的错误信息,请调用GetLastError。

备注

如果光标正在滚动的窗口中,ScrollWindow将自动隐藏脱字符以防止它被擦除,然后在滚动完成后恢复脱字符。 插入位置相应地进行调整。

ScrollWindow未覆盖的区域未被重新绘制,但它被合并到窗口的更新区域中。 应用程序最终会收到一条WM_PAINT消息,通知它该区域必须重新绘制。 要在滚动操作的同时重新绘制未覆盖区域,请在调用ScrollWindow后立即调用UpdateWindow函数。

如果lpRect参数为NULL,则窗口中任何子窗口的位置将偏移XAmount和YAmount参数指定的量; 窗口中的无效(未绘制)区域也被抵消。 当lpRect为NULL时,ScrollWindow更快。

如果lpRect不为NULL,则子窗口的位置不会更改,并且窗口中的无效区域不会被偏移。 为了防止在lpRect不为NULL时更新问题,请在调用ScrollWindow之前调用UpdateWindow重新绘制窗口。

示例代码

有关示例,请参阅滚动文本示例。

要求

  Windows NT/2000/XP: 包含在Windows NT 3.1和更高版本中。

  Windows 95/98/Me: 包含在Windows 95和更高版本中。

  头文件: 声明于 Winuser.h; 包含于 Windows.h.
  库: 使用 User32.lib.