- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MoveWindow() SetWindowPos()的区别于联系由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
敲代码时,突然发现有一个背景图片无法显示,百思不得其解,最终发现是MoveWindow() SetWindowPos()这两个函数的使用不当造成的.
这里把这两个函数的前世今生给分析一下.
先看MoveWindow()函数,用于改变窗口的位置和尺寸,对于顶层窗口,按照屏幕对齐与左上角,对于子窗口,则对齐与父窗口的左上角.
BOOL MoveWindow( HWND hWnd,int x, int y, int nWidth, int nHeight,BOOL bRepaint = TRUE),
第一个表示窗口句柄; 。
参数x,y表示窗口的左上角起点; 。
参数nwidth,nHeight 表示窗口高度和宽度; 。
最后一个bRepaint表示是否立即重绘。为true时系统会立即发送WM_PAINT到窗口程序(会调用UpdateWindow()函数),为false时不会发生任何类型的重绘操作.
MoveWindow会给窗口发送WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED,WM_MOVE,WM_SIZE和WM_NCCALCSIZE消息.
接下来看SetWindowPos(),这个函数同样用来实现窗口移动操作,只不过功能更多一点.
BOOL SetWindowPos(HWND hWnd,const CWnd* pWndInsertAfter, int x, int y,int cx, int cy, UINT nFlags),
第一个参数是窗口句柄; 。
第二个参数是窗口的Z order,就是有多个窗口时,本窗口显示的顺序,最上面或者最下面,可选参数有HWND_BOTTOM,HWND_NOTOPMOST,HWND_TOP,HWND_TOPMOST. 。
HWND_BOTTOM:将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。 HWND_NOTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口已经是非顶层窗口则该标志不起作用。 HWND_TOP:将窗口置于Z序的顶部。 HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置.
接下来四个参数是窗口的位置和尺寸.
最后一个参数nFlags是窗口显示方式的标志,这个参数很多,可以组合使用,详细如下:
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_NOSENDCHANGING:防止窗口接收WM_WINDOWPOSCHANGING消息。 SWP_NOSIZE:维持当前尺寸(忽略cx和Cy参数)。 SWP_NOZORDER:维持当前Z序(忽略hWndlnsertAfter参数)。 SWP_SHOWWINDOW:显示窗口.
注意事项:
使用SetWindowPos()如果设置了SWP_SHOWWINDOWS或者SWP_HIDEWINDOW,那么窗口将不能被移动和改变大小,我使用时就是设置了SWP_SHOWWINDOW,从而导致不能重绘背景.
两者的比较:
两者都能实现移动和改变窗口大小.
MoveWindow()功能比较单一,只能移动和改变窗口大小,而SetWindowPos()可以设置更多的参数,实现Zorder及显示方式标志.
MoveWindow()发送WM_WINDOWPOSCHANGING,WM_WINDOWPOSCHANGED,WM_MOVE,WM_SIZE和WM_NCCALCSIZE等消息到窗口,SetWindowPos()只发送WM_WINDOWPOSCHANGED消息到窗口。所以说如果需要发送更多消息时还是使用MoveWindow()的好.
最后此篇关于MoveWindow() SetWindowPos()的区别于联系的文章就讲到这里了,如果你想了解更多关于MoveWindow() SetWindowPos()的区别于联系的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在尝试连接到 webapi,该位置在我的 js jquery 文件中看起来像这样。 example.com/?var=input 有没有比 ajax 调用更简单的方法? 最佳答案 我会为此使用 A
我编写了 PHP 代码,它连接到 MYSQL 来查找信息,将其发送到 API,并获取响应以写回到新表中。 有时它工作得很好,有时则不然。如果没有,它会给我这个错误 You have an error
每个子列表都意味着他们是 friend ,现在我想创建一个函数 def is_connected_via_friendships_with 来检查他们是否通过与另一个人的友谊联系在一起。例如,玛丽是卢
我正在尝试将 Cassandra 与 Hector 联系起来: public class Main { public static void main(String[] args) {
我正在使用 mautic API 进行电子邮件列表和电子邮件发送。我正在尝试使用 mautic API auth2.0 获取所有电子邮件列表我正在正确获取访问 token ,但是当我像这样调用电子邮件
我已经与Windows Forms Application进行了简单的聊天。我正在使用套接字,当我尝试连接本地IP时,一切正常,并且可以在本地发送消息。 但是,当我尝试使用外部IP连接到我的 frie
我正在开发我的第一个 GWT 应用程序,它将使用来自 RESTful API 的数据。 我试图找出构建整个应用程序的最佳方法。 GWT 客户端应该与 Java 服务器端联系,然后再联系 API,还是
我对线程中的异常处理有疑问。我有一个简单的 WCF 服务,它需要一些字节作为输入。此 WCF 服务是从控制台应用程序调用的。 方法片段(我的方法) try { _service.ImportBy
我正在尝试编写一个基本的卷应用程序。由于我是用 Ruby 编写的,因此我不想扩展 C 库或使用 ffi ,而是尝试使用 ruby-dbus 编写它,我使用 Address 获得了 /org/pulse
我知道在 CRM 2011 中您无法将联系人转换为潜在客户。在 CRM 2013 中是否可行。 简单来说,我创建了一个联系人并将其分组到一个帐户中。我想将此联系人转换为潜在客户,以便我可以输入销售信息
如何在我的网站页面上添加共享按钮,我们可以使用以下代码在移动 HTML 页面上添加发送短信: title 如何在 Viber、Watsapp 等分享中使用此示例 最佳答案 仅限 HTML 页面。我通常
我想了解 Azure 在门户中创建 Web 应用程序机器人时会做什么。 An Azure Bot Service Bot deployed to an Azure App Service Web Ap
我目前正在构建 Android 4.4。与 seek-for-android在我的 Nexus 5 上获得 UICC 支持。 到目前为止还没有成功。我确实应用了提到的所有补丁 here和 here .
我开发了一个用于农村 Activity 和监控/管理的应用程序。 我的应用程序在白天收集了大量数据,需要将其发送到云端进行处理和分析。在一个正常的 8 小时工作日中,它可以收集多达 2Gb 的数据(大
我编写了一个连接器来从 mysql 获取数据,当 iam 在路由内运行 Mysql 连接器时,它显示错误,并且浏览器正在运行到无限循环。 var express = require('express'
我最近有一个高级主题,mailchimp 的表单看起来非常酷。 我想知道我是否可以将样式用于我的 3 Field Based Contact 表单“REQUEST A CALL BACK”- 名称输入
我正在尝试将基本的 onClick 事件附加到设备中的联系人列表。联系人列表已正确生成。我的代码摘要如下: public class Contacts extends AppCompatActivit
我有一种方法可以根据 Active Directory 验证用户凭据。我想将此方法与 SSL 结合使用,但无法正常工作。 主要问题是我有一个在我们网络之外的服务器(它叫 DMZ 吗?)。从那里我想联系
我正准备在 symfony Doctrine 中开始一个项目,但我必须与多个数据库建立连接。其中之一是无法使用 ORM 映射的现有数据库 (SQL SERVER)。是否有可能将此数据库与另一个未在 D
尝试为 openstack USSURI 版本设置 Controller 节点时。我被要求将 Glance 服务设置为 VM 图像管理子服务。 根据要求:article (在 ubuntu 18.04
我是一名优秀的程序员,十分优秀!