0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

API技巧集(三)

OBEason 来源:jf_88563726 作者:jf_88563726 2023-05-23 11:10 次阅读

(一)闪烁程序的标题栏

在某些专业的应用程序中,当程序需要提醒用户或要引起用户的注意时,就不停地闪烁程序的标题栏。要实现这个功能,只需要一个Timer组件和使用一个API函数--FlashWindow。

使用API函数FlashWindow可以闪烁显示指定窗口,让窗口在活动与非活动的状态之间切换,它有两个参数:hwnd和bInvert,头文件为“winuser.h”。其中,参数hwnd为要闪烁的窗口句柄,参数bInvert是一个bool变量,设为true时,程序窗口标题栏从活动切换到非活动状态、或反向切换,当设为false时,窗口标题栏还原为最初的状态。如果配合一个时间组件(Timer组件),以一定的时间间隔执行语句:

FlashWindow( Form1-$#@62;Handle,true);

程序窗口的标题栏就在活动、非活动的状态之间不停地切换。若把hwnd指定成为应用程序的句柄( Application-$#@62;Handel),将会闪烁程序在任务栏上的标题栏。

下面就让我们来做一个闪烁窗口标题栏和任务栏上标题栏的程序。

首先,在Form1中添加三个按钮Button1、Button2和Button3,把它们的属性分别为“闪烁窗口标题栏”、“闪烁任务标题栏”和“停止闪烁”,再加入两个时间组件Timer1和Timer2,将两个Timer组件的Enabled属性都设为false,将Interval属性都设为为500(即半秒),改变这个属性的值可以修改闪烁的频率。

然后,双击Timer1,在OnTimer事件中加入:

FlashWindow( Form1-$#@62;Handle,true);

双击Timer2,在OnTimer事件中加入:

FlashWindow( Application-$#@62;Handel,true);

双击Button1,在Button1的OnClick事件中加入:

Timer1-$#@62;Enabled=true;

双击Button2,在Button2的OnClick事件中加入:

Timer2-$#@62;Enabled=true;

最后,双击Button3,在Button3的OnClick事件中加入:

Timer1-$#@62;Enabled=false;

Timer2-$#@62;Enabled=false;

FlashWindow( Form1-$#@62;Handle,false);

FlashWindow( Application-$#@62;Handel,false);

这样,一个简单的例子就完成了。按F9编译运行程序,你就可闪烁窗口标题栏或是闪烁任务栏上? 题栏了。

(二)拖动无标题窗体

现在的Windows应用程序,大都使用了图形化的界面、不规则窗口技术,使得程序界面更加漂亮了。但是,使用界面一般要先把窗体的标题栏去掉(在BCB中,将窗体的BorderStyle属性设为bsNone,就可以把窗体的标题栏去掉),这样就不能使用原来的标题栏了,出现了窗口不能移动的问题。没有标题栏怎样用鼠标拖动窗体呢?我们可以使用Windows的API函数SendMessage来解决这个问题。

首先,新建一个工程,把窗体的BorderStyle属性设为bsNone去掉窗体的标题栏,按F12键切换到代码编辑窗口,在头部加入包含头文件"winuser.h"的代码:

#include $#@60;winuser.h$#@62;

然后,在窗体的 OnMouseDown 事件中加入下面的代码:

if(Button == mbLeft)//判断是否按了鼠标左键

{

ReleaseCapture();//释放鼠标操作

SendMessage( Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);

}

这样,用鼠标左键点住窗口拖动,就可以实现拖动没有标题的窗口了。也可以在窗体上添加组件,然后在该组件的 OnMouseDown 事件中加入上面的代码,这样也可以点住这个组件拖动窗口。你还可以把SendMessage函数的第一个参数修改为这个组件的句柄,如:往窗体添加一个Button组件,在它的 OnMouseDown 事件中加入上面的代码,其中把SendMessage那行语句改为:

SendMessage( Button1-$#@62;Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);

这样就可以在程序运行时,用鼠标在窗口的范围内移动Button1了。

(三)隐藏程序在任务栏的图标

使用API函数ShowWindow可以隐藏一个程序在任务栏的图标,它被包含在头文件“winuser.h”里面。

1、隐藏任务栏图标的代码就是:

ShowWindow( Application-$#@62;Handle, SW_HIDE);

2、要重新显示的时候就使用:

ShowWindow( Application-$#@62;Handle, SW_SHOW);

但是,如果将程序最小化后,在任务栏的图标就会重新出现。若要在程序还原最小化后,程序在任务栏的图标重新被隐藏起来,可以在窗体的OnPaint事件中加入隐藏程序在任务栏的图标的代码,这样,程序只有在最小化时任务栏才会出现图标,当程序还原最小化时图标又会重新被隐藏起来。

(四)重启、关闭Windows

当用户修改了Windows里面的一些设置,Windows经常会提问是否要重新启动计算机,当用户点Yes的时候,计算机将会自动重启。这个就是API函数ExitWindowsEx的一个典型的应用。

ExitWindowsEx,顾名思义就是退出Windows的函数,它有两个参数,第一个是退出Windows的选项,常用的有:EWX_REBOOT(重新启动计算机),EWX_SHUTDOWN(关闭计算机),EWX_LOGOFF(注销当前用户),第二个参数系统保留没有使用,可设为0。

在自编的程序中(如:注册表修改程序),当用户修改了某项设置需要重新启动计算机的时候,就要使用EWX_REBOOT选项重启计算机。如:

ExitWindowsEx(EWX_REBOOT,0);

使用WX_SHUTDOWN选项,可以实现关机。如:

ExitWindowsEx(EWX_SHUTDOWN,0);

当需要注销的时候,就使用EWX_LOGOFF选项。如:

ExitWindowsEx(EWX_LOGOFF,0);


审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1483

    浏览量

    61799
收藏 人收藏

    评论

    相关推荐

    IP风险画像详细接入规范、API参数(Ipdatacloud)

    的风险行为标签、代理、真人率、秒拨概率等风险特征和潜在风险。 数据示例: 产品的详细接入文档、API参数如下: 接口地址:https://api.ipdatacloud.com 请求方式 输出
    的头像 发表于 11-15 11:11 147次阅读
    IP风险画像详细接入规范、<b class='flag-5'>API</b>参数(Ipdatacloud)

    api驱动的云服务是什么意思?

    API驱动的云服务是指利用API技术来驱动和提供云服务的模式。在这种模式下,云服务提供商会公开一系列的API接口,允许开发者或应用程序通过调用这些API来实现对云服务的访问和操作。
    的头像 发表于 11-14 10:06 108次阅读

    API :软件程序间沟通的桥梁

    或许我们不清楚API是什么,但在现实生活中,API的应用场景却远远超出了我们的想象。举个例子来说,当我们想要搜索某个IP地址时,通常是利用API与离线库两种方式去获取数据信息,那么或许你会疑惑到底
    的头像 发表于 08-27 15:54 201次阅读

    全球视野下的API资源,看幂简集成如何整合国内外API

    在全球数字化浪潮的推动下,API(应用程序编程接口)已成为连接不同系统和数据的桥梁,是企业数字化转型的关键。全球各地的企业都在进行数字化转型,它们不约而同地寻求通过API快速集成新技术,以提高效率
    的头像 发表于 07-30 14:23 287次阅读
    全球视野下的<b class='flag-5'>API</b>资源,看幂简集成如何整合国内外<b class='flag-5'>API</b>

    鸿蒙元服务API全新呈现-开发更清晰高效

    鸿蒙元服务API全新呈现,开发更清晰高效,具体见如下截图,深黑色部分即本阶段公布支持的元服务API。 本材料整理来源于HarmonyOS NEXT Developer Beta1官
    发表于 07-11 10:23

    如何理解机器学习中的训练、验证和测试

    理解机器学习中的训练、验证和测试,是掌握机器学习核心概念和流程的重要一步。这者不仅构成了模型学习与评估的基础框架,还直接关系到模型性能的可靠性和泛化能力。以下是一篇深入探讨这
    的头像 发表于 07-10 15:45 3160次阅读

    ChatGPT-4 API 密钥:官方申请指南及国内直连使用攻略

    如何使用 ChatGPT 4.0 API 一、获取 API Key 要使用 ChatGPT 4.0,首先需要获取一个 API Key,它将作为访问 token 额度的凭证。您可以通过以下步骤获取
    的头像 发表于 05-29 17:08 6023次阅读
    ChatGPT-4 <b class='flag-5'>API</b> 密钥:官方申请指南及国内直连使用攻略

    华为云发布 CodeArts API,为 API 护航

    4 月 10 日,华为云正式发布 API 全生命周期管理一体化协作平台 CodeArts API,支持开发者高效实现 API 设计、开发、测试、托管、运维、变现的一站式体验。以 API
    的头像 发表于 05-09 23:17 486次阅读
    华为云发布 CodeArts <b class='flag-5'>API</b>,为 <b class='flag-5'>API</b> 护航

    谷歌开放ZenDeviceEffects API,助第方应用实现睡前屏幕管理

    据报道,谷歌近日在安卓 15 开发者预览版 2 中推出了全新 ZenDeviceEffects API,允许第方应用访问数字健康的就寝模式功能。
    的头像 发表于 05-08 16:41 456次阅读

    什么是国外API代理?

    API
    jf_60146132
    发布于 :2024年04月30日 06:47:18

    OpenAI API Key获取与充值教程:助开发者解锁GPT-4.0 API

    OpenAI 的 API Key,以及如何使用这个 Key 来调用 GPT-4.0 API。 第一步:获取 OpenAI API Key 要开始使用 OpenAI 的服务,你首先需要注册并获取一个
    的头像 发表于 04-28 16:35 9942次阅读
    OpenAI <b class='flag-5'>API</b> Key获取与充值教程:助开发者解锁GPT-4.0 <b class='flag-5'>API</b>

    API安全风险显现,F5助API实现可信访问

    API在现代软件开发中占据着重要地位,是应用和数据的网关,实时API更是构建数字业务的基础。Salt Labs报告显示,过去6个月中,API攻击活动数量快速增长了400%,可见API
    的头像 发表于 04-17 16:09 413次阅读
    <b class='flag-5'>API</b>安全风险显现,F5助<b class='flag-5'>API</b>实现可信访问

    Kubernetes Gateway API攻略教程

    Kubernetes Gateway API 刚刚 GA,旨在改进将集群服务暴露给外部的过程。这其中包括一套更标准、更强大的 API资源,用于管理已暴露的服务。在这篇文章中,我将介绍 Gateway
    的头像 发表于 01-12 11:32 848次阅读
    Kubernetes Gateway <b class='flag-5'>API</b>攻略教程

    极管的共放大器设计与分析

    极管共放大器是一种常见的电子电路,广泛应用于信号处理、通信等领域。本文将介绍极管共放大器的设计与分析方法。 一、极管共
    的头像 发表于 12-30 17:09 1252次阅读
    <b class='flag-5'>三</b>极管的共<b class='flag-5'>集</b>放大器设计与分析

    调用第API接口会遇到哪些问题?如何解决?

    在实际工作中,我们经常需要在项目中调用第API接口,获取数据,或者上报数据,进行数据交换和通信。
    的头像 发表于 11-30 11:05 2177次阅读
    调用第<b class='flag-5'>三</b>方<b class='flag-5'>API</b>接口会遇到哪些问题?如何解决?