VC++玩转炫酷悬浮窗1---悬浮窗的实现

??

目标
实现像迅雷那样炫酷的悬浮窗。
计划&方案
首先第一步要实现一个悬浮窗,窗体无边框,能够随意拖动。
对于一个窗体来说,只有我们把鼠标放到标题栏中才进入到拖拽模式。
由于是无边框的窗体,默认是不能够移动的。我们尝试用两种办法使其跟随鼠标移动。一个是用OnNcHitTest函数,另一个是在OnLButtonDown时发消息。
实践
一、 OnNcHitTest方案
这个CWnd类的一个方法,我们可以捕捉鼠标点击的坐标,然后将其HTCLIENT结果偷换成HTCAPTION,这样就可以让系统误以为鼠标左键点击的是标题栏,就进入了拖拽模式了。官网参考点这里

代码十分简单,只需要重载OnNcHitTest就可以。代码填加三处:
1. 头文件

afx_msg LRESULT OnNcHitTest(CPoint pt);

2. 注册消息

BEGIN_MESSAGE_MAP(CAfloatWindowDlg, CDialogEx)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
    ON_WM_NCHITTEST()
END_MESSAGE_MAP()

3. 函数编写

LRESULT CAfloatWindowDlg::OnNcHitTest(CPoint pt)
{
    LRESULT nHitTest = CDialog::OnNcHitTest(pt);
    if(nHitTest == HTCLIENT)
    {
        nHitTest = HTCAPTION;
    }
    return nHitTest;
}

二、 OnLButtonDown方案
在程序获得左键按下的状态时,发送以下任一系统消息都可以实现悬浮窗的拖拽。
1.SendMessage(WM_SYSCOMMAND, SC_MOVE | HTCAPTION, 0);
2.PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));

三、 无边框窗体
Dialog属性中,将Border的属性设为None。
四、 显示png图片
VC对显示png并没有提供很好的支持。本以为像bmp那样,用Picture Control就可以显示出来呢。现在找到一个临时的方案,在OnPaint中将png图片绘制出来。代码如下:

 if (IsIconic())
 {
  ...
 }
 else
 {
        CImage img;
        CPaintDC dc(this);
        if(!img.IsNull()) img.Destroy();
        HRESULT result = img.Load(_T("prime.png"));
        if(!img.IsNull()) img.Draw(dc.m_hDC, 0, 0);
        img.Destroy();
 CDialogEx::OnPaint();
 }

源码在此

VC++玩转炫酷悬浮窗1---悬浮窗的实现

时间: 2024-10-14 07:03:06

VC++玩转炫酷悬浮窗1---悬浮窗的实现的相关文章

VC++玩转炫酷悬浮窗3---GDI+完美实现不规则窗体

?? 目标上一篇不规则窗体虽然实现了,但是图形有锯齿,给人以上世纪的老古董感觉,跟酷炫不搭边.今天就要用高级一些的技术做出完美的光滑的无锯齿的不规则窗体.计划&方案PNG图片本身就是带透明效果的,把此图片作为窗体,用GDI+将其实现.那么什么是GDI+呢?先要说一说GDI, Graphics Devices Interface,图形设备接口,负责系统与绘图程序之间的信息交换,处理所有Windows图形程序的输出.而GDI+是其增强版,xp时代是其一个子系统,负责在显示屏幕和打印设备输出信息.程序

VC++玩转炫酷悬浮窗2---不规则窗体的实现(常规)

?? 目标不规则窗体也称为异型窗体,像迅雷的飞鸟型窗体就是啦.这篇文章就是要实现这样的窗体.计划&方案根据上一篇文章继续扩展.我们有几种方案实现不规则窗体.迅雷就是用一张图片作为窗体的形状,那 么图片的类型我们也要考虑进来.现在是png图片的天下,自带背景透明:对于bmp图片,需要程序处理 一下.对于常规图形如圆形,只需要SetWindowRgn就可以搞定.对于复杂图形,需要用一点技巧来做.下面用 例子来演示圆形和复杂图形的不规则窗体.关于SetWindowRgn,参见官方文档. 实践一. 圆形

8个超炫酷仿HTML5动画源码

1.jQuery万年历插件 带农历老皇历功能 这是一款基于jQuery的日历插件,这款日历插件和之前分享的日历控件有很大差异,它是一本万年历,包含了农历已经老皇历的功能,是一个挑好日子的工具.同时日历还可以查看本年度的放假安排,功能非常强大.有兴趣的朋友可以下载学习. 在线演示 源码下载 2.CSS3发光进度条动画 超炫酷的样式 这次我们要来分享一款非常炫酷的CSS3进度条动画,其样式风格类似于星球大战里面的那些激光剑效果.页面初始化时,可以设定进度条的值,但是我们也可以利用其配套的借口来动态改

Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器

Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器

11个炫酷的Linux终端命令大全

导读 今天给大家分享用了十年的Linux总结出来的11个炫酷的Linux终端命令大全,通过今天这篇文章我将向大家展示一系列的Linux命令.工具和技巧,希望能够帮助到大家. 1.命令行日常快捷键 如下的快捷方式非常有用,能够极大的提升你的工作效率: CTRL + U 剪切光标前的内容 CTRL + K 剪切光标至行末的内容 CTRL + Y 粘贴 CTRL + E 移动光标到行末 CTRL + A 移动光标到行首 ALT + F 跳向下一个空格 ALT + B 跳回上一个空格 ALT + Bac

超炫酷的jQuery/HTML5应用效果及源码

jQuery非常强大,我们之前也用jQuery分享过很多实用的插件.HTML5可以让网页变得更加绚丽多彩,将HTML5和jQuery结合使用那将发挥更棒的效果. 今天向大家收集了一些关于HTML5和jQuery的应用及其源码,一起来看看. HTML5动感的火焰燃烧动画特效 这又是一款基于HTML5的超炫动画特效,是一款动感的火焰燃烧动画效果.这款HTML5动画火焰燃烧非常逼真. 核心jQuery代码: $( document ).ready(function() { // Set canvas

炫酷的手风琴效果

你一定用过书签,也一定给你的书本加过书签,那么你见过书签式的导航吗? 你一定见过手风琴,也一定知道弹奏手风琴时的它的外形变化,那么你见过手风琴式的导航吗? 如果没有,请往下看: 前面的话: 这篇博文先通过Javascript做一个简单的手风琴效果,让大家对手风琴效果有一定的了解:紧接着,我们换jquery做类似的手风琴效果.前面的两个例子都很简单,接下来要放大招了,我想用JQ或是原生的JS去做类似淘宝网中用到的手风琴效果.继续回到书签问题,既然JQ和JS都能实现那么炫酷的效果,我们用CSS3能不

炫酷 2048 完全免费 色彩无线 流畅如飞

游戏简介: 绿色,安全,无广告良心大作,色彩无限,炫酷至极的完全免费版2048上线,有一次根本停不下来了.游戏规则: 每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方乱数出现一个数字方块,相同数字的方块在靠拢.相撞时会相加.不断的叠加最终拼凑出2048这个数字就算成功.游戏攻略: 1.最大数尽可能放在角落. 2.数字按顺序紧邻排列. 3.首先满足最大数和次大数在的那一列/行是满的. 4.时刻注意活动较大数(32以上)旁边要有相近的数.

打造炫酷通用的ViewPager指示器 - Adapter模式适配所有

1.概述 上一期我们已经写了一篇 打造炫酷通用的ViewPager指示器 - 玩转字体变色 可是这种效果虽然绚烂可以装装A和C之间,但是在实际的大多数效果中并不常见,只是在内涵段子中有这个效果而已,那么这一期我们就用Adapter适配器模式适配所有的效果,堪称终结者.附视频地址:等这个周末吧 2.效果实现 2.1 整合上一个实例: 我还是还是拿上一个实例来做演示吧.这里我贴几种常见的效果,首先声明Android自带的有这个控件叫TabLayout,大家可以自己用用试试看好用不?我也用过但是不做任