日期:2022年06月20日
作者:Commas
注释:无论微信置顶功能,还是QQ截图钉在桌面上,本质上应该都是调用系统的API,将其窗体置前显示罢了,具体如何操作,请看下文。如果觉得有所帮助,帮忙点个赞支持一下,谢谢 ^ - ^
本文以VB6作为演示,其它语言的也是差不多的操作的。


文章目录

  • 一、置顶 or 钉一下 的效果示例图
  • 二、系统API之SetWindowPos的介绍
  • 三、VB6演示代码

一、置顶 or 钉一下 的效果示例图

二、系统API之SetWindowPos的介绍

SetWindowPos函数改变一个子窗口,弹出式窗口或顶层窗口的尺寸,位置和Z序。子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口。

Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _ByVal hWndInsertAfter As Long, _ByVal x As Long, _ByVal y As Long, _ByVal cx As Long, _ByVal cy As Long, _ByVal wFlags As Long) As Long
  • hWnd:在z序中的位于被置位的窗口前的窗口句柄,该参数必须为一个窗口句柄;

  • hWndInsertAfter:用于标识在z-顺序的此 CWnd 对象之前的 CWnd 对象。如果uFlags参数中设置了SWP_NOZORDER标记则本参数将被忽略。可为下列值之一:

参数 说明
HWND_BOTTOM 1 值为1,将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。
HWND_NOTOPMOST -2 值为-2,将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口已经是非顶层窗口则该标志不起作用。
HWND_TOP 0 值为0,将窗口置于Z序的顶部。
HWND_TOPMOST -1 值为-1,将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。
  • x,y,cx, cy 参数说明:
    x:以客户坐标指定窗口新位置的左边界;
    y:以客户坐标指定窗口新位置的顶边界;
    cx:以像素指定窗口的新的宽度;
    cy:以像素指定窗口的新的高度;

  • wFlags:窗口尺寸和定位的标志。该参数可以是下列值的组合:

参数 说明
SWP_FRAMECHANGED &H20 给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没有改变也会发送该消息。如果未指定这个标志,只有在改变了窗口尺寸时才发送WM_NCCALCSIZE。
SWP_HIDEWINDOW &H80 隐藏窗口。
SWP_NOACTIVATE &H10 不激活窗口。如果未设置标志,则窗口被激活,并被设置到其他最高级窗口或非最高级组的顶部(根据参数hWndlnsertAfter设置)。
SWP_NOCOPYBITS &H100 清除客户区的所有内容。如果未设置该标志,客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。
SWP_NOMOVE &H2 维持当前位置(忽略x和y参数)。
SWP_NOOWNERZORDER &H200 不改变z序中的所有者窗口的位置。
SWP_NOREDRAW &H8 不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。
SWP_NOREPOSITION &H200 与SWP_NOOWNERZORDER标志相同。
SWP_NOSENDCHANGING &H200 防止窗口接收WM_WINDOWPOSCHANGING消息。
SWP_NOSIZE &H1 维持当前尺寸(忽略cx和Cy参数)。
SWP_NOZORDER &H4 维持当前Z序(忽略hWndlnsertAfter参数)。
SWP_SHOWWINDOW &H40 显示窗口。
TOPMOST_FLAGS1 SWP_NOMOVE Or SWP_NOSIZE 维持当前位置(忽略x和y参数),并且 维持当前尺寸(忽略cx和cy参数)。

三、VB6演示代码

窗体上放两个控件:
1、CommandButton,将其命名为CmdNewForm
2、CheckBox,将其命名为ChkTopForm

Option Explicit'接口说明:=========================================
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long'(1)hWnd:在z序中的位于被置位的窗口前的窗口句柄,该参数必须为一个窗口句柄'(2)hWndInsertAfter:用于标识在z-顺序的此 CWnd 对象之前的 CWnd 对象。如果uFlags参数中设置了SWP_NOZORDER标记则本参数将被忽略。可为下列值之一:
Private Enum e_hWndlnsertAfter'值为1,将窗口置于Z序的底部。如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。HWND_BOTTOM = 1'值为-2,将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。如果窗口已经是非顶层窗口则该标志不起作用。HWND_NOTOPMOST = -2'值为0,将窗口置于Z序的顶部。HWND_TOP = 0'值为-1,将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。HWND_TOPMOST = -1
End Enum'(3)x,y,cx,cy参数说明
' x:以客户坐标指定窗口新位置的左边界
' y:以客户坐标指定窗口新位置的顶边界
'cx:以像素指定窗口的新的宽度
'cy:以像素指定窗口的新的高度'(4)wFlags:窗口尺寸和定位的标志。该参数可以是下列值的组合:
Private Enum e_wFlags' 给窗口发送WM_NCCALCSIZE消息,即使窗口尺寸没有改变也会发送该消息。如果未指定这个标志,只有在改变了窗口尺寸时才发送WM_NCCALCSIZE。SWP_FRAMECHANGED = &H20' 隐藏窗口。SWP_HIDEWINDOW = &H80' 不激活窗口。如果未设置标志,则窗口被激活,并被设置到其他最高级窗口或非最高级组的顶部(根据参数hWndlnsertAfter设置)。SWP_NOACTIVATE = &H10' 清除客户区的所有内容。如果未设置该标志,客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。SWP_NOCOPYBITS = &H100' 维持当前位置(忽略x和y参数)。SWP_NOMOVE = &H2' 不改变z序中的所有者窗口的位置。SWP_NOOWNERZORDER = &H200' 不重画改变的内容。如果设置了这个标志,则不发生任何重画动作。适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。SWP_NOREDRAW = &H8' 与SWP_NOOWNERZORDER标志相同。SWP_NOREPOSITION = &H200' 防止窗口接收WM_WINDOWPOSCHANGING消息。SWP_NOSENDCHANGING = &H200' 维持当前尺寸(忽略cx和Cy参数)。SWP_NOSIZE = &H1' 维持当前Z序(忽略hWndlnsertAfter参数)。SWP_NOZORDER = &H4' 显示窗口。SWP_SHOWWINDOW = &H40' 维持当前位置(忽略x和y参数),并且 维持当前尺寸(忽略cx和cy参数)。TOPMOST_FLAGS = SWP_NOMOVE Or SWP_NOSIZE
End Enum
'接口说明:=========================================Private Sub ChkTopForm_Click()
On Error Resume NextIf Me.ChkTopForm.Value = 1 ThenSetWindowPos Me.hWnd, e_hWndlnsertAfter.HWND_TOPMOST, 0, 0, 0, 0, e_wFlags.TOPMOST_FLAGSElseSetWindowPos Me.hWnd, e_hWndlnsertAfter.HWND_NOTOPMOST, 0, 0, 0, 0, e_wFlags.TOPMOST_FLAGSEnd If
End SubPrivate Sub CmdNewForm_Click()
On Error Resume NextDim f As New Form1f.Caption = "新窗口"Load ff.Show 0
End Sub

本文参考:
1、《百度百科之SetWindowPos》


版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/125346839

vb6实现类似微信窗体置顶功能以及QQ截图钉在桌面上的功能相关推荐

  1. 如何在项目中实现类似于微信的置顶与取消置顶的功能?

    - 借鉴微信的置顶与取消置顶的实现思路: 会看到这个微信的聊天记录的排序规则是以时间降序来进行排序的,如果要实现置顶与取消置顶? 一下子是想不到的,需要思路 由此可以确信的是,我们平时使用微信时,最新 ...

  2. 如何将Windows系统自带的计算器窗体置顶

    Windows系统自带的"计算器"程序,是我们经常使用的一个工具,但是"计算器"程序的窗体因为没有将自己置顶的功能,我们使用的时候并不是很方便.今天,小编给大家 ...

  3. C# Winform窗体置顶(解决this.this.TopMost = true失效的问题)

    方法一 按照以下三个步骤来可以解决该问题: ShowInTaskbar 属性设置为 false TopMost 属性设置为 true 在 load 方法里设置this.TopMost=true 方法二 ...

  4. 微信新出置顶公众号功能,优质自媒体的春天!

    昨天,微信进行了更新,由原来的微信WeChat 6.3.15版本升级到WeChat 6.3.16版本,这一次的更新,包括可将Apple Music中的在线音乐分享到微信.标签中可以更便捷地查找标签成员 ...

  5. 哪些窗体置顶得程序是怎么实现得?

    窗口置顶即不允许其他窗口在我之上,比如微信聊天窗口中右上角的钉子按钮,确认后,普通窗口不能在他之上,但是也不是绝对的,同样具有置顶属性的窗口也能覆盖掉他,这些是通过WindowsApi中的SetWin ...

  6. 让程序员崩溃的微信群消息置顶

    对于微信群里的消息,你是不是经常选择无视或者已读不回.但最近,微信推出的一个群聊新功能,可能让你再也没法假装看不到了. 6月14日,微信宣布推出群聊消息置顶功能,当天,相关话题冲上热搜第一,引起网友热 ...

  7. 仿微信聊天置顶,删除效果

    实现类似微信聊天中的消息的置顶删除效果 Java代码: package com.example.fangweixin;import java.util.ArrayList;import android ...

  8. 微信如何置顶文字?原来方法这么简单,1分钟就搞定了

    最近,微信有一个功能迅速在朋友圈火爆,不少的小伙伴都把这个功能分享在朋友圈或者是抖音视频中.那么,这个功能是什么呢?这个功能叫"微信置顶文字",就是在我们的手机微信聊天界面置顶一句 ...

  9. 微信小技能:微信收藏置顶变身程序员的日常待办事项和月计划(跟我一起做计划)

    文章目录 引言 I 微信小技能 1.3 收藏的使用技巧:微信变身代办事项 1.2 群管理技巧 1.3 微信号有效阅读 see also 引言 微信的收藏不仅支持置顶到聊天窗口,还支持添加待办事项,因此 ...

最新文章

  1. CentOS7:Thrift的安装
  2. 网络协议是什么?—Vecloud微云
  3. CTFshow php特性 web104
  4. iOS开发之自定义View
  5. SpringBoot中整合Mail实现发送邮件
  6. 速学c++(3)-函数
  7. RocketMQ的历史发展
  8. 给脚本添加到环境变量_让你的脚本可以在任意地方都可执行的几个方法
  9. GPU Gems2 - 8 使用距离函数的逐像素位移贴图
  10. 字符串经典题目(Leetcode题解-Python语言)
  11. linux上p图工具,linux图片处理工具GraphicsMagick安装使用
  12. 游戏提高性能 游戏降帧处理
  13. 如何看懂串口通讯协议_一文看懂PLC的通讯方式——AB系统(一)
  14. 情商低的七种表现,你占了几个
  15. 力扣172.阶乘后的零
  16. MySQL高级知识(十)——批量插入数据脚本
  17. python 闭包,装饰器,random,os,sys,shutil,shelve,ConfigParser,hashlib模块
  18. 模版,自定义按钮背景xml
  19. 为什么刚度阵对称?根本原因在于物理方程。知识点:矩阵微积分,物理方程
  20. 世界上最简单的会计书-笔记

热门文章

  1. 【JZOJ A组】刺客信条
  2. intllij idea -- 文件行数过多出现卡顿,特别卡
  3. 程序员也有文艺的,分享最近读的好诗
  4. 如何使用python批量合并excel表格
  5. php+ajax 仿百度搜索效果
  6. 斐波那契数列和矩阵的特征值于特征向量的关系
  7. Android 使用按键精灵获取当前运行的app的组件名称
  8. 实验17 Pandas数据处理
  9. Ubuntu 中WPS乱码问题
  10. 【snipaste介绍与使用】