setwindowpos(怎么使setwindowpos函数)
本文目录
怎么使setwindowpos函数
SetWindowPos函数详解WinAPI: SetWindowPos - 改变窗口的位置与状态SetWindowPos(hWnd: HWND; {窗口句柄}hWndInsertAfter: HWND; {窗口的 Z 顺序}X, Y: Integer; {位置}cx, cy: Integer; {大小}uFlags: UINT {选项}): BOOL;//hWndInsertAfter 参数可选值:HWND_TOP = 0; {在前面}HWND_BOTTOM = 1; {在后面}HWND_TOPMOST = HWND(-1); {在前面, 位于任何顶部窗口的前面}HWND_NOTOPMOST = HWND(-2); {在前面, 位于其他顶部窗口的后面}//uFlags 参数可选值:SWP_NOSIZE = 1; {忽略 cx、cy, 保持大小}SWP_NOMOVE = 2; {忽略 X、Y, 不改变位置}SWP_NOZORDER = 4; {忽略 hWndInsertAfter, 保持 Z 顺序}SWP_NOREDRAW = 8; {不重绘}SWP_NOACTIVATE = $10; {不激活}SWP_FRAMECHANGED = $20; {强制发送 WM_NCCALCSIZE 消息, 一般只是在改变大小时才发送此消息}SWP_SHOWWINDOW = $40; {显示窗口}SWP_HIDEWINDOW = $80; {隐藏窗口}--------------------------------------------------------------------------------------SetWindowPos()函数功能:该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序。子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口。函数原型:BOOL SetWindowPos(HWN hWnd,HWND hWndlnsertAfter,int X,int Y,int cx,int cy,UNIT.Flags);参数:hWnd:窗口句柄。hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。该参数必须为一个窗口句柄,或下列值之一:HWND_BOTTOM:将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。HWND_DOTTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口已经是非顶层窗口则该标志不起作用。HWND_TOP:将窗口置于Z序的顶部。HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。查看该参数的使用方法,请看说明部分。x:以客户坐标指定窗口新位置的左边界。Y:以客户坐标指定窗口新位置的顶边界。cx:以像素指定窗口的新的宽度。cy:以像素指定窗口的新的高度。uFlags:窗口尺寸和定位的标志。该参数可以是下列值的组合:SWP_ASNCWINDOWPOS:如果调用进程不拥有窗口,系统会向拥有窗口的线程发出需求。这就防止调用线程在其他线程处理需求的时候发生死锁。SWP_DEFERERASE:防止产生WM_SYNCPAINT消息。SWP_DRAWFRAME:在窗口周围画一个边框(定义在窗口类描述中)。SWP_FRAMECHANGED:给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没有改变也会发送该消息。如果未指定这个标志,只有在改变了窗口尺寸时才发送WM_NCCALCSIZE。SWP_HIDEWINDOW;隐藏窗口。SWP_NOACTIVATE:不激活窗口。如果未设置标志,则窗口被激活,并被设置到其他最高级窗口或非最高级组的顶部(根据参数hWndlnsertAfter设置)。SWP_NOCOPYBITS:清除客户区的所有内容。如果未设置该标志,客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。SWP_NOMOVE:维持当前位置(忽略X和Y参数)。SWP_NOOWNERZORDER:不改变z序中的所有者窗口的位置。SWP_NOREDRAW: 不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。SWP_NOREPOSITION;与SWP_NOOWNERZORDER标志相同。SWP_NOSENDCHANG
MoveWindow和setwindowpos的区别
你好,区别如下:要区分MoveWindow和setwindowpos的区别,我们先从msdn上入手:1、MoveWindowThis function changes the position and dimensions of the specified window. For a top-level window, the position and dimensions are relative to the upper-left corner of the screen. For a child window, they are relative to the upper-left corner of the parent window’s client area.BOOL MoveWindow( HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint ); MoveWindow sends WM_WINDOWPOSCHANGED, WM_MOVE, WM_SIZE, and WM_NCCALCSIZE messages to the window. (这里很重要,说明MoveWindow函数内部不做真实的窗口处理,而是发送了一组消息,让其他函数进行处理,其实这个函数就是SetWindowPos,我们可以继续往下看)2、SetWindowPosThis function changes the size, position, and z-order of a child, pop-up, or top-level window. Child, pop-up, and top-level windows are ordered according to their appearance on the screen. The topmost window receives the highest rank and is the first window in the z-order.BOOL SetWindowPos( HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags ); SetWindowPos always causes a WM_WINDOWPOSCHANGED message to be sent to the window. The flags passed in this message are exactly the same as those passed into the function. No other messages are sent by this function. (SetWindowPos包含了z-order的设置,其功能比MoveWindow更为强大,包含了一组设置窗口显示状态的标志。然而,MoveWindow和SetWindowPos更本质的区别是,MoveWindow做了更多额外的事情,发送WM_MOVE, WM_SIZE, and WM_NCCALCSIZE等多种消息给窗口,而SetWindowPos则显的单纯的多,只发送了WM_WINDOWPOSCHANGED消息给窗口)从上面可以看出MoveWindow和SetWindowPos实现的功能基本是一致的,但还是存在细微的差别,关键的一点是MoveWindow不仅通知窗口进行SetWindowPos操作,而且还发送了一批消息,告知窗口显示改变了,这样窗口就可以在内部进行一些操作。这点对处理ActiveX控件的resize很重要,在ActiveX控件中往往通过WM_SIZE消息处理关联窗口resize的窗口调整,所以在调用方必须使用MoveWindow才能使ActiveX控件实现resize。
更多文章:
显卡和cpu的区别(cpu和显卡到底有什么区别,什么是图形计算)
2024年1月23日 14:40
实体店买笔记本要注意什么(去实体店买笔记本的流程,要注意些什么)
2024年9月2日 23:20
联想ideapad最新机型(联想ideapad300s14isk主板型号)
2024年7月15日 00:58
索尼清朝大臣(清朝康熙皇帝身边都有哪些重要的大臣分管什么的官职几品)
2024年2月26日 19:20
华硕b365m主板(华硕主板B365M-BASALT多大尺寸,属于什么板型的)
2024年9月8日 21:30
华硕超极本s46c(华硕超极本S46C的触控板锁不了,买回来能锁 ,到现在不知道怎么不能锁了!!求大神指点!!!)
2024年6月11日 15:24
ibmthinkpad(联想 IBM thinkpad 之间什么关系)
2024年7月18日 19:22
华硕x8ain笔记本无线网卡怎么驱动?华硕x8ain设置固态硬盘的引导
2024年9月7日 10:40
三星笔记本r440配置(想问一下,三星R440可以加内存嘛还有显卡可以换吗要求带dnf不卡)
2024年9月15日 23:40